Flash Arduino Due через UART

Я хотел бы написать код на языке Arduino, скомпилировать его в Arduino IDE, захватить полученный двоичный код и прошить его на Due через контакты TX / RX UART, минуя как порт программирования USB, так и чип Atmel16U2. Перед прошивкой UART я вручную переключаю контакты стирания и сброса на Due, чтобы инициировать жесткий сброс чипа SAM3X, и SAM-BA теперь ждет кода. Я хотел бы знать: могу ли я напрямую захватить двоичный код, скомпилированный Arduino IDE, и передать его SAM3X через UART или есть дополнительный код, запеченный в этот двоичный файл компилятором Arduino, который приведет к сбою этого метода?

, 👍4

Обсуждение

Скомпилированный код никогда не заботится о том, как вы его загружаете., @Ignacio Vazquez-Abrams

Мои мысли были о том, что может существовать дополнительный код, предназначенный для метода Atmel16U2 и программирования порта flash, который в этой ситуации пришлось бы удалить., @fillybrese

Нет, просто используйте avrdude, чтобы загрузить его, и все готово ;), @frarugi87

Но вы также можете загрузить его из IDE с помощью собственного последовательного интерфейса; вы не обязаны использовать 16u2, @frarugi87


1 ответ


1

Все зависит от обстоятельств

Возможно, это был не тот ответ, который был задан изначально, но теперь он выглядит так: это зависит от того, какая редакция Due у вас есть.

Схемы V03 на сайте показывают часть 74LVC1G125DCK, обозначенную IC10, которая используется для преобразования сигнала 5V TXD от ATmega16U2 (используется в качестве последовательного приемопередатчика) в логику 3.3V, необходимую для ATSAM3X8. Как показано на рисунке, линия TXD подключена к входу преобразователя буфера / уровня, но она также подключена к его линии active-low output-enable. По сути, они используют его не только для преобразования логических уровней, но и для преобразования сигнала в своего рода сигнал открытого коллектора. Глядя на таблицу данных ATSAM3X8, видно, что да, в выводе, принимающем сигнал, есть внутреннее подтягивание.

Если ваш Due имеет такую конструкцию, то да, вы можете запрограммировать чип, подключив последовательный адаптер USB-> logic-level к контактам D0 и D1 (USART) и запрограммировав его по протоколу SAM-BA. Вы должны убедиться, что не отправляете данные по бортовому последовательному приемопередатчику во время этого процесса, чтобы он не подключал их к вашему адаптеру. ATmega16U2 имеет код, который управляет выводом стирания ATSAM3X8, а также выводом сброса по запросу ПК через последовательный USB DTR и RTS. Поскольку сигнал стирания не направляется за пределы платы (на ее заголовки), вам нужно будет использовать кнопку стирания, запретив некоторые изменения платы.

Однако не все должные имеют такую конструкцию. Некоторые платы DUE имеют выход-enable 74LVC1G125DCK hard-wired active, а не подключенный к приемопередатчику TXD; поэтому в этих конструкциях он не ведет себя как открытый коллектор, и последовательный приемопередатчик ATmega16U2 активно управляет линией в режиме ожидания. Это разрушает возможность программирования платы через UART через контакты D0 и D1. Однако это делает более чистые восходящие края. Без модификации платы, нет, вы не можете сделать это с такой конструкцией.

Идентификация

Насколько я могу судить, независимо от того, является ли ваше соединение ATmega16U2-> ATSAM3X8 открытым коллектором / UART-programming-friendly, следует расположение буферной части. Чип представляет собой пакет SC70, небольшую 5-контактную штуковину, которая немного похожа на SOT23-5. Если он находится вне самого ATmega16U2, то, насколько я могу судить, у вас есть конфигурация с открытым коллектором. Если он расположен рядом с D0, между D0 и заголовком "СВЯЗЬ", то у вас есть тот, который управляет-high.

Если у вас есть область видимости, вы можете поместить ее на D0 и наблюдать за краями, генерируемыми при отправке трафика с ПК по ATmega16U2 с более высокой скоростью передачи данных. Вы либо увидите характерные восходящие края открытого коллектора, либо нет, и это ответит на вопрос.

,