У большинства микроконтроллеров AVR имеется возможность заливать прошивку через последовательный интерфейс SPI. А раз так, — значит для этих целей вполне можно использовать шлюз RH-0004, нужно только написать соответствующее ПО. Именно этим я занимался весь последний месяц и сегодня, наконец, могу выложить на сайт программу, превращающую шлюз, помимо всего прочего, ещё и в USB-программатор микроконтроллеров AVR.
Параметры используемого для последовательного программирования SPI-интерфейса довольно подробно описаны в даташитах, я тезисно напомню только основные моменты:
- используется SPI Mode0
- размер пакетов SPI 4 байта (для некоторых AT89… — 3 байта)
- данные передаются старшим битом вперёд
- сигнал SS (slave select) передаётся через ногу RESET
Аппаратная часть программатора, как обычно, состоит из, собственно, UART-to-I2C/SPI/1W шлюза и USB-to-UART преобразователя:
Джампер выбора питания должен быть установлен в положение +5 Вольт.
Ниже показано главное окно программы:
В самом верху программы располагается строка меню. Через меню можно загрузить или сохранить в файл данные flash- или EEPROM-памяти (в форматах bin, hex или eep), сохранить в файл данные лога (в формате txt) или выбрать чип для работы. Кроме того, через пункт меню Edit->Lock & Fuses… открывается форма для чтения / записи Lock- и Fuse-битов микроконтроллера.
Под строкой меню, слева располагается выпадающий список для выбора com-порта и кнопки для подключения к выбранному порту или отключения от него (при подключении к ПК наш программатор будет определяться в системе как виртуальный com-порт).
Чуть правее располагается кнопка Autosearch Chip, при нажатии на которую программатор попытается автоматически определить подключенный к нему чип, прочитав байты сигнатуры. Стоит учесть, что процедура автоматического определения чипа не всегда возможна, поскольку некоторые контроллеры в залоченном состоянии байты сигнатуры не выдают. Для работы с такими контроллерами придётся выбрать их через верхнее меню.
Правее кнопки автоматического определения чипа расположены текстовые поля, содержащие название (Chip name) и байты сигнатуры (ID bytes) выбранного чипа.
Чуть ниже расположен трек-бар Delays value, предназначенный для выбора величины используемых в программе задержек. Дело в том, что нельзя передавать в шлюз новые команды, не дождавшись выполнения старых. Время, необходимое микроконтроллеру на выполнение различных команд и операций программирования (запись / чтение / стирание…), прописано в даташитах. Для обеспечения достаточного времени выполнения операций в программе используются задержки между передачами различных команд. Чаще всего менять значение по-умолчанию не требуется, но в случае возникновения сбоев можно попробовать увеличить величину задержек.
Ещё ниже располагаются основные функциональные кнопки для работы с контроллером, позволяющие читать (Read Program / Read Data), записывать (Write Program / Write Data) или проверять (Verify Program / Verify Data) данные программы или памяти EEPROM (при проверке данные в программе сравниваются с данными в чипе, при обнаружении различий адрес первого несоответствия выводится в лог). Кнопка Read Calibration позволяет прочитать записанные в чипе байты калибровки (результат выводится в лог), а кнопка Chip Erase стереть записанные во flash и EEPROM данные (при этом также происходит сброс Lock-битов).
Обратите внимание, что перед записью программы выполняется команда Chip Erase (так положено по даташиту), которая стирает данные не только во флеш, но и в EEPROM (если не запрограммирован специальный фьюз EESAVE). Так что если вы перезаписываете программу и у вас не запрограммирован фьюз EESAVE, то данные в EEPROM пропадут! Избежать этого можно либо предварительно считав данные EEPROM, а потом перезаписав их заново, либо запрограммировав фьюз-бит EESAVE перед программированием флеш.
В правом верхнем углу окна располагается схема подключения выбранного микроконтроллера к шлюзу. В левой части схемы указано какие выводы шлюза к каким ногам контроллера нужно подключать, а в правой части указаны номера и расположение соответствующих ног. Синим цветом на схеме показаны ноги, которые используются для подачи на микроконтролер тактового сигнала. Дело в том, что при программировании контроллер, помимо всего прочего, должен быть затактирован. Если в качестве тактового сигнала выбран внутренний генератор, то для программирования достаточно просто подключить сигналы шлюза к ножкам контроллера, обозначенным на схеме красным цветом. Если же в качестве тактового сигнала выбран внешний источник, скажем, кварцевый резонатор, то помимо сигналов от шлюза придётся к ножкам контроллера, отмеченным на схеме синим цветом, подключить этот самый кварцевый резонатор.
Переход в режим последовательного программирования осуществляется при низком уровне на ноге RESET. При высоком уровне на ноге RESET контроллер просто запускается в нормальном режиме работы, при этом используемые для программирования выводы могут оказаться запрограммированы как выходы с любым состоянием. Поскольку программатору при программировании приходится периодически переключать состояние ноги RESET, то возникает риск КЗ подключенных сигналов от шлюза. Чтобы избежать этого риска следует все сигналы шлюза (кроме питания и земли) подключать к микроконтроллеру через резисторы 1 кОм (это отражено на схемах подключения).
Работа с фьюзами и lock-битами происходит через отдельную форму, которую (как уже упоминалось выше) можно вызвать через пункт меню Edit->Lock & Fuses… При этом для всех чипов бит SPIEN будет защищён от изменения, поскольку переключив его в незапрограммированное состояние, мы потеряем возможность программировать чип через последовательный интерфейс.
Вот в общем-то и всё. Ниже выкладываю программу с исходниками, а также список поддерживаемых этой программой чипов:
Программа | Исходники | Описание (поддерживаемые чипы, изменения в коде и т.д.) | Поддерживаемые ОС |
AVR Serial SPI Programmer v.3.0b | v.3.0b sources | AT90S1200, AT90S2313, AT90S2323, AT90S2333, AT90S2343, AT90S4414, AT90S4433, AT90S4434, AT90S8515, AT90S8535, AT90CAN32, AT90CAN64, AT90CAN128 ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny25, ATtiny26, ATtiny261, ATtiny45, ATtiny461, ATtiny85, ATtiny861 |
Windows XP, Windows Vista, Windows 7, Windows 8 |
AVR Serial SPI Programmer v.3.1f | v.3.1f sources | Update 04.12.2021 + ATmega103, ATmega128, ATmega1280, ATmega1281, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164, ATmega168, ATmega169, ATmega2560, ATmega2561, ATmega32, ATmega323, ATmega324, ATmega48, ATmega603, ATmega64, ATmega640, ATmega644, ATmega8, ATmega8515, ATmega8535, ATmega88 |
-/- |
AVR Serial SPI Programmer v.3.2 Duo | v.3.2 Duo sources | Update 03.06.2022 добавлена возможность работы со шлюзом RH-0010 |
-/- |
P.S. Пока что это бета-версия программы. В неё добавлены только чипы серий AT90 и ATtiny, серию ATmega и, возможно, какие-нибудь другие чипы планируется добавить позже. Работоспособность программы пока проверена только для чипов ATtiny2313. Я конечно протестирую её со всеми чипами AVR, которые смогу найти, но было бы здорово, если бы и другие обладатели шлюзов подключились к этому процессу, протестировали работоспособность программы с другими чипами и отписались в комментариях о результатах. Все обнаруженные в процессе тестирования косяки и глюки можно выкладывать в комменты, на форум или на почту (желательно с логами).
Update 04.12.2021 Выпущена версия программы 3.1f. В эту версию добавлена возможность программирования микроконтроллеров серии ATmega (+25 чипов). Протестировано с чипами ATmega8 и ATmega88.
- Часть 1. USB программатор микросхем EPROM с интерфейсом I2C
- Часть 2. USB программатор микросхем EPROM с интерфейсом SPI
- Часть 3. USB-термометр на DS18B20 с передачей данных по сети
- Часть 4. USB программатор микросхем EPROM DS2430
- Часть 5. USB-программатор микросхем EPROM DS24B33
- Часть 6. Подключение 3-осевого гироскопа/акселерометра MPU6050 к компьютеру
- Часть 7. USB-программатор микросхем EPROM DS2431
- Часть 8. USB-программатор микросхем 1-Wire
- Часть 9. USB программатор SPI-flash серии W25Qxx
- Часть 10. USB программатор для микроконтроллеров AVR (последовательное программирование через SPI)
Здравствуйте. Подскажите ка правильно подключить к программатору UART чип RW1990&
RW1990 — это записываемый 1-Wire ключ, соответственно, подключать нужно контакт GND ключа к контакту COM программатора, а контакт DATA ключа к контакту MOSI/1W/DATA программатора.
В последней версии программы для работы с 1-Wire есть специальная кнопка, при нажатии на которую открывается схема подключения выбранного чипа (скачать можно здесь: https://radiohlam.ru/prog_usb_1-wire/)