vazz 0 August 1 Posted August 1 · Report post Наверное вопросы мои глупые, но чо-то сбился с толку в самом начале затеи. Мне требуется под один проект изготовить полноценный оффлайн-HVSP-программатор, причем только для одного МК - ATtiny13A и только для заливки одной и той же прошивки. Сбрасывалки/"доктора" мне не подходят, т.к. не решают задачу целиком. Задача будущего оффлайн-программатора такая - прошить МК тестовой прошивкой с отключением пина сброса, которая запустит АЦП, который сделает несколько измерений эталонного сигнала именно через порт сброса (ADC0, он же PB5, он же пин №1) и сохранит эти калибровочные значения, например, в EEPROM. Далее тот же оффлайн-программатор, дождавшись поступления в EEPROM калибровочных значений, должен их считать из МК, пересчитать по ним определенную волшебную таблицу значений и залить уже полноценную прошивку вместе с получившейся таблицей в тот же МК (это даст мне возможность обойти использование хоть и быстрой, но громоздкой операции деления, которая бы точно понадобилась при написании процедур калибровки непосредственно в полноценной прошивке - добавить такую процедуру просто некуда, свободной памяти на это точно не будет). Я попытался вчитаться в раздел даташита 17.7.2 High-Voltage Serial Programming Instruction set и гляжу на таблицу Table 17-13. High-Voltage Serial Programming Instruction Set for ATtiny13A и сразу начинаю тормозить... Подскажите: - что означают слэши в названиях столбцов "Instr.1/5" и "Instr.2/6"? Это значит что первая инструкция в том же формате дублируется в пятом кадре фрейма? (вторая дублируется в шестом кадре?) И если кадр 4 пуст (по таблице), то мне его как пропускать, чтобы затем 5 и 6й кадры отправить? - что означают нижние подчеркивания в битовых масках? Я так понял каждый кадр - это 11 бит, но зачем эти нижние разделители? - может кто имел практический опыт с этим HVSP-методом и подскажет - этот метод полностью статичен? Т.е. частота тактов на SCI может быть любая и может именяться в любой момент времени по моему разумению (данные защелкиваются по фронту)? Или есть какие-то фиксированные тайминги/ограничения? Заранее благодарен за отклики и подсказки! Если взять инструкцию "Chip Erase", то у нее, наверное, всего три кадра 1-3, а 4-6 просто нет? 🙂 Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 August 1 Posted August 1 · Report post Может быть, проще заменить МК на более современный, например, типа ATtiny202 или ATtiny402? У них тоже 8 выводов, но память 2 и 4 КБ, на деление должно хватить. Программирование всего через один вывод. Quote Share this post Link to post Share on other sites More sharing options...
Serg_1403 0 August 2 Posted August 2 · Report post 19 часов назад, vazz сказал: - что означают нижние подчеркивания в битовых масках? Я так понял каждый кадр - это 11 бит, но зачем эти нижние разделители? Для лучшего визуального восприятия. Двоичное число таким образом разбивается на логические блоки. Это как раз то, за что порой критикуют мои коды)) Спойлер Это на 2 делю, но бывает и больше разбиваю, если в байте несколько настроек. Кстати, вроде не все компиляторы поддерживают такую запись. 19 часов назад, vazz сказал: обойти использование хоть и быстрой, но громоздкой операции деления тини85.. нее? Quote Share this post Link to post Share on other sites More sharing options...
vazz 0 August 2 Posted August 2 · Report post Благодарю за ответы, на счет ATtiny85, 202, 402 - они в РФ чуть дороже получаются, а у меня бойня буквально за каждый рубль в себестоимости 🙂 Проект не для ответственных задач и ATtiny13A можно и не оригинальные партиями по 40р с алика заказывать и не терять на доставке (я живу в дали от цивилизации). Плюсом ко всему - я уже загорелся уместить все именно в ATtiny13A (азарт ассемблерщика проснулся). В общем решил сделать пока "онлайн"-программатор на FT232 в режиме BitBang (под рукой валяется) с управлением из самописной утилиты под винду - как отлажу может дело и до оффлайн-версии дойдет, а то я с этим HVSP не связывался никогда ранее. Вроде как жестких таймингов нет, поэтому управление из под винды, думаю/надеюсь, прокатит без проблем. Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 August 4 Posted August 4 · Report post vazz, сомнительно, что у вас так просто получится. У МК с таким выводом Reset непростой вход в программирование. Причина – когда Reset в режиме вывода порта, на него не подать сигнал. Работал с более современными МК, у них проблему решают так. После подачи питания в течение около пары десятков миллисекунд вывод находится в Z-состоянии. Именно в это время надо подавать высокое напряжение 12 вольт. Мельком посмотрел ATtiny13A, у него вроде как такая же ситуация. Для программирования нужно питать МК от программатора через ключ, нужен ключ для разряда конденсатора питания, нужен коммутатор для защиты сигнальной цепи от 12 вольт, нужен измеритель напряжения питания МК, нужен источник 12 вольт. Для этой задачи удобно использовать МК. Схема получается не совсем простой. Особой проблемы в разработке схемы и программ для МК и компьютера нет, но это далеко не конструкция выходного дня. В общем, посмотрите повнимательнее алгоритм программирования ATtiny13A, я с ним не работал. Quote Share this post Link to post Share on other sites More sharing options...
vazz 0 August 4 Posted August 4 · Report post AI7, спасибо, я как чувствовал, что надо отдельный ключ и на подачу питания МК и отдельный ключ на прижим питания к нулю 🙂 Уже на макетке все собрал, приступил к написанию проги под винду. На счет настройки вывода RESET на выход - я это сразу учел, он у меня только как вход АЦП работает. Написал пока тест "моргания" одним из битов в режиме BitBang на скорости 1Мбод, осциллографом глянул - задержки из моей проги при простом инвертировании любого бита в цикле составляют до 2мс. Программатор будет медленный, конечно, но мне для начала пойдет. До оффлайн-программатора на базе отдельного МК чуть позже доберусь, как с этим поиграюсь. Может кому схема пригодится. Она даже при отключенной FT232 обеспечивает "притягивание" всех пинов таргета к нулю. Предостережение: нужно быть осторожным при переключении питания МК - сначала переводить бит RTS = 1 и DTR = 0 (вывод питания "в воздухе") и только после этого выбирать что подавать на ногу питания: +5В (RTS = 0) ИЛИ закоротить питание на ноль (DTR = 1). Quote Share this post Link to post Share on other sites More sharing options...
Raven 36 August 4 Posted August 4 · Report post 21 minutes ago, vazz said: Предостережение: нужно быть осторожным при переключении питания МК - сначала переводить бит RTS = 1 и DTR = 0 (вывод питания "в воздухе") и только после этого выбирать что подавать на ногу питания: +5В (RTS = 0) ИЛИ закоротить питание на ноль (DTR = 1). Было бы неплохо предусмотреть схемотехническую защиту от одновременного включения VT1, VT2. Сигналы RTS, DTR в моменты включения, инициализации и т.п. FT232 могут теоретически вести себя как им вздумается. Quote Share this post Link to post Share on other sites More sharing options...
vazz 0 August 4 Posted August 4 (edited) · Report post Признаюсь, мне было лень делать именно хардварную увязку между ключами на VT1 и VT2, я просто понимаю, что их одновременно открывать нельзя и мне этого достаточно (токоограничительный резистор не ставил по причине моего пока "непонимания" на сколько крутой фронт/спад должен быть при коммутации питания во время ритуала перевода МК в режим HVSP). Мой экземпляр модуля с али с поддельной FT232 при инициализации сам настраивает TXD, RTS, DTR как выходы (все в лог.1), выводы RXD, RI, DSR, DCD как входы. И это очень логично. Думаю оригинальне чипы ведут себя также (есть и оригинальные у меня, просто неоригинальный уже стоит на плате модуля распаянный с удобными выводами с шагом 2.54мм). Номиналы резисторов на схеме подобраны с учетом внутренних сопротивлений неоригинальной FT232. По даташиту ее выходы обеспечивают до 24мА тока, но это при ОЧЕНЬ большом падении напряжения на внутренних сопротивлениях, что в и итоге не позволяет получить указанный ток, по крайней мере на неоригинальной FT232. Чтобы не вдаваться в подробности моих измерений реального тока скажу, что при настройке бита на ВЫХОД и установке лог.1 нужно учесть, что внутреннее сопротивление пина при этом будет находиться в пределах 500-1000 Ом, а при установке лог.0 получше уже, но все равно много - порядка 50-100 Ом. И еще - при настройке бита FT232 (неоригинальной) как вход внутренняя "подтяжка" этого входа будет к питанию через сопротивление порядка 200-400 кОм, поэтому на линиях RXD, RI, DSR, DCD предусмотрены резисторы по 10кОм, притянутые к земле, но даже при таких номиналах напряжение лог.0 составляет порядка 0,15 Вольт. Edited August 4 by vazz Quote Share this post Link to post Share on other sites More sharing options...
Serg_1403 0 August 4 Posted August 4 · Report post 39 минут назад, vazz сказал: Уже на макетке все собрал, приступил к написанию проги под винду. У винды, если не ошибаюсь, минимальная задержка 1..15мс. В окно 20–60 мкс напрямую из кода виндовс не попадет (если что). Quote Share this post Link to post Share on other sites More sharing options...
vazz 0 August 4 Posted August 4 (edited) · Report post 7 minutes ago, Serg_1403 said: У винды, если не ошибаюсь, минимальная задержка 1..15мс. В окно 20–60 мкс напрямую из кода виндовс не попадет (если что). Вот с этим я и хочу поиграться. Я сделал указанную схему на макетке с штыревыми разъемами, на которую модуль с FT232 насаживается легко и также легко снимается. Если из под винды не прокатит - вместо модуля FT232 соберу платку на управляющем МК (оффлайн-версия). Хочется поиграться сначала с этим.. Есть пара заранее подготовленных мыслишек. Про задержки из под винды написал ранее - при использовании моего допотопного ноута они составляют ДО 2мс, осциллографом наблюдаю также и очень короткие иглы, которые все таки дают надежду на пусть и не с первого раза, но успешную процедуру по переводу целевого МК в режим HVSP. Edited August 4 by vazz Quote Share this post Link to post Share on other sites More sharing options...
Serg_1403 0 August 4 Posted August 4 · Report post Да. Как то аппаратно это решить. Может через компаратор. Хотя вариантов много разных. Quote Share this post Link to post Share on other sites More sharing options...
vazz 0 August 4 Posted August 4 (edited) · Report post Времени маловато на игрушки, но я таки сегодня вечером запилил ритуал перевода МК в HVSP-режим без каких-либо изменений вышеприведенной схемы. Но прочитать что-нибудь или уж тем более записать смогу уже только завтра. Такой вопрос к знающим - если после соблюдения ритуала целевой совершенно чистый МК уверенно поднимает ногу SDO из Z-состояния вверх (к питанию) и держит ее бесконечно долго до отключения питания - это уже можно считать маленькой победой и успешным переходом в HVSP-режим? 🙂 Edited August 4 by vazz Quote Share this post Link to post Share on other sites More sharing options...
vazz 0 August 7 Posted August 7 (edited) · Report post Появился интернет, решил отписаться - все получилось конкретно с этой схемой. Более того, дополню (может кому пригодится): - подача 12В на RESET может происходить как через несколько мс после подачи питания на МК, так и одновременно; - в русском переводе Programmer's Guide на FT232 вроде как пишут (в оригинале лень сверять эту инфу), что с помощью функции FT_SetBitMode можно только один раз выбрать режим - фигня это все, можно сколько угодно вызываать функцию и переключать выводы на вход/выход "на лету". Это я к тому, что по ДШ на ATtiny линия SDO классифицируется не только как выход данных МК, но и как ВХОД Prog_enable[2] для ритуала входа в режим HVSP. Сюда же отмечу, что Во время ритуала входа в режим вообще не обязательно переводить SDO в режим выхода, а оставить входом, подтянутым резистором к нулю (как на схеме выше); - данные на SDO читать по спаду такта на SCI (за счет задержек винды я даже с запозданием после фронта считываю, так что для оффлайн-программатора без винды возможно потребуется пассивная задержка после формирования спада, но это не точно - просто догадка); - защелкивание отправляемых данных и инструкций по линиям SDI, SII происходит по фронту на SCI (это и так написано в ДШ), но хочу заметить, что защелкивание может происходить не прям по фронту, а скорее уже во время импульса SCI, поэтому пришлось добавить пассивную задержку в своем софте 1мс сразу после формирования фронта ДО формирования спада (за счет высоко-высоко-высоко уровнего выполнения фактическая задержка в Win еще больше). Это было замечено на неоригинальной FT232R (почему-то мне кажется, что такая же петрушка будет и на оригинале); - для тех кто решит повторить подобный программатор именно на базе FT232 - придется написать свои собственные обертки для функций FT_Write/FT_Read, т.к. выполнение функции FT_Purge каждого соответствующих из буферов непосредственно перед записью/чтением обязательно, иначе будут проблемы, особенно с чтением состояния порта (из-за этого я потратил больше всего времени, т.к. по осциллографу ответы от МК появллялись корректно, а вот считывать сигнал SDO сначала не удавалось совсем, потом нестабильно, и только после очистки буферов + добавление задержки для защелкивания SDI, SII все заработало стабильно без единой ошибки за долгие тесты в цикле, которые я запускал пока занимался другими делами). - в моих тестах я использовал неоригинальную FT232, а вот ATtiny13A тестировал и оригинальные и не оригинальные - работают все без исключения. И еще.. хотелось немного схитрожопить и дополнительно задействовать CBUS BitBang, чтобы нагородить 16 герконовых реле, которые будут гальванически отключать 8 линий от реальной схемы и с задержкой включать 8 линий к моему HVSP-программатору, чтобы программировать/отлаживать без необходимости вручную переключать МК то к схеме то к программатору.. Но с CBUS Bitbang не вышло - при переключении на CBus данные основного порта асинхронного BiBang портятся (не остаются в последнем запомненном состоянии). Поэтому я упростил схему программатора, убрав ключ на VT2, в этом случае у меня освободится линия DTR, а также изначально висит свободная линия CTS - вот эти две линии я задействовал для управления герконовыми реле (одна линия у меня размыкает нормально-замкнутую группу из 8ми реле на реальную схему, а другая линия у меня замыкает нормально-разомкнутую группу из 7ми реле на программатор (пин №3 PB4 МК не используется для прошивки)). Свой софт допиливаю в режиме командной строки без UI (типа как avrdude), так что можно будет задать путь к custom tool в avr(microchip)studio и программатор сам будет переключать МК для прошивки и затем переключать обратно на реальную схему Edited August 7 by vazz Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 August 7 Posted August 7 · Report post Для исключения сквозных токов в коллектор VT2 можно поставить резистор 100 Ом или поменьше. Для подачи питания можно поставить предназначенную для этого микросхему, у неё ограничение пускового тока, стоит в пределах 10 рублей. Для меня такая схема с использованием сигналов RTS и прочих – это из прошлого века. Лучше подключить управляющий МК через, например, дешёвую CH340N. Необходима гальваническая развязка, поставить дешёвый сдвоенный оптрон на сигналы TxD и RxD. На МК легко чётко сформировать требуемые сигналы – это стабильная работа. А так неизвестно, что будет, например, с другой партией МК или с другим компьютером. У меня компьютер со своими мегагерцами на борту откликается через около 13 миллисекунд. Почему оптроны, есть ведь микросхемы-коммутаторы. Quote Share this post Link to post Share on other sites More sharing options...