Связь Arduino с ROS через UART
Я пытаюсь запрограммировать Arduino Mega(Crius) с Minnowboard Max A2 через интерфейс UART (Аппаратное управление потоком отключено).
Я могу успешно взаимодействовать с ROS (операционной системой робота) на Ubuntu 12.04, установленной на Minnowboard Max, через порт UART1, доступный на плате Minnow.
Crius UART имеет порт, совместимый с FTDi, с выводом DTR. К сожалению, у MinnowBoard нет вывода DTR для связи с Arduino (только контакты CTS/RTS для 1 из 3 портов UART). Таким образом, я не могу загрузить какой-либо скетч в Arduino через плату для рыбалки через UART. Я всегда должен подключаться к встроенному чипу FTDi-USB crius и загружать скетч.
Есть ли какой-либо обходной путь для загрузки скетча в Arduino через UART с платы для рыбалки ?
@nacbapat, 👍0
Обсуждение1 ответ
Вы можете использовать любой GPIO, который вам нравится, на Minnow, чтобы запустить сброс Mega для запуска загрузчика. Юн делает именно это, чтобы запрограммировать встроенный чип ATmega с помощью сценария, который они выбрали для названия "run-avrdude":
#!/bin/sh
echo 1 > /sys/class/gpio/gpio21/value
avrdude -q -q -c linuxgpio -C /etc/avrdude.conf -p m32u4 -U efuse:r:/tmp/efuse:d
read EFUSE < /tmp/efuse
rm -f /tmp/efuse
if [ "x$EFUSE" = "x203" ] # 203 = 0xCB
then
avrdude -c linuxgpio -C /etc/avrdude.conf -p m32u4 -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m -U efuse:w:0xCB:m -Uflash:w:$1:i $2
else
avrdude -c linuxgpio -C /etc/avrdude.conf -p m32u4 -U lfuse:w:0xFF:m -U hfuse:w:0xD8:m -U efuse:w:0xFB:m -Uflash:w:$1:i $2
fi
echo 0 > /sys/class/gpio/gpio21/value
Вы могли бы сделать что - то подобное, чтобы запустить загрузчик на удаленной плате-подключить любой вывод GPIO к линии сброса вашей платы Mega, а затем выполнить следующие логические действия:
- Установите GPIO для ВЫВОДА
- Установите GPIO на НИЗКИЙ уровень
- Задержите несколько мс
- Установите GPIO для ВВОДА
- Запустите avrdude.
Установив GPIO на ВХОД, вы эмулируете выход с открытым стоком. Если бы вы просто управляли GPIO ВЫСОКО, он удерживал бы контакт СБРОСА ВЫСОКО, и вы не смогли бы использовать интерфейс USB или кнопку СБРОСА. Установив его на вход, он затем эффективно отсоединяется от контакта СБРОСА, поэтому не будет мешать.
У Юна снова есть сценарий, который работает таким образом, "сброс mcu":
#!/bin/sh
echo 18 > /sys/class/gpio/export
echo "high" > /sys/class/gpio/gpio18/direction
echo 1 > /sys/class/gpio/gpio18/value
echo 0 > /sys/class/gpio/gpio18/value
echo 18 > /sys/class/gpio/unexport
У меня есть аналогичная настройка, но с использованием черного Биглебона и контроллера на базе PONTECH Quick240 PIC32. В моем IDE UECIDE я настроил специальное определение платы с добавлением следующего программатора, который выполняет сброс вручную через GPIO и запускает программу загрузки (pic32prog) за одну операцию:
upload.local.name=Local upload
upload.local.using=script
upload.local.script.0=__builtin_bullet::Entering programming mode...
upload.local.script.1=__builtin_gpio::7::low
upload.local.script.2=__builtin_delay::100
upload.local.script.3=__builtin_gpio::20::low
upload.local.script.4=__builtin_delay::100
upload.local.script.5=__builtin_gpio::20::hiz
upload.local.script.6=__builtin_delay::100
upload.local.script.7=__builtin_gpio::7::hiz
upload.local.script.8=__builtin_delay::100
upload.local.script.9=__builtin_bullet::Uploading sketch...
upload.local.script.10=${core.root}/tools/linux_arm/pic32prog::-S::-d::${port}::-B::${upload.maxbaud}::-p::${build.path}/${filename}.hex
upload.local.script.11=__builtin_bullet::Resetting board...
upload.local.script.12=__builtin_delay::100
upload.local.script.13=__builtin_gpio::20::low
upload.local.script.14=__builtin_delay::100
upload.local.script.15=__builtin_gpio::20::hiz
sketch.upload=local
Это немного отличается тем, что вам нужно удерживать второй GPIO на низком уровне, пока вы сбрасываете плату, чтобы запустить загрузчик, поэтому там используются два GPIO.
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
- Аппаратная последовательная библиотека Arduino с поддержкой управления потоком rts/cts
- Программирование ATMEGA2560 с использованием FTDI
- Ошибка при записи загрузчика
- Предварительное формование импедансного согласования для контактов связи UART (TX и RX)
- Двоичный в десятичный с использованием побитовых операторов
- Возможно ли двунаправленное UART-соединение по одному проводу передачи данных?
Вы пробовали вывод RTS? Заголовок FTDI обычно утверждает, что RTS сбрасывает Arduino., @Nick Gammon