В первой части статьи я предоставил схему, прошивку программатора, софт и кратко описал принцип их работы. На тот момент программатор имел не очень впечатляющий функционал и перечень программируемых устройств, возможно поэтому, не вызвал особого интереса. Но проект ещё развивается и я стараюсь добавлять новый функционал, исправлять ошибки, вносить улучшения. Все изменения вносятся исключительно программным путём и добавлением новых съёмных переходников. В этой части статьи я опишу, поддержку каких новых микросхем я добавил, как с ними работать и как их подключать к программатору. В текущей версии софта добавлена поддержка SPI Flash 25-й серии и микроконтроллеров AVR в режиме высоковольтного программирования.
Начну, пожалуй, с более сложного - AVR. Все, кто работал с этими микроконтроллерами, наверняка знают, что такое Fuse биты, и что бывает, если их запрограммировать неверно - можно получить практически окирпиченную микросхему, которая в лучшем случае перестанет программироваться обычным ISP-программатором. Для исправления данной проблемы (и не только) у микроконтроллеров AVR существует ещё один режим программирования - высоковольтный (HVP - параллельный и последовательный). В одной из статей в сети автор называл HVP - режимом Бога. В этом режиме можно практически всё: читать/стирать любые Fuse биты, читать/писать калибровку RC-генератора, читать/писать/стирать Flash,EEPROM независимо от установленных Fuse битов.
Протокол параллельного программирования у AVR стандартизированн практически для всех моделей AVR8, но есть исключения. Например: основная масса микроконтроллёров имеет восьмибитную шину данных и девять управляющих сигналов. У микроконтроллеров Attiny2313 и подобным в 20-выводном корпусе несколько управляющих сигналов объединены (XA1 и BS2, BS1 и PAGEL). Микроконтроллер Atmega2560 и другие с 256Кб памяти имеют трёхбитную адресацию Flash, в отличие от двухбитной в остальных моделях. Микроконтроллеры Attiny в восьминогих, шестнадцатиногих корпусах вообще программируются по последовательному высоковольтному протоколу. Всё это разнообразие я попытался учесть при разработке ПО и микропрограммы программатора. И, естественно, опробовал на нескольких моделях микроконтроллеров.
Интерфейс ПО претерпел небольшие изменения. Для работы с новыми устройствами были добавлены новые вкладки:
В случае работы с AVR - одноимённая вкладка. Как видите, на этой вкладке есть своё окошко выбора модели AVR, кнопки работы с памятью, окна просмотра данных Flash и EEPROM, отдельные кнопки для загрузки прошивки и EEPROM. При этом все кнопки в правой боковой части окна также активны, и их нежелательно нажимать во время работы с AVR. Возможно, позже перенесу их на первую вкладку, чтобы не мозолили глаза.
Для начала работы необходимо нажать кнопку "Connect", если драйвера установлены правильно и программатор подключен, то кнопка станет зелёной и на ней появиться надпись "Disconnect". Затем необходимо один, два раза нажать на кнопку "Test H/W", пока в окошке "Console" не появится надпись "Программатор подключен". Теперь можно работать со всеми функциями. Для начала надо выбрать модель микроконтроллера в окошке "Device", иначе все кнопки, кроме загрузки файлов для записи, будут неактивны. После выбора модели МК окошки"Fuse bits" заполнятся дефолтными значениями для данной модели МК, а в окошке "Chip ID" появится сигнатура чипа. Далее можно читать/писать/стирать Flash, EEPROM и Fuse биты. Но для начала, можно проверить, правильно ли подключена микросхема и жива ли она вообще? Для этого можно считать его сигнатуру кнопкой "Chip ID", после чего вы получите соответствующее сообщение.
Хотя микроконтроллеры AVR работают при напряжении до 5 Вольт, я советую их программировать на 3,3 Вольтах, так как при высоковольтном программировании они могут нагреваться при операциях чтения/записи Flash (у меня грелась Atmega8 и Attiny в восьминогих корпусах). А на пониженном напряжении питания нагрев незначительный, а функциональность не изменяется. Для этого необходимо переставить джампер S1 ("Switch V_Prog") на плате программатора в положение 3v3.
Все микроконтроллеры AVR подключаются к основному 32-пиновому разъёму программатора. Схемы подключения разных видов МК на представленном ниже изображении:
Все сигнальные линии микроконтроллеров можно найти в Datasheet на соответствующую модель в разделе "Memory programming". Как видно из схемы, микроконтроллеры Atmega/Attiny с полным набором сигналов управления подключены к питанию (VCC) напрямую, а остальные - через ключ на pnp транзисторе. Этот ключ используется для предотвращения нагрева МК во время простоя, а также для правильного алгоритма входа в режим программирования. Но, думаю, без него тоже должно работать (я не пробовал). Мои платы переходников для некоторых МК в DIP корпусах в формате SprintLayout будут в папке с программой. Там же будет и данная схема.
Список моделей AVR изначально в программе небольшой. Но его можно увеличивать самостоятельно. Для этого в корневом каталоге с программатором есть папка "Devices". В ней находятся xml файлы с соответствующими названиями. Открываем файл с названием "AVR.xml" с помощью обычного блокнота и видим там список однотипных структур:
<name model="attiny85"> <page_size>32</page_size> <page_count>128</page_count> <ee_size>512</ee_size> <ee_psize>4</ee_psize> <dev_type>3</dev_type> <l_fuse>63</l_fuse> <h_fuse>DF</h_fuse> <e_fuse>FF</e_fuse> <l_bits>FF</l_bits> <id>1E930B</id> </name> <name model="atmega128"> <page_size>128</page_size> <page_count>512</page_count> <ee_size>4096</ee_size> <ee_psize>8</ee_psize> <dev_type>0</dev_type> <l_fuse>C1</l_fuse> <h_fuse>99</h_fuse> <e_fuse>FD</e_fuse> <l_bits>FF</l_bits> <id>1E9702</id> </name>
Так вот, для добавления новой модели - копируете любую из структур от тега <name> до тега </name> включительно и вставляете в документ в любом месте между структурами либо в начале или конце. От этого будет зависеть только очерёдность отображения списка в программе. Далее редактируете структуру. Для этого необходимо скачать datasheet на соответствующую модель МК. В первом теге (name) просто вводите название модели AVR (произвольно). Теги "page_size", "page_count" соответственно размер страницы (в словах 2 байта) и количество страниц flash соответственно. Теги "ee_size" и "ee_psize" размер EEPROM в байтах и размер страницы EEPROM, тег "id' это три байта сигнатуры модели МК - все эти данные можно узнать из datasheet в разделе "Memory programming". Тег "dev_type" - это тип устройства: 0 - МК с полным набором управляющих сигналов (это большинство моделей в корпусах от 28 pin), 1 - МК с объединёнными сигналами управления (такие как attiny2313), 2 - МК с Flash 256Кб (Atmega256X), 3 - МК с интерфейсом последовательного высоковольтного программирования (Attiny13/25/45/85/44/84 и др). Дефолтные Fuse биты в шестнадцатиричном формате ("l_fuse","h_fuse","e_fuse") можно найти в любом онлайн калькуляторе фьюзов AVR (например, avr fuse calculator). Тег "l_bits" - это lock биты - всегда "FF", то есть не запрограммированы (кстати, чтобы сбросить lock биты, нужно стереть МК, простой записью они не сбрасываются - защита от копирования прошивки, всё-таки!). Всё, после добавления такой структуры, сохранения файла и перезагрузки программы, вы увидите в списке новую модель (модели) МК AVR. К сожалению протестировать все модели я не могу, так как их очень много, но большинство распространённых моделей должны работать.
Из имеющихся у меня камней я протестировал Atmega8, Atmega16, Atmega32, Attiny2313, Attiny13a, Attiny45. На них же есть схемы переходников. Позже проверю работу с Atmega128a и Atmega2560 (просто на них я не делал переходники, подключу на проводах и отпишусь в комментариях).
Об AVR - всё. Теперь опишу, как работать со SPI Flash 25-й серии. Для данных микросхем памяти также есть соответствующая отдельная вкладка в программе:
Работа со Spi Flash в данной вкладке аналогична таковой во вкладке AVR. Поясню лишь, что означают окошки Sreg1 и Sreg2. У Spi Flash 25-й серии есть два Status-регистра, в которых есть флаги состояний и биты защиты. В некоторых б/у микросхемах, особенно выпаянных из материнских плат, могут быть установлены биты защиты от записи верхних блоков памяти (например для предотвращения порчи bootloader). Такие флешки будут читаться правильно, а при записи или стирании верхние блоки памяти изменяться не будут. Чтобы снять такую защиту необходимо записать нули в регистры Sreg (чаще - в Sreg2). Для этого можно написать по два нуля в соответствующие окошки и нажать кнопку "Write SR". Биты будут сброшены. После этого для корректной работы надо отключить питание от флешки и снова включить. Если флешку планируется вернуть после записи, например, в материнскую плату, то надо будет установить биты защиты обратно. Для этого их надо предварительно прочитать и запомнить (или записать на листик), затем стереть биты защиты, стереть/записать флешку и записать биты защиты обратно кнопкой "Write SR".
Также следует пояснить логику работы кнопки "Compare". Эта кнопка сравнивает содержимое прочитанной памяти флешки и файл, загруженный для записи. Поэтому кнопка "Compare" будет активна при условии, что был загружен файл для записи и была прочитана память флешки. В любом случае, в окошке "Console" появиться соответствующее сообщение.
Spi Flash подключаются к восьми-контактному разъёму на плате программатора (XS4 на схеме). Схема подключения следующая:
SPI Flash XS4
CS -> CS
DI -> MOSI
DO -> MISO
CLK -> SCK
WP -> VCC
HOLD -> VCC
Положение джамперов на плате программатора не имеет никакого значения, так как на этот разъём напрямую выведены сигналы SPI2 от STM32 и его питание в 3.3 Вольта.
В случае со Spi Flash также возможно добавление новых моделей. Аналогичный AVR xml-файл под названием "25XXX.xml" хранится также в папке "Devices" и имеет сходную структуру:
<name model="W25Q80"> <page_size>256</page_size> <page_count>4096</page_count> <f_size>1048576</f_size> <id>EF4014</id> </name>
В данном случае, тег "page_size" это размер страницы памяти Spi Flash в байтах (чаще всего 256 байт), "f_size" - объём памяти всей флешки в байтах, "id" - три байта сигнатуры чипа (первый байт - код производителя, второй - модель, третий - объём памяти), "page_count" - количество страниц памяти (можно получить делением объёма флешки на размер страницы в байтах). Все данные можно найти в datasheet на соответствующую модель чипа. ID - можно прочитать программатором и затем вписать в xml файл, работоспособность от этого не изменится.
В случае со Spi Flash микросхемами скорость чтения/записи не слишком большая. Флешка на 1 Мегабайт (например W25Q80) читается приблизительно 1-1,5 минуты. А если флешка на 8Мегабайт - можете смело пойти попить чаю, это минут на десять. Но запись обычно проходит без сбоев. Проверял, когда записывал звуковые файлы и картинки. Кстати, программатор позволяет записать практически любой файл соответствующего размера в виде "сырых данных". Кроме hex-файлов, они предварительно конвертируются в массив байт.
Кроме AVR и Spi Flash программатор также поддерживает работу с параллельными Flash и EEPROM, I2C EEPROM, восьмибитными SRAM (смотрите первую часть статьи).
Общие советы по использованию программатора:
- При подключении программатора необходимо использовать хороший USB кабель, желательно от старых переносных USB-винчестеров. Потому что питается программатор от USB шины, а в схеме присутствуют электромагнитные реле и преобразователь напряжения, которые могут потреблять достаточно много. Ток потребления я не измерял, но при работе питания от USB порта моего ноутбука вполне хватает, при условии использования хорошего кабеля. При использовании тонкого кабеля, если срабатывало реле, микроконтроллер мог зависнуть.
- При длительных операциях чтения/записи нельзя нажимать никакие кнопки, иначе собьётся цикл чтения или записи и программатор ("железная часть") просто зависнет в ожидании правильного USB пакета. Пока что я еще не реализовал "защиту от дурака". Но у меня уже есть идеи по этому поводу.
PS: проект пока ещё развивается. Память STM32 заполнена приблизительно только на 1/5, поэтому я буду стараться добавлять поддержку новых устройств. В ближайших планах добавить поддержку параллельной Flash с 16-битной шиной данных (mx29lv320), FWH (Pm49FL004) микросхемы bios материнских плат, microwire eeprom. И всё, что будет попадать мне в руки.
Если кто-то решиться собрать данный программатор, все вопросы пишите в комментариях. Предлагайте новые модели микросхем, которые есть у Вас, возможно кто-то поможет мне в тестировании программатора. Постараюсь ответить всем.
Прикрепленные файлы:
- ParallelProg_v12.zip (621 Кб)
Комментарии (9) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
[Автор]
[Автор]
[Автор]