Как создать шестнадцатеричный файл для прошивки arduino?
Я следовал этому руководству по прошивке моего Arduino R3, чтобы превратить его в "USB-клавиатуру", но в статье не объясняется, как работает hex, это просто само собой разумеющееся. Где я могу узнать о том, как создать свой собственный шестнадцатеричный файл, чтобы я мог узнать, как заставить мой Arduino имитировать любое USB-устройство?
@trusktr, 👍8
Обсуждение4 ответа
Шестнадцатеричный файл - это просто переведенная версия исполняемого файла AVR, который, в свою очередь, является переведенной версией исходного кода AVR.
Существует множество инструментов для превращения (компиляции) исходного кода AVR в исполняемый файл AVR, включая, помимо прочего, Arduino IDE, Ino, AVR-GCC и Atmel Studio. Обратите внимание, что все четыре инструмента будут компилировать код одинаково, поскольку AVR-GCC используется под капотом тремя другими.
avr-g++ -mmcu=atmega328 source.cc -o executable
После компиляции кода вы можете использовать avr-objcopy для извлечения соответствующих разделов из исполняемого файла в шестнадцатеричные файлы для программирования во flash и EEPROM.
avr-objcopy -j .text -j .data -O ihex executable executable.hex
Затем вы можете использовать AVRDUDE для загрузки различных шестнадцатеричных файлов на целевое устройство.
avrdude -c arduino -P /dev/ttyUSB0 -b 19200 -p m328 -U flash:w:executable.hex:i
Обратите внимание, что библиотеки USB в Arduino / Ino и AVR LibC ограничены; вам нужно будет использовать Atmel Studio, если вы хотите получить полные возможности USB.
Существует множество сайтов, которые документируют, как создавать / создавать такие.
Example: http://hunt.net.nz/users/darran/
or https://github.com/harlequin-tech/arduino-usb
GOOGLE: build usb keyboard 16u2
Пожалуйста, обратите внимание, что при попытке выполнить это на Uno R3 DFU обновляет код на 16U2, а не на 328p.
Я бы посоветовал новичкам использовать Леонардо. Где в IDE есть стандартные примеры для использования приложения непосредственно в качестве USB HID. Избегая каких-либо изменений в загрузчике или микросхеме сопроцессора USB to Serial (16u2). Делая это намного проще.
Это возможно, но это довольно сложно (особенно если вы хотите модифицировать как 8u2, так И 16u2. Я бы порекомендовал Самый Маленький(https://www.pjrc.com/teensy/index.html) Недавно я опубликовал вопрос о вопросе, похожем на ваш, и, услышав обо всех подводных камнях, я решил пойти с Крошечным. У I по умолчанию гораздо более богатая поддержка USB / HID (вы можете сразу приступить к своему проекту, а не пытаться модифицировать UNO). Teensys также относительно дешевы - от 18 до 24 долларов.
Для сравнения, UNO стоят 27,18 доллара и отсутствуют в наличии. Справедливости ради, оба варианта, вероятно, используются дешевле. Вероятно, это спорный вопрос, поскольку, похоже, он у вас уже есть. Для получения дополнительной информации см. Мой вопрос (возможность прошивки Arduino UNO r3 с помощью крошечной прошивки для целей эмуляции HID (клавиатуры))
Вам не нужно делать что-то волшебное. Вот как вы можете использовать филиалы Arduino IDE.
Как только вы скомпилируете или загрузите скетч, файл .hex автоматически создается и сохраняется на диске вашего компьютера, на котором установлена ОС (я нашел это в Windows). Вы можете получить к нему доступ, перейдя в каталог, содержащий временные файлы.
Как правило, путь будет примерно таким: C: > Пользователи> Администратор> AppData> Local> Temp
Теперь вы увидите (много) каталогов с именами, похожими на "build"... за ним следует большое число. Один из этих каталогов содержит сгенерированные компилятором файлы кода, который вы ищете. В этом расположении вы можете выполнить поиск (например, с помощью проводника Windows) и определить искомый шестнадцатеричный файл по дате и времени последнего изменения.
Получив свой шестнадцатеричный файл, вы можете загрузить его на ардуино с помощью Atmel FLIP после настройки микроконтроллера вашего Arduino в режим обновления прошивки устройства (DFU). Atmel FLIP, аббревиатура от FLexible In-system Programmer, может быть очень легко использована благодаря минимальному пользовательскому интерфейсу.
Вот как использовать FLIP:
- Перейдите в меню Файл> Загрузить шестнадцатеричный файл... и выберите нужный файл.
- Выберите свой микроконтроллер, выбрав первый значок на панели.
- Выберите свой программный интерфейс из небольшого списка.
Я использовал это с ATxmega, который поддерживает USB, но это не одно и то же для всех.
Основываясь на вашем ответе, вы генерируете шестнадцатеричные файлы только с помощью Arduino IDE, верно? Можете ли вы использовать Arduino IDE, например, для записи кода USB Human Interface Device (HID)?, @trusktr
Все верно, ничего, кроме IDE, не требуется. Предполагая, что ваш HID совместим с Arduino IDE, вы можете. Если для этого требуется дополнение (например, Crumbuino или Teensy), оно все равно будет делать то же самое. Это потому, что он загружает шестнадцатеричный файл таким же образом. Единственное, что делает надстройка, - это определяет пользовательские функции. Вам просто нужно найти шестнадцатеричный файл среди временных файлов. Если HID несовместим, вы можете попробовать написать код в Atmel Studio (только для AVR и ARM) с помощью соответствующего компилятора, который может создать шестнадцатеричный файл., @LIGHThouse
- привязка samd21, изменить базовый адрес с дефолтного
- Создание избыточности прошивки на Arduino Nano
- Установка Micropython на Arduino nano
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Можно ли отключить WiFi на ESP8266?
- Удаленная загрузка кода на плату Arduino через интернет
- Больше не могу прошить ESP8266 (NodeMCU)
- Как постоянно считывать/записывать переменные на Arduino Due (без EEPROM/shield)?
Добро пожаловать в Arduino SE! Вы здесь очень расплывчаты. USB-устройства - это действительно сложная тема, и, скорее всего, вы не сможете создавать свои собственные файлы * для USB *, не обладая некоторыми навыками. Вы можете найти шестнадцатеричные файлы для USB-чипа, чтобы имитировать предварительно скомпилированные другие устройства., @Anonymous Penguin
@AnnonomusPenguin Привет! Я не думаю, что еще существует какой-либо шестнадцатеричный код, имитирующий устройство блокировки данных или IronKey, поэтому я хотел бы попробовать и сделать это. xD Есть какие-нибудь советы, с чего начать?, @trusktr
Я действительно не имею ни малейшего представления: D Я бы сказал, может быть, посмотрите на некоторые шестнадцатеричные файлы с открытым исходным кодом, которые включают USB-накопитель (я видел пару проектов с открытым исходным кодом, по крайней мере, с тридцатью типами USB-устройств для Arduino) и измените его, чтобы он не отображал файлы, пока не появится текст файл с паролем находится в корневом каталоге устройства. IRC был бы хорошим способом получить помощь в этом. Чтобы не злить людей, попробуйте * научиться *, как это делать, а не просто копировать и вставлять. Кроме того, если вы это сделаете, обязательно поделитесь своим кодом с другими., @Anonymous Penguin
Само руководство, которому вы следуете, содержит ссылки на архив gzipped tar с исходным кодом и makefile, используемый для создания шестнадцатеричного файла клавиатуры Darran, который вы загрузили: http://hunt.net.nz/users/darran/weblog/b3029/attachments/bd341/arduino-keyboard-0.3.tar.gz, @Chris Stratton