ARM7(9)+LINUX+SAM-BA-инструкция

Оригинал по ссылке — http://projects.org.ua/forum/viewtopic.php?t=2053

….выкроил время для исследования вопроса по комбинации:  ARM (7/9) + LINUX + SAM-BA
То есть — программирование семейства контроллеров AT91SAM7Sxxx из под OS Linux

Эта статья идеально дополняет предыдущую мою статью — HOWTO по прошивке ARM7-based AT91SAM7Sxxx -семейства — http://projects.org.ua/forum.phpbb2ru/viewtopic.php?t=1228

Ну вот, я сегодня очередной раз занялся вопросом запуска под Linux нормального, удобного, профессионального программатора.

Так как ранее этот вопрос детально ни кем не был описан (во всяком случае я не нашел, искал) — решил его написать сам.

Связанно это с тем что на форумах разных только и видно вопросы из серии — как программировать AT91SAM7Sxxx под Linux, подскажите, траля-ля и тд и тп…

Начинаю.
Значит, сразу оговорка, есть момент.
Я точно знаю что по USB и RS232 плата моя работает с контроллером AT91SAM7S64, и надеюсь на мысль — что система Линукс должна иметь корректную сборку в плане данного подключения по USB. (об особенности подключения скажу чуть ниже, они есть.)

Второй момент.
Разумеется перед этим я пытался испробовать на практике несколько вариантов программаторов. скажет так не удалось как факт, хотя некоторые были близки к кондидату на звание удачного или профессионального программатора.
Не удачные варианты описывать не буду.
вспоминать тоже. …если будет необходимо — упомяну о них.

Третий момент.
Возможно я не все нашел при поисках, но как оказалось — искать тоже нечего особо…

Итак начинаю описывать:

Для начала нужно скачать с странички
http://www.linux4sam.org/twiki/bin/view/Linux4SAM/SoftwareTools
файлик ftp://ftp.linux4sam.org/devel/tools/sam-ba_cdc_2.8.linux_01.zip

тут нужно заквотить немножко оригинала статьи

Код:
SAM-BA Linux initiative
A revision of SAM-BA is ported to Linux. It is at the side of the official SAM-BA ISP revision.

SAM-BA Linux uses the USB connexion through CDC usbserial driver to communicate with the device.USB CDC Serial driver mount procedure :* Login with administrator rights

* Unload usbserial module if it is already running

rmmod usbserial

* Load usbserial kernel module

modprobe usbserial vendor=0x03eb product=0x6124

* Verify that the USB connection is established

lsusb -d 03eb:6124
Bus 004 Device 006: ID 03eb:6124 Atmel Corp

* Know which USB connection is established

dmesg

kernel: usb 4-2: new full speed USB device using uhci_hcd and address 5
kernel: usb 4-2: configuration #1 chosen from 1 choice
kernel: usbserial_generic 4-2:1.0: generic converter detected
kernel: usbserial_generic: probe of 4-2:1.0 failed with error -5
kernel: usbserial_generic 4-2:1.1: generic converter detected
kernel: usb 4-2: generic converter now attached to ttyUSBx

=> you will have to use /dev/ttyUSBx to connect to your board

Description    Binary
SAM Boot Assistant (SAM-BA 2.8) Linux port initiative using CDC    sam-ba_cdc_2.8.linux_01.zip
SAM Boot Assistant (SAM-BA 2.7) Linux port initiative using CDC    sam-ba_cdc_2.7.linux_01.zip

Это собственно и есть та самая sam-ba ну только скомпиллированная видимо вендором Atmel под Linux , это я так думаю — не знаю точно, даже не интересовался особо… успею.

собственно казалось бы все, да не совсем

я обещал ниже описать нюансы, настало время.

У меня само-сборное ядро (если это важно 2.6.27-rc8) и в нем у меня были включены все USB в ядро нативно. Для корректной работы нужно включить их модулем, так как используется модуль usbserial и этот модуль открывает девайс /dev/ttyUSB0 после загрузки модуля.

Для того что бы /dev/ttyUSB0 появилось нужно корректно загрузить модуль. Загружать модуль нужно обязательно с указанием параметра модуля, вот таким способом:

Код:
veter@debian:~$ sudo modprobe usbserial vendor=0x03eb product=0x6124

открывается /dev/ttyUSB0 с правами 660 по умолчанию, что не совсем корректно для юзерского доступа. Меняем права доступа

Код:
root@debian:~# ll /dev/ttyUSB0
crw-rw—- 1 root dialout 188, 0 Окт  4 21:21 /dev/ttyUSB0

