Главная » Микроконтроллеры
Призовой фонд
на сентябрь 2021 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 100 руб.
От пользователей

Похожие статьи:


USB программатор параллельных Flash и EEPROM микросхем памяти. Продолжение

В первой части статьи я предоставил схему, прошивку программатора, софт и кратко описал принцип их работы. На тот момент программатор имел не очень впечатляющий функционал и перечень программируемых устройств, возможно поэтому, не вызвал особого интереса. Но проект ещё развивается и я стараюсь добавлять новый функционал, исправлять ошибки, вносить улучшения. Все изменения вносятся исключительно программным путём и добавлением новых съёмных переходников. В этой части статьи я опишу, поддержку каких новых микросхем я добавил, как с ними работать и как их подключать к программатору. В текущей версии софта добавлена поддержка 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. И всё, что будет попадать мне в руки.

Если кто-то решиться собрать данный программатор, все вопросы пишите в комментариях. Предлагайте новые модели микросхем, которые есть у Вас, возможно кто-то поможет мне в тестировании программатора. Постараюсь ответить всем.

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 10.04.2021 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
Evghenii #
Круто. Попробую на днях собрать
Ответить
0

[Автор]
AndrejChoo #
Если соберёте - вот крайняя версия софта.
Прикрепленный файл: Debug.zip
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Discovery V8 Ручной фен 450 Вт с регулировкой температуры
вверх