четверг, 4 ноября 2010 г.

USBASP в Linux

Для программирования микроконтроллеров семейства AVR я использую программатор USBASP (хорошее описание тут: http://easyelectronics.ru/usb-programmator-avr-usbasp.html). Совместно с ним используется утилита AVRDUDE.

О некоторых подводных камнях работы с программатором в Linux я хочу рассказать.

Первое, что нужно проверить, после сборки и программирования программатора (хы) - так это узнать распознается устройстов ядром или нет.
Определить это можно в нескольких местах системы:

Вв-первых, выполнить команду sudo lsusb. Она выведет список подключенных устройств к шине usb. У меня выводит вот что:

Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 002: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 003: ID 08ff:1600 AuthenTec, Inc. AES1600
Bus 005 Device 002: ID 0b05:1751 ASUSTek Computer, Inc.
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 007: ID 16c0:05dc VOTI USBasp AVR Programmer
Bus 002 Device 006: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 005: ID 04f2:b033 Chicony Electronics Co., Ltd
Bus 002 Device 004: ID 058f:6387 Alcor Micro Corp. Transcend JetFlash Flash Drive
Bus 002 Device 002: ID 058f:6254 Alcor Micro Corp. USB Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Цветом я указал нужную строчку в выводе. Если этого нет, то придется начать танцы с бубном.

Примечание. У меня при определении возникли проблемы. Устройство определяется и работает нормально только через USB-хаб. Проверено на двух дешевых китайских хабах. В чем точно причина ткого явления пока не понятно.
В случае возникновения проблем имеет смысл заглянуть в логи системы при подключении и отключении устройства. Смотрим тут:
# tail -f /var/log/messages
# tail -f /var/log/syslog

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

Кроме того, если устройство обнаружилось и модуль ядра для него подгружен, то udev создает файл утсройства внутри /dev. В Ubuntu создается файл непонятно где. Тем не менее, работать с устройством при помощи avrdude можно только от root. Проблема решается созданием правила для udev. В каталоге /etc/udev/rules.d/ создается файл xx-usbasp.rules, где xx - произвольное число от 01 до 99. Я поставил 15.

Содержимое файла /etc/udev/rules.d/15-usbasp.rules:
# UDEV-style hotplug map for usbasp programmer
SUBSYSTEM=="usb", ATTR{product}=="USBasp", ATTR{idProduct}=="05dc", ATTR{idVendor}=="16c0", MODE="666"

После этого любой пользователь можнет работать с USBASP.

Полезные сслыки:
1. http://digitalinvitro.blogspot.com/search/label/Avrdude
2. http://easyelectronics.ru/usb-programmator-avr-usbasp.html
3. http://www.linux.org.ru/forum/linux-hardware/3168599

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

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