(ну или из под юзера через sudo)
которые потом нужно сменить на права 666 из под рута.

я у себя сделал скрипт

Код:
veter@debian:~$ cat bin/sam-ba—start-dev.sh
#/bin/bash
sudo modprobe usbserial vendor=0x03eb product=0x6124
sudo chmod 666 /dev/ttyUSB0
veter@debian:~$

Ну и теперь можно приступать к запуску программатора для AT91SAM7S64(AT91SAM7S256)

1 — Расспаковываем архив

Код:
-rw-r—r—  1 veter veter  4757985 Окт  4 17:48 sam-ba_cdc_2.8.linux_01.zip

И получаем директорию
sam-ba_cdc_2.8.linux_01/

2 — входим в нее и видим содержимое

Код:
veter@debian:~/_P_R_O_J_E_C_T_S_/SAM-BA Linux initiative /sam-ba_cdc_2.8.linux_01$ ll
итого 2203
drwxr-xr-x  5 veter veter     192 Июл  3 15:45 ./
drwxr-xr-x  4 veter veter     296 Окт  4 19:32 ../
drwxr-xr-x  4 veter veter     104 Июл  3 15:45 applets/
drwxr-xr-x 30 veter veter     952 Июл  3 15:45 lib/
-rw-r—r—  1 veter veter    2907 Июл  3 15:45 README.linux
-rw-r—r—  1 veter veter 2245666 Июл  3 15:45 sam-ba_cdc_2.8.linux_01
drwxr-xr-x  2 veter veter      80 Июл  3 15:45 usr/
veter@debian:~/_P_R_O_J_E_C_T_S_/SAM-BA Linux initiative /sam-ba_cdc_2.8.linux_01$

для файла sam-ba_cdc_2.8.linux_01
нужно присвоить права 755, что и делаю

Код:
-rwxr-xr-x  1 veter veter 2245666 Июл  3 15:45 sam-ba_cdc_2.8.linux_01*

Следуя описанию в руководстве

Код:
veter@debian:~/_P_R_O_J_E_C_T_S_/SAM-BA Linux initiative /sam-ba_cdc_2.8.linux_01$ less README.linux

делаем проверку

Код:
veter@debian:~$ lsusb -d 03eb:6124
Bus 003 Device 036: ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader
veter@debian:~$
Код:
veter@debian:~$ dmesg | tail -n 20
hub 3-0:1.0: unable to enumerate USB device on port 1
usb 3-1: new full speed USB device using uhci_hcd and address 36
usb 3-1: configuration #1 chosen from 1 choice
usbserial_generic 3-1:1.0: Generic device with no bulk out, not allowed.
usbserial_generic: probe of 3-1:1.0 failed with error -5
usbserial_generic 3-1:1.1: generic converter detected
usb 3-1: generic converter now attached to ttyUSB0
usb 3-1: New USB device found, idVendor=03eb, idProduct=6124
usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
usb 3-1: USB disconnect, address 36
generic ttyUSB0: generic converter now disconnected from ttyUSB0
usbserial_generic 3-1:1.1: device disconnected
usb 3-1: new full speed USB device using uhci_hcd and address 37
usb 3-1: configuration #1 chosen from 1 choice
usbserial_generic 3-1:1.0: Generic device with no bulk out, not allowed.
usbserial_generic: probe of 3-1:1.0 failed with error -5
usbserial_generic 3-1:1.1: generic converter detected
usb 3-1: generic converter now attached to ttyUSB0
usb 3-1: New USB device found, idVendor=03eb, idProduct=6124
usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
veter@debian:~$

3 — Вот тереь подключаю плату/устройство по USB и проверяю что устройство присвоело в /dev/ себе файл устройства

Код:
veter@debian:~$ ll /dev/ttyUSB*
crw-rw—- 1 root dialout 188, 0 Окт  4 21:59 /dev/ttyUSB0
veter@debian:~$ sudo chmod 666 /dev/ttyUSB0
veter@debian:~$ ll /dev/ttyUSB*
crw-rw-rw- 1 root dialout 188, 0 Окт  4 21:59 /dev/ttyUSB0
veter@debian:~$

так как без назначенных прав — эта утилита/программатор не увидит попросту само USB устройство, хотя система его увидит

…и вот только теперь все в порядке.

4 — Вот только теперь можно запускать сам программатор:
sam-ba_cdc_2.8.linux_01*

я у себя сделал симлинк с

