RSS блога
Подписка
Внутрисхемный программатор 3.3V SPI EEPROM из Arduino
EEPROM 25 серии в наше время не редкость. Программаторы на основе CH341 для них — тоже, и стоят недорого, но не всегда оказываются под руками в нужный момент.
Что делать, когда прошить микросхему надо срочно, а нечем?
Можно собрать программатор под LPT порт:
Он прост и предельно дешёв, вот только LPT в современном компьютере встречается уже примерно никогда.
Если под руками есть старый ПК с таким портом — повезло, иначе придётся искать другие варианты.
Например, можно воспользоваться Arduino.
Обычно для такого применения рекомендуют использовать довольно редкую Arduino Micro Pro на основе МК ATMega32U4, но можно обойтись и намного более дешёвой китайской Arduino Nano V3:
Так как память 25 серии рассчитана на питание напряжением 3,3В, а МК в Arduino питается напряжением 5 В, то плату придётся немного доработать, чтобы не сжечь микросхему памяти:
Перевернём плату Arduino нижней стороной вверх:
Диод Шоттки, обозначенный на принципиальной схеме D1, нужно аккуратно отпаять и заменить на стабилизатор напряжения 3,3В типа 1117 или аналогичный:
Стабилизатор напряжения можно добыть из негодной ЖК матрицы от настольного монитора, вырезав его оттуда вместе с куском платы и обвязкой из конденсаторов. Только предварительно проверьте его выходное напряжение — иногда они в матрицах попадаются на 1,8В или 2,5В — нам такое не пойдёт. Матрица от ноутбука тоже не подойдёт — она вся питается напряжением 3,3В и дополнительного внутреннего стабилизатора этого напряжения в них нет.
Припаиваем провода к контактам D10, D11, D12, D13, 5V, GND платы Arduino, дополнительный стабилизатор изолируем и прикрепляем к ней каптоновым скотчем:
:
Интерфейс SPI довольно скоростной, поэтому провода длиннее 5-7 см делать не надо — меньше будет проблем с помехами.
На этом аппаратная часть программатора готова — пора переходить к программной.
Создаём на жёстком диске папку, в которую кидаем прошивку программатора, распаковываем программу XLoader, прошивку целевого устройства и программу FlashROM.
Запускаем XLoader, указываем в нем тип используемого в Arduino МК, порт, к которому она подключена и файл «frser-duino.hex»:
Нажимаем кнопку Upload и, если все в порядке, в нижней строке будет сообщение «1368 bytes uploaded». Загрузчик Arduino при этом затирается и если захотите вернуть плату в исходноесостояние — его надо будет восстанавливать.
Для проверки программатора сначала нужно измерить напряжение на выводах D10 и D11, оно должно равняться напряжению питания(3,3В).
Затем запускаем командную строку и вводим следующее:
Если все работает нормально, должен получиться ответ:
Наличие строки «serprog: Programmer name is „frser-duino“ свидетельствует о том, что программатор воспринимается программой и можно отключить его от USB и подключать его к целевому устройству.
Если прошиваемая микросхема припаяна напрямую к плате, то провода от программатора можно паять напрямую к её выводам согласно рисунку:
Если она съёмная, то к проводам для программатора можно припаять панельку:
При этом надо дополнительно соединить на панельке перемычками выводы 3,7 и 8.
Подключив программатор к микросхеме и USB, набираем в командной строке:
Наименование микросхемы памяти надо указывать точно, иначе программа откажется её прошивать.
Результат работы должен быть таким:
После этого можно отключать питание и отпаивать провода — процедура прошивки успешно завершена.
Что делать, когда прошить микросхему надо срочно, а нечем?
Можно собрать программатор под LPT порт:
Он прост и предельно дешёв, вот только LPT в современном компьютере встречается уже примерно никогда.
Если под руками есть старый ПК с таким портом — повезло, иначе придётся искать другие варианты.
Например, можно воспользоваться Arduino.
Обычно для такого применения рекомендуют использовать довольно редкую Arduino Micro Pro на основе МК ATMega32U4, но можно обойтись и намного более дешёвой китайской Arduino Nano V3:
Так как память 25 серии рассчитана на питание напряжением 3,3В, а МК в Arduino питается напряжением 5 В, то плату придётся немного доработать, чтобы не сжечь микросхему памяти:
Перевернём плату Arduino нижней стороной вверх:
Диод Шоттки, обозначенный на принципиальной схеме D1, нужно аккуратно отпаять и заменить на стабилизатор напряжения 3,3В типа 1117 или аналогичный:
Стабилизатор напряжения можно добыть из негодной ЖК матрицы от настольного монитора, вырезав его оттуда вместе с куском платы и обвязкой из конденсаторов. Только предварительно проверьте его выходное напряжение — иногда они в матрицах попадаются на 1,8В или 2,5В — нам такое не пойдёт. Матрица от ноутбука тоже не подойдёт — она вся питается напряжением 3,3В и дополнительного внутреннего стабилизатора этого напряжения в них нет.
Припаиваем провода к контактам D10, D11, D12, D13, 5V, GND платы Arduino, дополнительный стабилизатор изолируем и прикрепляем к ней каптоновым скотчем:
:
Интерфейс SPI довольно скоростной, поэтому провода длиннее 5-7 см делать не надо — меньше будет проблем с помехами.
На этом аппаратная часть программатора готова — пора переходить к программной.
Создаём на жёстком диске папку, в которую кидаем прошивку программатора, распаковываем программу XLoader, прошивку целевого устройства и программу FlashROM.
Запускаем XLoader, указываем в нем тип используемого в Arduino МК, порт, к которому она подключена и файл «frser-duino.hex»:
Нажимаем кнопку Upload и, если все в порядке, в нижней строке будет сообщение «1368 bytes uploaded». Загрузчик Arduino при этом затирается и если захотите вернуть плату в исходноесостояние — его надо будет восстанавливать.
Для проверки программатора сначала нужно измерить напряжение на выводах D10 и D11, оно должно равняться напряжению питания(3,3В).
Затем запускаем командную строку и вводим следующее:
c:\rcv\mingw32-w64-flashrom-r1781.exe --programmer serprog:dev=COM3:115200
Если все работает нормально, должен получиться ответ:
flashrom v0.9.7-r1781 on Windows 6.1 (x86)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
serprog: Programmer name is "frser-duino"
Found Generic flash chip "unknown SPI chip (RDID)" (0 kB, SPI) on serprog.
===
This flash part has status NOT WORKING for operations: PROBE READ ERASE WRITE
The test status of this chip may have been updated in the latest development
version of flashrom. If you are running the latest development version,
please email a report to flashrom@flashrom.org if any of the above operations
work correctly for you with this flash part. Please include the flashrom
output with the additional -V option for all operations you tested (-V, -Vr,
-VE, -Vw), and mention which mainboard or programmer you tested.
Please mention your board in the subject line. Thanks for your help!
No operations were specified.
Наличие строки «serprog: Programmer name is „frser-duino“ свидетельствует о том, что программатор воспринимается программой и можно отключить его от USB и подключать его к целевому устройству.
Если прошиваемая микросхема припаяна напрямую к плате, то провода от программатора можно паять напрямую к её выводам согласно рисунку:
Если она съёмная, то к проводам для программатора можно припаять панельку:
При этом надо дополнительно соединить на панельке перемычками выводы 3,7 и 8.
Подключив программатор к микросхеме и USB, набираем в командной строке:
c:\rcv\mingw32-w64-flashrom-r1781.exe --programmer serprog:dev=COM3:115200 -c MX25L1605 -w c:\rcv\firmware.hex
Наименование микросхемы памяти надо указывать точно, иначе программа откажется её прошивать.
Результат работы должен быть таким:
flashrom v0.9.7-r1781 on Windows 6.1 (x86)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
serprog: Programmer name is "frser-duino"
Found Macronix flash chip "MX25L1605" (2048 kB, SPI) on serprog.
Reading old flash chip contents... done.
Erasing and writing flash chip...
Warning: Chip content is identical to the requested image.
Erase/write done.
После этого можно отключать питание и отпаивать провода — процедура прошивки успешно завершена.
Самые обсуждаемые обзоры
+25 |
577
33
|
+63 |
1999
50
|
+25 |
1611
50
|
Вот у CH341 есть как минимум три разных программы, с разными списками микросхем. А тут как с этим?
выведет полный список поддерживаемых микросхем.
PS: Я собрал прошивку на STM32 ( github.com/dword1511/stm32-vserprog ), и скомпилировал flashrom_1.1 Чтоб залить openwrt_firmware в роутере.
Но условия задачи выглядят сильно натянутыми. Как это вдруг у человека найдётся в загашнике Ардуинка и негодная ЖК-матрица, но не найдётся какого-нибудь AVR ISP, который легко доделать под SPI Flash, или даже просто 8266, который не надо переделывать на 3,3 вольта?
А тут вам не здесь!..
Ещё в первом варианте "Микро-80" таким способом вводилась в память программа загрузчика:
А во второй половине 1980-х, работая на оборонном заводе, я лично вводил с кнопочного пульта квазиэлектронной АТС «Квант» загрузчик, который потом грузил в память АТС рабочее ПО с кассетного магнитофона.
Было очень увлекательно… :)
Очень полезная в плане самообразования штуковина, со временем начинаешь видеть (и исправлять на лету) опечатки и даже ошибки в программе. А все потому, что цена вопроса «перепрошить заново» немала, и организм автоматически приспосабливается :)
Тут наверняка многие ещё «руками» помнят, что это такое… :)
Обзаводиться готовым программатором, не испытывая в нём необходимости? Ну, это такое себе удовольствие…
А если раз в жизни понадобится запрограммировать одну микросхемку, и у меня совершенно случайно завалялась Arduino Nano V3 — лично я предпочту сваять на её базе нечто, подобное описанному автором.
А потом, когда надобность в программаторе SPI EEPROM отпадёт — эту плату можно будет использовать для каких-то других целей. Например, светодиодиком помигать… ;) :)))
За десятки лет ни разу не потребовалось шить SPI память.
Так что обхожусь программатором для PIC контроллеров… :)
Тоже в основном пикитом пользуюсь, но и 341 есть, и программаторы для STM и AVR.
Ну и, естественно, адаптеры USB/TTL в ассортименте.
341 раз 10 всего потребовался, но он и стоит копейки по сравнению с пикитом.
Ну а ради экономии вместо ардуино нано нормальные люди покупают LGT8F328P с более удобным тайпси и в два раза дешевле.
А на сэкономленное как раз программатор прикупить можно.
Впрочем, до сих пор встречаются люди, которые из скупости шьют пики какой-то самопальной хренью, хотя пикит нынче копейки стоит.
Это я, по вашей «логике», «непредусмотрительно» не покупаю того, что мне ни разу не потребовалось за почти полвека занятий электроникой? ;) :))))))
Вы — да ради бага! Но мне-то оно на кой?? :)
«Это другое!» © :)
Это вещь универсальная и многоцелевая, это надо!
А мне он «потребовался» ровно 0 (ноль) раз. Потому его у меня и нет.
Вы бы поаккуратнее насчёт «нормальных»-то… :)
А то у окружающих может быть сильно другое мнение… ;)
Можно. Но не нужно. :)
Ибо то, что уже есть, вполне устраивает.
«Из скупости»??.. Зря вы по себе судите… :)
Если эта «самопальная хрень» работает и удовлетворяет их потребности — значит, им нет нужды что-либо менять в их жизни. А «копейкам» они наверняка находят другое применение. ;)
1. Во-первых, я ничего не теряю. ;)
2. Во-вторых, я не стану его покупать, по уже озвученным причинам. :))
Соответственно. и потерять не получится. :)
Если вы уж и эту коробку потеряете, то вам точно не нужны никакие программаторы вообще.
А у CH341 на этот случай в комплекте идёт платка-переходник с двумя самыми распространёнными видами площадок, куда флешка припаивается за минуту.
Я читаю документацию на микросхемы до их применения и хорошо готовлюсь. :))
Первым делом надо попробовать. Если не получается — спросить на форумах. Если там ничего полезного не ответили — погуглить в яндексе. И только если всё вышеперечисленное не помогло — читать документацию.
На моей — и большинстве прочих, о существовании которых вы явно не знаете ;) — «местной барахолке» куда проще \купить кусок атомной подводной лодки, чем CH341…
Вы, ребятки, хоть иногда вспоминали бы, что и за московской кольцевой тоже люди есть… :))
Это как жить в Оймяконе и доказывать, что и в Экваториальной Гвинее тоже должен выпадать и долгое время лежать снег… :))
А у меня не то что CH341 — и самого радиорынка в помине нет и никогда не было. И вариантов приобретения этого программатора приблизительно ровно три:
1. Aliexpress — полтора-два месяца ожидания, и без гарантий.
2. Чип-и-Дип сотоварищи — дорого, долго и без гарантий.
3. Поездка во Владивосток — 4 (четыре) часа в электричке (в один конец), посещение пары-тройки магазинов близкой тематики — и опять-таки без гарантий наличия и ОЧЕНЬ дорого.
Так что — «на», «к» и «в» такую «радость»! :)
Пока не «горит» — и думать о нём не стану. Понадобится разово — решу подручными средствами, примерно как автор. И только если понадобится более-менее регулярно «шить» память — буду решать основательно.
Так что со сказками насчёт «на любой местной барахолке» прошу не беспокоить — я уже сто лет как не в детском возрасте и в сказки не верю… :))))
Если захотите шить 1,8В чипы, то схема автора не подойдёт.
Я вообще «не наш человек!»… :)))
Тоже хотел задать автору этот же вопрос — зачем городить лишний бутерврот? Там вполне себе такая же 1117 на борту.
Допустим всё вышесказанное верно, но зачем ещё городить стабилизатор, если можно запитать тот, который есть на плате, а с него выход 3.3 подать на вход питания МК?
Напряжение 3.3 вольта берётся с выхода CH340G, ток нагрузки которой по этому выходу ограничен 50 миллиамперами.
И это вызывает два, как минимум, вопроса:
1. Вы уверены, это этого тока гарантированно хватит для работы программатора с любой их поддерживаемых им микросхем памяти?
2. Вы готовы, собрав такой программатор, вдруг потерять его в самый неудобный момент вследствие выхода из строя CH340G — от короткого ли замыкания, или по любой другой причине?
Я для себя ответил бы «нет» на оба вопроса. А вы?.. ;)
ch340 Переживает кз по 3,3 и продолжает работать дальше.
Данный программатор дико ограничен по возможностям и типам флешек.
Потерять целых 100 рублей не жалко а тем кто реально что то делает нет проблем купить нормальный программатор за 3-5$ с прищепкой.
Может оказаться очень жалко потерять единственную ардуинку, на которой после прошивки единственной микросхемы памяти собирался тут же что-то построить.
А ваш «нормальный» программатор всё ещё не у меня (и у автора, и у очень многих других)по одной единственной причине: он нам на фиг не сдался. :))
Есть пара других, нужных мне достаточно часто. И то из одного, самодельного, я «выпилил» до поры всё, что связано с рассматриваемой в статье задачей — ибо мне нафиг оно не сдалось, и размеры печатной платы сильно уменьшились. :)
«Вангую», что задачи автора он решил. :)
Явно для того и собирался, а вовсе не для создания «всего и на все случаи жизни»…
Наны от RobotDyn кстати имеют 2 отдельных стаба на 3,3 и 5в, правда стоят в разы дороже.
1117 — пятивольтовая, 3.3 вольта с ограничением в 50 миллиампер берётся из микросхемы USB интерфейса.
RTFM же… :)
А ещё бывают SPI-flash с питанием 1,8В
В статье вполне нормальное решение, Arduino и есть удобный инструмент для таких дел.
Так что в ситуации автора я бы тоже пошёл его путём…
Я, когда-то, прошивал BIOS материнской платы ПК, с помощью Arduino и скетча для прошивки 25 памяти. В скетче переназначил выходы так, как мне было удобнее, и все удалось с первого раза, не считая пробные чтения записи, в процессе ознакомления с процессом прошивки.
И чем же?? Добавлением стабилизатора на 3.3 вольта для питания микросхем памяти? ;)
Существует какая ардуида на 1.8V
Или что из простеньких PIС,STM ATMEG работающих от 1.8V
P.S. А хотя я тут немного подумал, и на самом деле с заменой кварца или с переходом на RC будет работать любая ардуина на ATMega.