Как программировать микрочипы напрямую через USB

Можно ли программировать микросхемы, такие как Atmega328P Arduino uno, напрямую с вашего компьютера через последовательный порт USB?
Где я могу найти информацию о протоколах/стандартах, чтобы сделать такую вещь?

В частности, я хочу иметь возможность изготовить специальную плату для своих микросхем Attiny85 с разъемом USB. Я бы предпочел не использовать arduino IDE.
Можно ли так запрограммировать этот чип?

, 👍0

Обсуждение

Короткий ответ - нет. Более длинный ответ: возможно, если вы готовы пойти на некоторые компромиссы. USB не является простым протоколом и требует значительного аппаратного и программного обеспечения. Короче говоря, компромисс, скорее всего, будет заключаться в том, что большая часть ресурсов встроенного процессора будет направлена на поддержку USB-порта. В дальнейшем вам, вероятно, придется заниматься программированием встроенного процессора аналогично обновлению или обновлению на месте. Много усилий ради маленькой выгоды., @st2000

Спасибо за полезный комментарий @st2000. Я не уверен, знакомы ли вы с Digispark Attiny85. Последовательные контакты USB подключены напрямую к контактам 2 и 3 UC. Вы знаете, как они этого добились?, @Ruan

Если RS232 можно описать на 4 или 5 листах типа, то USB настолько сложен, что требует отдельной книги. Тем не менее, вы можете просто обойтись только программным обеспечением, если ограничите себя простым периферийным устройством USB. Попробуйте прочитать [это](https://hackaday.com/2013/10/23/serial-usb-for-any-avr-microcontroller/)., @st2000

У adafruit есть attiny с загрузчиком usb https://cdn-learn.adafruit.com/downloads/pdf/introduction-trinket.pdf, @Juraj

@ st2000 Ваш «краткий ответ» должен быть опубликован как ответ. Stack Exchange считает этот вопрос без ответа прямо сейчас, что плохо для этого сайта. Мне нравится ваш «ответ», за исключением того, что это не ответ. Это комментарий, который должен использоваться для того, чтобы ОП разъяснил, чего он/она хочет., @Nick Gammon

https://learn.adafruit.com/introduction-trinket/starting-the-bootloader, @Juraj

Спасибо @NickGammon. Я буду иметь это в виду для следующего. Маженко проделал хорошую работу по освещению этого вопроса., @st2000


2 ответа


Лучший ответ:

2

Можно ли программировать микросхемы, такие как Atmega328P Arduino uno, напрямую с вашего компьютера через последовательный порт USB?

Голый чип? Как правило, нет.

Некоторые микросхемы, в состав которых входит оборудование USB, также могут включать загрузчик DFU в ПЗУ. Если выбранный вами чип имеет это, то да, вы можете - вам просто нужно подключить его и использовать подходящую программу загрузки прошивки DFU, чтобы установить скомпилированный код в чип.

Однако чипы без USB никогда не будут иметь загрузчика USB DFU. В таких случаях ваша обязанность создать (или иным образом получить) подходящий загрузчик, который вы установите в чип.

И Digispark, и Adafruit делают это. Они берут микросхему без USB и устанавливают программное обеспечение, которое пытается (плохо) эмулировать USB через контакты GPIO1.

Для чипов, в которых нет настоящего USB-оборудования, гораздо чаще используется загрузчик на основе UART — просто потому, что это гораздо более легкий и «правильный» способ сделать это.

Если вы хотите использовать прямое USB-соединение для своего устройства, вам следует выбрать микросхему со встроенным USB (серия AVR "U"2, большинство микросхем PIC32, многие микросхемы на базе ARM). ), что позволит вам иметь правильный обмен данными по USB вместо медленного HID и только пользовательских (нестандартных) протоколов3.

Обратите внимание, что ваш выбор загрузчика или способа связи с загрузчиком никоим образом не привязывает вас к использованию Arduino IDE. IDE просто компилирует код, а затем запускает внешнюю программу, которая взаимодействует с загрузчиком (разным загрузчикам нужны разные программы для связи с ними). Как вы компилируете программное обеспечение, зависит от вас. Как вы выполняете программу загрузки загрузчика, зависит от вас.


  1. Лично я считаю, что это ужасная идея, и ее следует НИКОГДА не делать. Хотя я пурист.
  2. Например, ATMega32U4 используется на платах Leonardo и Micro.
  3. VUSB может (едва ли) работать достаточно быстро для USB 1.1. Это означает, что официально поддерживаются только HID-протоколы (клавиатура и мышь), а все остальное нестандартно и для работы с ним требуется специальное поддерживающее программное обеспечение.
