Можно ли запрограммировать чип AVR (atmega328p) через i2c?
В настоящее время я использую avrdude
и программирую свой чип atmega328p
через контакты spi
, переводя контакт RESET в низкий уровень (программатор spidev ).
В моем проекте я использую преимущественно i2c
, и это единственное место, где используется spi
. Мне было интересно, можно ли запрограммировать чип по протоколу i2c
и вообще убрать соединения spi
?
Мои поиски не увенчались успехом.
@php_nub_qq, 👍0
Обсуждение2 ответа
Из раздела 27.2(*) технического описания Atmega328xx (выделено мной):
В ATmega88A/88PA/168A/168PA/328/328P поддержка загрузчика обеспечивает настоящий механизм самопрограммирования чтения-записи-записи для загрузки и загрузка программного кода самим MCU. Эта функция позволяет гибкие обновления прикладного программного обеспечения, управляемые MCU с помощью Резидентная программа загрузчика Flash. Программа загрузчика может использовать любой доступный интерфейс данных и связанный с ним протокол для чтения кода и записать (запрограммировать) этот код во флэш-память или прочитать код из память программы. Программный код в разделе Boot Loader имеет возможность записи во всю флэш-память, включая загрузочную Память загрузчика. Таким образом, загрузчик может даже модифицировать себя, и он может также стереть себя из кода, если функция больше не нужна. Размер памяти загрузчика настраивается с помощью фьюзов и Загрузчик имеет два отдельных набора битов блокировки загрузки, которые можно установить независимо. Это дает пользователю уникальную гибкость в выборе различные уровни защиты.
Возможно, вам придется переписать раздел ввода загрузчика, но похоже, что Atmel планировал сделать это выполнимым.
[*] Мой техпаспорт датирован 2018 годом; соответствующий раздел, Раздел 27, называется «Поддержка загрузчика — чтение, запись и самопрограммирование», на случай, если более поздние версии имеют другие номера разделов.
Да, как отметил Джей Роберт, я не сомневаюсь - это возможно!
Вам нужно всего 3 вещи:
- загрузчик, поддерживающий загрузку прошивки через I2C
- Программное обеспечение для загрузки, поддерживающее загрузку микропрограммы в загрузчик, указанный в пункте 1.)
- физическое подключение системы, в которой запущено программное обеспечение для загрузки, к фактической шине I2C вашего устройства
На самом деле проблема не в физическом интерфейсе — широко доступны интерфейсы USB<>I2C, вы также можете повторно использовать для этого саму Arduino.
Давайте посмотрим на загрузчик.
На самом деле я нашел немецкий сайт, на котором утверждается, что у него есть работающий загрузчик I2C для Atmega8, включая инструмент загрузки (используйте Deepl.com, чтобы перевести его). Он может работать, а может и не работать с другими Atmega как есть.
На github также есть еще один проект.
Если вы погуглите, будет больше. На самом деле я не исследовал ни одну из них.
Но велика вероятность, что любой из них может вам подойти.
- Хорошие способы подключения нескольких шин I2C?
- OVF в последовательном мониторе вместо данных
- Путаница между SPI и I2C для SSD1306 OLED
- I2C и SPI одновременно?
- Как подключить MPU9250 к NodeMCU с помощью SPI или I2C Slave?
- Последовательная связь между несколькими устройствами (или ардуино)
- Как обнаружить ошибки I2C с помощью requestFrom()
- ATmega328P-PU: программатор не отвечает
Вы действительно программируете через 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