Код:
ln -s ./sam-ba_cdc_2.8.linux_01 ~/bin/sam-ba

и теперь могу спокойно вызывать этот программтор через алиас как sam-ba.

Запуск программатора и выбор процессора/контроллера

надо заметить что там весьма богатый выбор
свойственный версии 2,8
семейства 7х и 9х армов

перед прошивкой

после прошивки

5 —
для удобства запуска приходится использовать комбинацию в комманодной строке X-терминала
sam-ba—start-dev.sh && sam-ba
это делается по той причине что после того как разъеденяется USB — то выгружается модуль и отключается файл-устройство /dev/ttyUSB0

Если кто автоматизирует вдруг это все как то получше — дайте мне знать — я опишу более совершенный метод.

Да кстати!
тут еще есть много интересного в папке программатора, тоесть в содержимом, догадываете что это? (и «список» тоже)
отож Cool)

Код:
veter@debian:~/_P_R_O_J_E_C_T_S_/SAM-BA Linux initiative /sam-ba_cdc_2.8.linux_01$ ll lib/
итого 6
drwxr-xr-x 30 veter veter  952 Июл  3 15:45 ./
drwxr-xr-x  5 veter veter  232 Окт  6 20:43 ../
drwxr-xr-x  2 veter veter  312 Июл  3 15:45 AT91CAP9-DK/
drwxr-xr-x  2 veter veter  216 Июл  3 15:45 AT91CAP9-STK/
drwxr-xr-x  2 veter veter  224 Июл  3 15:45 AT91SAM7A3-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7L128-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7L64-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7S128-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7S256-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7S321-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7S32-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7S512-EK/
drwxr-xr-x  2 veter veter  136 Июл  3 15:45 AT91SAM7S64-EK/
drwxr-xr-x  2 veter veter  384 Июл  3 15:45 AT91SAM7SE256-EK/
drwxr-xr-x  2 veter veter  376 Июл  3 15:45 AT91SAM7SE32-EK/
drwxr-xr-x  2 veter veter  384 Июл  3 15:45 AT91SAM7SE512-EK/
drwxr-xr-x  2 veter veter  232 Июл  3 15:45 AT91SAM7X128-EK/
drwxr-xr-x  2 veter veter  232 Июл  3 15:45 AT91SAM7X256-EK/
drwxr-xr-x  2 veter veter  232 Июл  3 15:45 AT91SAM7X512-EK/
drwxr-xr-x  2 veter veter  328 Июл  3 15:45 AT91SAM9260-EK/
drwxr-xr-x  2 veter veter  280 Июл  3 15:45 AT91SAM9261-EK/
drwxr-xr-x  2 veter veter  328 Июл  3 15:45 AT91SAM9263-EK/
drwxr-xr-x  2 veter veter  328 Июл  3 15:45 AT91SAM9G20-EK/
drwxr-xr-x  2 veter veter  328 Июл  3 15:45 AT91SAM9RL64-EK/
drwxr-xr-x  2 veter veter  384 Июл  3 15:45 AT91SAM9XE128-EK/
drwxr-xr-x  2 veter veter  384 Июл  3 15:45 AT91SAM9XE256-EK/
drwxr-xr-x  2 veter veter  384 Июл  3 15:45 AT91SAM9XE512-EK/
-rw-r—r—  1 veter veter 3576 Мар 27  2008 boards.tcl
drwxr-xr-x  2 veter veter  112 Июл  3 15:45 common/
drwxr-xr-x  2 veter veter 1008 Июл  3 15:45 devices/
drwxr-xr-x  2 veter veter  200 Июл  3 15:45 NO_BOARD/
veter@debian:~/_P_R_O_J_E_C_T_S_/SAM-BA Linux initiative /sam-ba_cdc_2.8.linux_01$

собственно все!
это вы наблюдали работу родного программатора от Atmel под Linux

Желаю Удачи в повторении !
Я уверен у вас все также гладко пройдет.

Если есть вопросы/пожелания/советы — жду отзывов.

=====================================================

/dev/ttyUSB0 ведет себя корректно!
Когда отключаете USB — файл-устройство исчезает
Когда включаете USB — файл-устройство появляется с правильными правами.

Проверяю

Код:
root@debian:/etc/udev/rules.d# ll /dev/|grep US
crw-rw-rw-  1 root dialout 188,   0 Окт  6 23:23 ttyUSB0

вот какие я делал изменения

