четверг, 13 апреля 2023 г.

Arduino Nano. Не загружается скетч

Операционная система: Linux Mint 21 Vanessa

IDE: Arduino 2.0.4

Плата: Китайская Arduino Nano

При попытке прошить скетч сообщает, что не может найти устройство

Наслоилось несколько ошибок. Ниже гайд по включению.
  1. В системе установлен пакет brltty, который мешал нормальной работе с tty сh341.
    Выяснилось это по логу в dmesg.

    $ dmesg | grep ch34

    Если последнее сообщение типа

     ch341 1-4.1.3:1.0: device disconnected

    Значит что то пошло не так. При более детальном просмотре dmesg обнаружил, что пакет brltty конфликтует с ch341 за /dev/ttyUSB0.
    Удаляем пакет brltty из системы:

    $ sudo apt remove brltty
  2. У меня получалось запрограммировать Arduino Nano через программатор и я наивно полагал, что программирование через usb это то же самое. Ан нет. Это другой интерфейс.
    Подключаем Arduino Nano к usb и смотрим как она видится в системе:

    $ lsusb
    ...
    Bus 001 Device 015: ID 1a86:7523 QinHeng Electronics CH340 serial converter
    ...

    У меня она подключена к Bus 001, как Device 015. Зависит от того в какой разъем usb воткнута Arduino.
    Важным является ID 1a86:7523
    Нужно разрешить системе работать с этим устройством.
    Для этого создаем файл /etc/udev/rules.d/99-Arduino.rules и прописываем в него такие правила:

    # Arduino Nano rule
    SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666″, GROUP:="dialout"
    
    # Arduino USBASP rule
    SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE:="0666″, GROUP:="dialout"
    

    Чтоб два раза не вставать я добавил второе правило для программатора USBasp.
    Для применения правил нужно дать в терминале команду:

    $ sudo udevadm control --reload-rules
  3. В предыдущем пункте я указал группу dialout.
    Эта группа создана для доступа к последовательным портам. Нужно проверить что вы включены в эту группу.
    Можно просто дать команду:

    $ usermod -aG dialout $USER
  4. Проверяем результат выполения предыдущих пунктов.
    Для этого открываем терминал и вводим команду:

    $ tail -f /var/log/syslog | grep ch34

    Подключаем нашу Arduino к usb. Должно появиться что то вроде этого

    Apr 11 14:00:19 x-270 kernel: [ 2911.934831] ch341 1-4.1.3:1.0: ch341-uart converter detected
    Apr 11 14:00:19 x-270 kernel: [ 2911.936002] usb 1-4.1.3: ch341-uart converter now attached to ttyUSB0

    Отключаем от usb:

    Apr 11 14:00:17 x-270 kernel: [ 2909.300300] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
    Apr 11 14:00:17 x-270 kernel: [ 2909.303921] ch341 1-4.1.3:1.0: device disconnected

    Отлично. Наша Arduino подключается к ttyUSB0

  5. Все. Система настроена. Теперь выбираем в IDE следующие параметры
    Board: Arduino Nano
    Port: /dev/ttyUSB0
    Processor: ATMega328P (Old Bootloader)
    Programmer: - можно выбрать любой. От этого в данном случае ничего не зависит

    Выбираем пункт меню Tools -> Get Board Info
    В окне должны увидеть параметры устройства, которые мы определили в П.2:

После выполнения указанных действий Arduino Nano должна шиться через свой USB разъем.

Все равно ничего не работает.

Если после указанных действий не получается ничего записать в Arduino, то попробуйте следующее.

  1. Если в каталоге /etc/udev/rules.d/ есть другие файлы правил. Возможно они конфликтуют. Попробуйте временно переместить их в другой каталог. Не забудьте дать команду sudo udevadm control --reload-rules

  2. В Arduino стерт загрузчик.
    Его нужно записать с помощью программатора.

Комментариев нет:

Отправить комментарий