Чтение сигнатур устройств микроконтроллеров AVR с помощью программы командной строки avrdude

Сигнатура устройства — это уникальная 3-байтовая сигнатура, которая помогает идентифицировать различные микроконтроллеры по их типам, указанным в конфигурационном файле avrdude.
Сигнатуры устройств микроконтроллеров AVR могут быть очень полезны для многих разработчиков и инженеров. Эти сигнатуры устройств могут быть считаны из устройств с помощью программы командной строки avrdude.

AVRDUDE — AVR Downloader Uploader — это программа для загрузки и выгрузки памяти микроконтроллеров AVR компании Microchip.
AVR микроконтроллеров Microchip. Она может программировать Flash и EEPROM, а также, если это поддерживается протоколом программирования, программировать биты предохранителя и блокировки. AVRDUDE также поддерживает режим прямых инструкций, позволяющий выдавать любую инструкцию программирования микросхеме AVR, независимо от того, реализует ли AVRDUDE данную функцию конкретной микросхемы.

AVRDUDE была первоначально написана в 2003 году Брайаном С. Дином. С 2006 года AVRDUDE поддерживается Йоргом Вуншем при помощи различных авторов.

Последняя версия AVRDUDE всегда доступна здесь: https://github.com/avrdudes/avrdude.

Чтение подписей

Для чтения сигнатур с устройства нам необходимо подключить программатор к микроконтроллеру и указать его в конфигурационном файле avrdude. Я буду использовать плату Raspberry Pi в качестве программатора и считывать сигнатуры через SPI-порт.

Настройка оборудования

Для соединения микроконтроллера AVR с пинами GPIO платы Raspberry Pi нам понадобятся 6 перемычек. Следующую таблицу можно использовать для поиска физических выводов SPI в двух типах микросхем — ATmega328p/ATmega328 и ATtiny88.

Название микроконтроллера VCC GND MOSI MISO SCK СБРОС
ATmega328p/ATmega328 7 8 17 18 19 1
ATtiny88 7 8 17 18 19 1

Выводы ATmega328p

ATtiny88 PinOut

Теперь эти выводы MOSI, MISO, SCK, RESET, VCC и Ground необходимо соединить с GPIO Raspberry Pi. Для поиска контактов SPI0 Raspberry Pi можно воспользоваться следующей таблицей.

Пины SPI Raspberry Pi —

VCC GND SPI0 MOSI SPI0 MISO SPI0 SCLK SPI0 RESET
Физический 2 Физический 4 GPIO 10 (физический 19) GPIO 9 (физический 21) GPIO 11 (физический 23) GPIO 8 (физический 24)

Настройка программного обеспечения

Прежде всего, необходимо установить пакет avrdude на Raspberry Pi. Следующая команда в терминале может установить avrdude.

sudo apt install avrdude
Вход в полноэкранный режим Выйдите из полноэкранного режима

Теперь, чтобы не загромождать среду, мы можем создать каталог рабочего пространства и скопировать и сохранить необходимые файлы. Также необходимо скопировать avrdude.conf из каталога /etc в нашу рабочую область.

mkdir workspace && cd workspace
cp /etc/avrdude.conf ./avrdude.custom.conf
Войдите в полноэкранный режим Выход из полноэкранного режима

Важное замечание: Поскольку я использую Raspberry Pi в качестве программатора, следующая строка необходима, однако если мы хотим программировать его с помощью USB или Arduino в качестве ISP или любого другого программатора, то нижеупомянутая строка абсолютно необязательна.

[Тогда нам нужно добавить новый программатор в avrdude.custom.conf. Для этого откройте его в любом текстовом редакторе и добавьте нижеприведенные строки в конец файла и сохраните его.

programmer
  id = "rpi";
  desc = "Program with Raspberry Pi GPIO";
  type = "linuxgpio";
  connection_type = serial;
  mosi = 10;
  miso = 9;
  sck = 11;
  reset = 8;
;
Войти в полноэкранный режим Выйти из полноэкранного режима

Выполните команду для чтения сигнатуры

Ниже приведен синтаксис команды avrdude для чтения сигнатуры подключенного устройства.

sudo avrdude -C avrdude.custom.conf -p <any_part_number> -c <custom_programmer> -U signature:r:<file_name>:<format>
Войти в полноэкранный режим Выйти из полноэкранного режима
  • Здесь part_number может быть любым, например, m328, m329 и т.д. Avrdude Configuration file может быть использован для указания большего количества номеров деталей или Avrdude Docs тоже очень полезен.
  • Поскольку мы программируем с помощью Raspberry Pi, custom_programmer должен быть идентификатором программиста, который был добавлен в разделе настройки программного обеспечения. Поэтому он должен быть rpi. Для других программаторов, пожалуйста, обратитесь к документации Avrdude.
  • file_name может быть любым именем файла, в котором будет храниться сигнатура чтения, или мы можем использовать «-» для записи вывода в стандартный вывод.
  • Format — это формат вывода команды avrdude или, более конкретно, формат подписи. Возможными значениями формата являются: i, s, r, e, m, a, d, h, o, b.

Пример

После подключения микроконтроллера, следуя описанной выше процедуре, я выполнил следующую команду.

sudo avrdude -C avrdude.custom.conf -p m329 -c rpi -U signature:r:-:h
Войти в полноэкранный режим Выйти из полноэкранного режима

В терминале отобразился следующий результат —

Таким образом, видно, что подключенным устройством является микросхема ATmega328, а ее сигнатура 0x19,0x95,0x14.

Следующий шаг

Мы можем продолжить программирование микроконтроллера AVR с помощью avrdude из командной строки и текстового редактора (без Arduino IDE). Для этого обратитесь к блогу этого эксперимента — http://arghyabiswas.com/program-avr-type-microcontroller-by-raspberry-pi-gpio. В этом блоге программирование AVR микроконтроллера с помощью Raspberry Pi GPIO может быть изучено более подробно
более подробно.

Ссылка

  1. Документация Avrdude: https://avrdudes.github.io/avrdude
  2. Avrdude Github: https://github.com/avrdudes/avrdude
  3. ATmega328p PinOut: https://microcontrollerslab.com/atmega328p-microcontroller-pinout-prograamming-features-datasheet/
  4. ATtiny88 PinOut: https://microcontrollerslab.com/attiny88-microcontroller-pinout-programming-datasheet-features-applications/
  5. Raspberry Pi SPI PinOut: https://pinout.xyz/pinout/spi#
  6. Программирование микроконтроллеров типа AVR с помощью GPIO-блога Raspberry Pi: http://arghyabiswas.com/program-avr-type-microcontroller-by-raspberry-pi-gpio

Кредит

Я благодарен г-ну Аргхье Бисвасу, инженеру по загрузочным прошивкам в Intel Technology India Pvt. Ltd. за вдохновение и эту возможность.
Также я хотел бы выразить свою благодарность всем членам команды iAloy.

Оцените статью
Procodings.ru
Добавить комментарий