Код:
#SUBSYSTEMS==»usb», KERNEL==»ttyUSB*», \
#       ATTRS{product}==»[Hh]andspring*Treo*|[Hh]andspring*Visor*|[Pp]alm*Handheld*», \
#                                               SYMLINK+=»pilot»
SUBSYSTEMS==»usb», KERNEL==»ttyUSB*»,  MODE=»0666″

то есть, вместо строго правила вставил новое правило, строку
SUBSYSTEMS==»usb», KERNEL==»ttyUSB*», MODE=»0666″

=====================================================

вот так работает, с строкой в конфиге udev

Код:
SUBSYSTEMS==»usb», KERNEL==»ttyUSB*», NAME=»%k», MODE=»0666″

проверяю

Код:
root@debian:/etc/udev/rules.d# ll /dev/|grep US
crw-rw-rw-  1 root dialout 188,   0 Окт  6 23:42 ttyUSB0
root@debian:/etc/udev/rules.d#

=====================================================

я чуток помарочался как с самим программатором от Atmel на своем Debian Squeezy/sid — 64bit , также и с свои модулем.
Чтоб не тратить много время — имейте ввиду — что если устройство по USB задетектилось, обязательно оно должно быть видно, например

Цитата:
veter@debian:~/_P_R_O_J_E_C_T_S_/ARM7/ARM7_Projects/ARM7MOD/bin$ lsusb
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Bus 003 Device 066: ID 03eb:6124 Atmel Corp. at91sam SAMBA bootloader
Bus 003 Device 002: ID 0ac8:305b Z-Star Microelectronics Corp. ZC0305 Webcam
….
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

теперь, при сборке ядра — должно быть( для модулей usbserial g_serial g_cdc cdc-acm ) все касающееся USB модулем, иначе модулей как токовых не будет.
для примера, я прицеплю сюда свой рабочий конфиг своего ядра 2.6.33 с корретной сборкой

…беды начались с того что я недавно обновил свой дистриб с Lenny до Squeezy, и обновилось куча всего и задело TCL.

обратите внимание в файлике README.linux

Код:
Note : packages needed : tcl8.4 tclx8.4 tk8.4.

Это важно, потому что на Debian Squeezy/sid — 64bit проявилась какая то глюкавость сборки пакетов TCL на версиях tcl8.5 tclx8.5 tk8.5, по этому 8,5 удаляйте смело. и ставьте 8,3+8,4
что то похожее описано тут — http://www.mail-archive.com/debian-amd64@lists.debian.org/msg24903.html

Теперь, если раньше корректно работали с сайта Atmel`а обе версии 2.8 и 2.9, то теперь работает — только 2.8 !!!
Почему не работает 2.9 я еще не успел разобраться.
Имейте это ввиду как на вооружении.

Да и еще…
Так как сам программатор представляется как CDC_ACM то можно и это использовать
Есть вот такой вот старенький патчик для ядра Linux
at91sam7s_driver-2.6.15.diff

Код:
— linux/drivers/usb/class/cdc-acm.c-orig      2006-06-14 12:28:22.000000000 +0300
+++ linux/drivers/usb/class/cdc-acm.c   2006-06-14 12:29:43.000000000 +0300
@@ -982,6 +982,9 @@
{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
},
+       { USB_DEVICE(0x03EB, 0x6124), /* Atmel AT91SAM7S microcontrollers (SAM-BA) */
+       .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
+       },
/* control interfaces with various AT-command sets */
{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
USB_CDC_ACM_PROTO_AT_V25TER) },

на самом деле для современных ядер он не актуален, но отсюда можно взять вот это

Код:
{ USB_DEVICE(0x03EB, 0x6124), /* Atmel AT91SAM7S microcontrollers (SAM-BA) */
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
},

и вставить этот элемент структуры в место как в патчике…
и скомпилить ядро, по идее кернел автоматом должен распознавать на cdc_acm

я на всякий случай скомпилил — как нить на досуге это буду проверять…

Еще можно в загрузчеке LINUX указывать через парамытры ядра специальный указатель на AT91SAM7S микроконтроллер.

Цитата:
title Ubuntu 9.04, kernel 2.6.28-11-generic custom
uuid f8fd3c5e-f415-444f-b081-2d76f151aaf7
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=f8fd3c5e-f415-444f-b081-2d76f151aaf7 ro splash vga=0x34A usbserial.vendor=0x03eb usbserial.product=0x6124
initrd /boot/initrd.img-2.6.28-11-generic
quiet

Новый программатор — http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.9_cdc_linux.zip

Добавить комментарий