Программатор памяти 24CXX EEPROM (I2C Bus) на PonyProg
Простейший программатор микросхем памяти EEPROM серии 24CXX (с последовательным интерфейсом I2C Bus), основан на PonyProg. Это самые распространённые EEPROM в современной бытовой технике (телевизорах). Требуется для ремонта. Нет смысла покупать дорогой и сложный профессиональный программатор. Лучше его сделать…
Далее, будет несколько фоток (все кликабельны и ведут на полноразмерное изображение).
Схема аппаратной, равно как и программной части программатора были реализованы автором PonyProg (Claudio Lanconelli)… Далее, эта универсальная и модульная схема была упрощена Черновым Сергеем — выделен только программатор микросхем памяти EEPROM серии 24CXX (I2C)…
Мне понравилась идея Чернова С., но я не смог воспользоваться его корявой разводкой/рисунком печатной платы — перерисовал сам, под свои детали. Таким образом, вклад Celeron — только разводка ПП и тестирование макета. От себя, добавил ещё вывод шины I2C на внешний разъём, для универсализации (DIP-панелька на плате поддерживает самые ходовые микросхемы: 24C01, 24C02, 24C04, 24C08, 24C16; подключение остальных необычных и редких конфигураций, в т.ч. кластеры микросхем с расширенным адресным пространством, осуществляйте на бутербродных макетках). Аппаратный макет проверен — работает!
Источник
Программатор для i2c своими руками
Превращаем программатор USBasp в I2C-USB переходник:
Если Вы уже знакомы с USBasp программатором,то вы знаете,что это очень простое и дешевое устройство для программирования м/к ATmega,но оказывается программатор , используя проект i2c tiny usb можно превратить в полноценный дешевый переходник I2C to USB.
В итоге мы получаем возможность подключать разные устройства I2C к компьютеру всего за 100 рублей (3$).Например мы можем подключить датчик давления BMP085 или микросхемы ввода/вывода MCP23017 для подключения кнопок или управления нагрузкой через реле.
USBasp прошивается стандартно как при обновлении прошивки и прошивается так же через arduino как программатор или используя другой USBasp программатор .Для программирования используются те же выводы SCK,MISO,MOSI ,RESET ,но прошивка идет через утилиту avrdude ,а не из среды Arduino IDE.
Порядок действий для прошивки через arduino:
1. Подключаем выводы SCK,MISO,MOSI ,RESET к Arduino согласно инструкции .
2. Установавливаем перемычку self programming (на фото обозначена как JP2),обычно место для перемычки не распаяно.
3. Качаем скомпилированную прошивку под USBasp тут и кидаем в папку путь_к_папке_ардуины_/hardware/tools/ .
4. Перейдем в консоль (cmd или bash) Вашей операционной системы в папку через команду cd путь_к_папке_ардуины_/hardware/tools/ и далее вводим команды для Windows,не забывем указать верный порт,на котором подключена Arduina:
avrdude -C avrdude.conf -c avrisp -P COM1 -b 19200 -p m8 -v
Программа выдаст сообщение ,где покажет состояние фьюзов и другую информацию.
Если Вы видите такие сообщения- значит подключено все правельно и можно прошивать командой:
avrdude -C avrdude.conf -c avrisp -P COM1 -b 19200 -p m8 -U flash:w:i2c_tiny_usb.hex -U lfuse:w:0x9f:m -U hfuse:w:0xc9:m
Для прошивки из Linux все аналогично, заменяется часть строки:
./avrdude -C avrdude.conf -c avrisp -P /dev/ttyUSB0 .
Порядок действий для прошивки через другую USBasp:
Подключаем выводы SCK,MISO,MOSI ,RESET один в один.Можно просто подключить через шлейф,идущий в комплекте с программатором.
Указываем опцию -c usbasp вместо -c avrisp
После успешной прошивки устройство опознается как i2c-tiny-usb и выводы программатора будут иметь другое назначение: SDA и SDL ,к которым мы можем уже подключать I2C устройства согласно справочной информации.
Работа переходника I2C-USB в Linux:
Драйвера в Linux не требуются ,но по умолчанию модуль i2c-dev не загружен и его необходимо установить в автозагрузку выполнив команду echo «i2c-dev» >>/etc/modules или/и загрузить модуль немедленно командой modprobe i2c-dev .В папке /dev/ Вы увидите возможно несколько устройств вида -i2c-X,наше скорее всего будет последним.Зная номер сейчас можно работать с устройствами подключенные на данной шине согласно примеров и инструкций к устройствам.Рекомдуется установить пакет программ i2c-tools (через управление ПО Вашей операционной системы) -поможет для поиска I2C устройств командой i2cdetect -y Х ,где Х — это номер i2c шины:
На скриншоте мы видим сообщение команды i2cdetect ,где выводит подключенные устройства ,а именно устройство 77 (шестнадцатиричное) — BMP085 ,а так же запуск демо программы датчика давления BMP085 ,которая вывела текущее давление и температуру.
Приложения с данным переходником i2c_tiny_usb могут работать как с USB устройством -в этом случае загрузка модуля i2c-dev не нужна.
Работа переходника I2C-USB в Windows:
Для работы переходника требуются драйвера i2c_tiny_usb .В windows приложения работают только как с USB устройством,а не с шиной I2C.
Источник
Программатор SPI и I2C микросхем памяти CH341A Mini Programmer
Микросхемы памяти серий 24хх (EEPROM), 25хх (Serial Flash) широко используются в электронике. Такие чипы присутствуют в составе практически любой конструкции современной бытовой и промышленной аппаратуры, где есть процессоры и/или микроконтроллеры. Данный программатор имеет возможность работы с обоими типами памяти.
В комплект поставки входят сам программатор и переходная плата с двумя посадочными местами под микросхемы памяти в SOIC корпусе.
Они дублируют имеющиеся на нижней стороне платы программатора, и если на плату программатора микросхемы памяти нужно обязательно припаивать, на переходнике можно попробовать прижать микросхему прищепкой или держателем для бумаг.
Так-же на переходнике есть посадочное место для разьема PLD-8 (в комплект не входит, я впаял 2хPLS-4), предназначенного для подключения прищепки или шлейфа программирования.
Аппаратная часть (Hardware).
Программатор выполнен на базе микроконтроллера «USB Bus Convert Chip» серии CH341A. Он рассчитан на физическое подключение к порту USB 2.0 компьютера, при подключении через хаб-удлиннитель программатор у меня работал с ошибками (может у меня хаб такой). Модуль программирования памяти собран на плате размерами 63х27мм (без учета USB разьема, с разьемом 84х27мм) из черного стеклотекстолита.
В распоряжении автора есть два экземпляра этого программатора, приобретенные в разное время, визуально их можно отличить по названию, один (более ранний) называется «CH341A Mini Programmer«, второй «CH341A MinProgramment«. Схемы одинаковые, различаются только цветом светодиода «RUN«. На первом зеленый, на втором желтый.
Некоторые схемные обозначения на конкретном программаторе могут немного отличаться, например самовосстанавливающийся предохранитель F1 (fuse) может обозначаться как R1. В инете встречались упоминания, что в эту позицию иногда ставят резистор нулевого сопротивления т.е. перемычку. У меня как и положено на обоих стоят предохранители
400mA, сопротивление 0,92Ом, маркировка на корпусе «5». Также на плате часто отсутствует схемное обозначение резисторной сборки PR1. Более грамотное обозначение схемных элементов программатора можно посмотреть на изображении верхней стороны платы от магазина WAVGAT (на AliExpress):
Особых отличий от даташита схема не имеет, разве что на блокировочных конденсаторах по питанию сильно экономили. Питание 5V от USB подается на вывод 28, на выходе 9 внутреннего стабилизатора блокировочный конденсатор.
Т.к. на выводах ввода/вывода напряжение соответствует 5V уровням, в основном это устройство на 5V, правда в инете много упоминаний и о программировании им микросхем на 3.3V без каких либо ошибок и отрицательных последствий. Выход отдельного стабилизатора AMS1117-3.3 в схеме не задействован и просто выведен на выходной ZIF разьем и на контакт боковой гребенки SPI.
В даташите указан способ сделать уровни на выходах совместимыми с 3.3V. Для этого необходимо соединить выводы 28 и 9 и подать на них 3.3V, при этом внутренний стабилизатор просто не используется. Но при этом 3.3V уровни также будут на на переходнике USB RS232, что иногда не приемлемо. Также на Ali сушествует другая версия этого программатора, скомпонованная немного по другому и выполненая на зеленом текстолите. Читал, что там на вывод 28 подается 3.3V от внешнего стабилизатора, но выводы 28 и 9 не соединены, и это нормально работает. В любом случае, уровни на переходнике USB RS232 и здесь будут 3.3V.
Если планируется программирование флешек 1.8V через основной разьем необходимо дополнительно приобрести модуль 1.8V-adapter. Бонусом является то, что переделать его для поддержки и уровней 3.3V несложно, надо лишь закоротить вход/выход стабилизатора 1.8V дополнительным джампером.
Теперь при наличии джампера адаптер работает с логическими уровнями 3.3V, при отсутствии — 1.8V.
Минус тут в том, что стоимость адаптера не намного меньше, чем самого программатора. Но если он уже есть, почему бы его не использовать по полной?
Если для программирования будет использована боковая гребенка SPI, можно поступить проще. На Ali много предложений 4-канального двунаправленного преобразователя уровней на МОП транзисторах за очень небольшие деньги.
Работа этого преобразователя подробно описана в статье «Согласование логических уровней 5В и 3.3В устройств». Схема отличается от рассмотренной в статье только номиналами резисторов (сопротивление меньше — увеличено быстродействие и энергопотребление). За счет добавления дополнительных джампера J1 и двух кремниевых диодов, можно будет программировать как 3.3V, так и 1.8V флешки.
Резисторы 2,2 кОм отделяют выводы #WP и #HOLD флешки от шины питания. Светодиод — индикатор наличия напряжения.
Программная часть (Software), драйвер.
Перед применением программатора необходимо инсталировать в Windows его драйвер(а), легко находятся в инете, я брал из архива программы AsProgrammer. Программатор поддерживает два режима, они переключаются аппаратно джампером J1. Применен интересный прием, при переключении джампера у чипа меняется Device ID на шине USB. Это вынуждает Windows найти подходящий по VID/PID драйвер и подключить его.
При джампере в положении «1-2» по VID_1A86&PID_5512 подгружается драйвер «USB-EPP/I2C… CH341A«. Он создает в диспетчере устройств раздел «Interface» в который и устанавливается.
В этом случае чтение, верификация, запись чипов памяти должны осуществляться непосредственно через ZIF-панель программатора CH341A или через боковой разьем Р2 с интерфейсом SPI.
При джампере в положении «2-3» по VID_1A86&PID_5523 подгружается драйвер «USB-SERIAL CH341A«. В диспетчере устройств найти его можно в разделе «Порты (COM и LPT)«. Там же можно посмотреть и номер присвоенного СОМ порта.
При этом программирование может производиться только через интерфейс RS232 TTL на разьеме Р1 (там же где и джампер), если целевое устройство поддерживает такой способ (встроенный загрузчик или монитор).
Программная часть (Software), программа прошивальщик.
С программатором CH341A на программном уровне обычно рекомендуется китайский (есть русификация) родственный софт «CH341A — USB Programmer». Но в то-же время в инете достаточно много жалоб на его глючность и нестабильность, особенно версий выше 1.18. CH341A — USB Programmer версий 1.30, 1.29 не может нормально работать (читать и записывать) с чипами памяти объемом более 8MByte/64MBit. Примерно после адреса 0800000 начинают сыпаться хаотичные ошибки.
Поэтому я не стал наступать на эти грабли повторно, и с самого начала использовал программу «AsProgrammer» от участника сообщества Tifa, последняя версия 1.4.0. Скачать можно на форуме, топик форума показывается в лог-окне программы при запуске. Если кто-то захочет полазить в исходниках, проект есть на GitHub (если правильно понял, проект на Free Pascal, Lazarus).
Кроме поддержки 24 и 25 серий микросхем памяти, программа работает и c 45 серией, поддерживает серию ST M95 и память microwire (только для данного программатора). Все схемы подключения есть в архиве программы. Полный список поддерживаемых микросхем памяти можно посмотреть в каталоге программы в файле chiplist.xml.
Программа не требует установки, включает в архив драйверы для обоих режимов программирования СН341А.
Log-файл работы программы с флешкой W25Q128FW, 16Мб, 1.8V через «1.8V-adapter«:
Используется программатор: CH341
Sreg: 00000000(0x00), 00000010(0x02), 01100000(0x60)Используется программатор: CH341
Читаю флэшку…
Готово
Время выполнения: 0:02:49Используется программатор: CH341
Стираю флэшку…
Готово
Время выполнения: 0:01:03Используется программатор: CH341
Записываю флэшку с проверкой…
Готово
Время выполнения: 0:24:45
5 вариантов BIOS) ни одного сбоя или ошибки.
Линуксоидам использовать стороннюю программу нет необходимости, стандартный прошивальщик Flashrom полностью поддерживает данный программатор (должен быть собран с поддержкой ключа «-ch341a»).
Доработка 1. Подтяжка сигналов #WP и #HOLD.
В программаторе линии сигналов #WP и #HOLD посажены непосредственно на шину питания. Это мешает сбросить/установить бит QE во втором регистре статуса (25хх). В даташитах на микросхемы памяти есть предупреждения по этому поводу, вот из даташита на W25Q128FW:
WARNING: If the /WP or /HOLD pins are tied directly to the power supply or ground during standard SPI or Dual SPI operation, the QE bit should never be set to a 1.
Для исправления этого недостатка надо отсоединить ноги #WP (pin 3) и #HOLD (pin7) от VCC и подключить их к VCC через резисторы 2.2-4.7 кОм.
На «чёрном программаторе» советуют это делать так (привязка к схеме, нумерация контактов относительно ZIF разьема), дорожка между контактами 11-12 перерезается (#HOLD), между контактами впаивается резистор, дорожка от 11 контакта ведущая к 7 (#WP) перерезается у 11 контакта, проводок напаивается с 12 контакта к отрезанной дорожке, та же дорожка перерезается перед 7 контактом, поверх разреза напаивается резистор:
Как по мне, проще сделать это на переходнике 1.8V-adapter, если задействовать его вторую незанятую половину разьема. Тем более при применении адаптера переделка на плате программатора становится бесполезной, порты у трансмиттера используются как однонаправленные.
Доработка 2. Увеличение кол-ва блокировочных конденсаторов по питанию.
Участник сообщества «AlexX1810» предложил добавить на плату программатора три блокировочных конденсатора 0.1 мкФ. По его словам улучшается стабильность работы программатора.
Если ориентироваться по схеме, первый конденсатор между 6-7 контактами разьема Р1 (5V), второй между 5-6 контактами разьема Р2 (3.3V), третий между 15-16 контактами ZIF панельки (7-8 контакты разьема I2C, 3.3V). Все впаяны со стороны контактов.
У меня во время использования программатора сбоев не было, но хуже во всяком случае не будет.
Источник