Можно ли запрограммировать чип AVR (atmega328p) через i2c?

i2c atmega328 spi linux programmer

В настоящее время я использую avrdude и программирую свой чип atmega328p через контакты spi, переводя контакт RESET в низкий уровень (программатор spidev ).

В моем проекте я использую преимущественно i2c, и это единственное место, где используется spi. Мне было интересно, можно ли запрограммировать чип по протоколу i2c и вообще убрать соединения spi?

Мои поиски не увенчались успехом.

, 👍0

Обсуждение

Вы действительно программируете через SPI (общаетесь через SPI с загрузчиком) или программируете через ISP (те же контакты)?, @chrisl

@chrisl Я думал, что использую SPI, но теперь я не уверен, лол. Я использую avrdude (-c linuxspi), чтобы прошить файл .hex через контакты spi и использовать вывод сброса в качестве выбора подчиненного устройства., @php_nub_qq

Если вы не изменили загрузчик через ISP до этого, я думаю, вы использовали ISP, что означает, что вы взаимодействовали с аппаратным обеспечением ISP Atmega328p напрямую, а не с работающим на нем загрузчиком. Хотя я хотел бы спросить, почему вы хотите исключить соединение SPI/ISP? Обычно вы используете это только во время разработки и один раз для программирования на производстве. Вы даже можете запрограммировать контроллер вне вашего проекта и поместить его в целевую схему только после программирования. Таким образом, схема вашего проекта не требует заголовков подключения SPI/ISP., @chrisl

@chrisl Что ж, полагаю, я использую интернет-провайдера. Я хочу иметь возможность прошивать новую прошивку на моем контроллере в любое время, поэтому мне нужны соединения для программирования, было бы неплохо, если бы я мог уменьшить количество соединений, если бы был простой способ, но это кажется слишком много работа., @php_nub_qq


2 ответа


2

Из раздела 27.2(*) технического описания Atmega328xx (выделено мной):

В ATmega88A/88PA/168A/168PA/328/328P поддержка загрузчика обеспечивает настоящий механизм самопрограммирования чтения-записи-записи для загрузки и загрузка программного кода самим MCU. Эта функция позволяет гибкие обновления прикладного программного обеспечения, управляемые MCU с помощью Резидентная программа загрузчика Flash. Программа загрузчика может использовать любой доступный интерфейс данных и связанный с ним протокол для чтения кода и записать (запрограммировать) этот код во флэш-память или прочитать код из память программы. Программный код в разделе Boot Loader имеет возможность записи во всю флэш-память, включая загрузочную Память загрузчика. Таким образом, загрузчик может даже модифицировать себя, и он может также стереть себя из кода, если функция больше не нужна. Размер памяти загрузчика настраивается с помощью фьюзов и Загрузчик имеет два отдельных набора битов блокировки загрузки, которые можно установить независимо. Это дает пользователю уникальную гибкость в выборе различные уровни защиты.

Возможно, вам придется переписать раздел ввода загрузчика, но похоже, что Atmel планировал сделать это выполнимым.

[*] Мой техпаспорт датирован 2018 годом; соответствующий раздел, Раздел 27, называется «Поддержка загрузчика — чтение, запись и самопрограммирование», на случай, если более поздние версии имеют другие номера разделов.

,

2

Да, как отметил Джей Роберт, я не сомневаюсь - это возможно!

Вам нужно всего 3 вещи:

  1. загрузчик, поддерживающий загрузку прошивки через I2C
  2. Программное обеспечение для загрузки, поддерживающее загрузку микропрограммы в загрузчик, указанный в пункте 1.)
  3. физическое подключение системы, в которой запущено программное обеспечение для загрузки, к фактической шине I2C вашего устройства

На самом деле проблема не в физическом интерфейсе — широко доступны интерфейсы USB<>I2C, вы также можете повторно использовать для этого саму Arduino.

Давайте посмотрим на загрузчик.

На самом деле я нашел немецкий сайт, на котором утверждается, что у него есть работающий загрузчик I2C для Atmega8, включая инструмент загрузки (используйте Deepl.com, чтобы перевести его). Он может работать, а может и не работать с другими Atmega как есть.

На github также есть еще один проект.

Если вы погуглите, будет больше. На самом деле я не исследовал ни одну из них.

Но велика вероятность, что любой из них может вам подойти.

,