,

Итак, вы говорите, что если я действительно хочу создать собственную плату с разъемом USB для программирования, я могу либо добавить преобразователь UART в USB, либо выбрать микросхему со встроенным USB? В противном случае есть вариант медленного программного обеспечения HID ... Если бы я выбрал этот вариант, где я могу найти информацию о программном обеспечении для этого?, @Ruan

Это был бы нормальный путь. Наличие разъема UART на плате встречается чаще, чем вы думаете, даже если у вас есть USB., @Majenko

Я думаю, что все мы думаем, что вы не должны жертвовать производительностью встроенного процессора, всегда поддерживая порт USB (даже когда вы его не используете). В настоящем Arduino и его подделках используется вспомогательный чип (FTDI или второй процессор со встроенным USB-портом). Это стоит всего несколько долларов и позволяет встроенному процессору запускать минимальную программу Arduino для поддержки загрузки новых приложений. (Предполагается, что в кабеле в другом ответе есть чип FTDI.) Кстати, разве я не указал вам на статью HAD с проектом HID? Вот куда вы пойдете, чтобы узнать больше., @st2000


1

Можно ли программировать микросхемы, такие как Atmega328P Arduino uno, напрямую с вашего компьютера через последовательный порт USB?

Сначала поместите загрузчик на чип, затем можно использовать внешний USB/последовательный адаптер для последовательного программирования. Это в основном то, чем является ProMini - загруженный '328P (в форме SMD) с резонатором и усилителем; развязывающие колпачки и небольшой регулятор напряжения - и разъем для подключения FTDI Basic для последовательного программирования. Если вы заметили черный и зеленый цвета рядом с заголовком FTDI, они должны соответствовать цветам проводов на кабелях FTDI, которые изначально использовались до того, как отдельные USB-кабели и модули FTDI стали более популярными.
https://www.sparkfun.com/products/9718

Вместо 6-контактного разъема FTDI вы можете сделать плату адаптера для перехода от FTDI к 5-контактному разъему USB-A, а затем на вашей плате установить USB-B-Mini или USB-B-Micro 5. -контактный разъем для ввода сигналов FTDI 5V, Gnd, DTR, Tx и Rx.

USB не будет подключаться напрямую, но у вас будет преимущество в расстоянии от небольшого USB-разъема, и вы сможете программировать последовательно через USB-порт ПК.

Жаль, что вы не хотите использовать Arduino IDE, существуют поддерживаемые коды ядер, которые можно добавить в IDE для Attiny85 и других подобных микросхем. Затем Attiny85 с загрузчиком можно было последовательно запрограммировать с помощью внешнего USB/последовательного адаптера.

https://github.com/SpenceKonde/ATTinyCore

Универсальный ATtinyCore

Это ядро поддерживает следующие процессоры — практически все процессоры ATtiny, которые имеет смысл использовать с Arduino. Нажмите на название процессора, чтобы получить подробную информацию о детали:

ATtiny2313, 4313

ATtiny24, 44, 84 (с загрузчиком Optiboot или без него)

ATtiny25, 45, 85 (с загрузчиком Optiboot или без него)

ATtiny261, 461, 861 (с загрузчиком Optiboot или без него)

ATTiny87, 167 (с загрузчиком Optiboot или без него)

ATTiny48, 88 (с загрузчиком Optiboot или без него)

ATTiny441, 841 (с загрузчиком Optiboot или без него)

ATTiny1634 (с загрузчиком Optiboot или без него)

ATTiny828 (с загрузчиком Optiboot или без него)

ATtiny43 (без загрузчика)

,

Спасибо за отличный ответ. Я буду использовать Arduino, если это сделает мою жизнь намного проще. С кабелем USB-FTDI вы можете напрямую запрограммировать Attiny с помощью ссылки на github?, @Ruan

Да, просто добавьте ядра в IDE. Вам понадобится программатор, чтобы ввести загрузочный код в чип; После этого можно использовать маршрут FTDI. Программатор подключается к контактам Reset (2), SCK (7), MISO (6) и MOSI (5) для доступа к области загрузочной памяти., @CrossRoads

Я могу просто использовать Arduino в качестве программатора, верно? А программирование чипа автоматически удалит предыдущий загрузчик с чипа, если он есть?, @Ruan

Да, вы можете использовать Arduino в качестве интернет-провайдера или как там это сейчас называется. У меня есть Atmel AVRISP MKii для программиста, поэтому мне не нужно возиться с загрузкой программы в Uno, чтобы использовать его в качестве программатора., @CrossRoads