Project

General

Profile

Работа с отладочными комплектами в Linux

Added by mouse about 11 years ago

Отдельного внимания заслуживает вопрос работы с отладочными комплектами из-под ОС Linux. Для корректной работы загрузчика необходимо прямой доступ к USB-устройству. При подключении отладочного комплекта через FTDI-USB, система подгрузит соответствующий ядерный модуль, который "займёт" оба интерфейса — как UART, так и загрузчика. Просто выгрузив модуль ftdi_sio мы получим работающий загрузчик mc-ploader, но лишимся UART. Это грустно. Работа с UART напрямую через FTD2xx не такая-то простая задача. Готовых средств нет. Для решения данной проблемы был составлен скрипт для корректной подгрузки модуля ftdi_sio, чтобы "занять" только интерфейс UART, оставив нетронутым интерфейс загрузчика. Для этой цели была привлечена питоновская библиотека ftd2xx . С её помощью осуществляется блокировка интерфейса загрузчика и параллельно с этим подгружается модуль ftdi_sio, которому достаётся только интерфейс UART. В приложении архив-копия репозитория mcp-sdk-ftdi .

Для сборки и установки биндингов для питона необходимо выполнить команду:

make ftd2xx

Команда требует root-привилегий. Из-под обычного пользователя будет выполнен sudo.

Для правильной инициализации FTDI-интерфейсов необходимо выполнить команду:

make load

Точно так же, эта команда требует root-привилегий. После успешной загрузки, в системе появится одно ttyUSBx-устройство, отвечающее за интерфейс UART. В свою очередь, для загрузчика останется прямой интерфейс.

В виде бонуса, в архиве имеется скрипт на питоне для эмуляции последовательного терминала на базе библиотеки ftd2xx. Категорически рекомендую использовать системный ttyUSBx.


Replies (31)

RE: Работа с отладочными комплектами в Linux - Added by mouse about 11 years ago

Ещё стоит отметить особенность при работе с LDM-MCp. После загрузки программы в eeprom вроде как и происходит сброс, но плата "подвисает" и где-то через минуту срабатывает watchdog. Для ускорения, достаточно сразу после заливки просто выполнить:

mc-ploader -r

И всё взлетит.

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

Под Linux(Fedora 19) на отладочном комплекте НW1-MCp04 загрузчик через PicoTAP работает. но я не смог получить доступ к UART через PicoTAP.
ftdi_sio автоматически не стартует. для загрузчика он, похоже, не нужен.

Для того чтобы дать права обычному пользователю на запись с помощью загрузчика прописал в файле
/etc/udev/rules.d/96-PicoTAP.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="096c", ATTRS{idProduct}=="1449", \
MODE:="0666", SYMLINK+="ttyUSB0"

где номер вендора и продукта выясняется с помощью команды lsusb:
Bus 001 Device 003: ID 096c:1449

SYMLINK+="ttyUSB0" создает устройство /dev/ttyUSB0, но я не вижу на нем на тестовых UART программах никакого вывода ни в minicom ни в cutecom. Настройки порта 38400,8n1

Что делать? посоветуйте

RE: Работа с отладочными комплектами в Linux - Added by mouse about 11 years ago

SYMLINK+="ttyUSB0" создает устройство /dev/ttyUSB0

это симлинк на что? "readlink -f /dev/ttyUSB0" куда указывает? После modprobe ftdi_sio без udev-правила должно создасться character-устройство. Что в dmesg после modprobe?

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

ftdi_sio у меня автоматически не запускается. ls -al /dev/ttyUSB0 указывает на что-то из ftdi или на /dev/bus/usb/001/003, сейчас не помню точно. поздно вечером посмотрю.
ftdi_sio запускается только после insmod ../kernel/.../ftdi_sio.ko, кроме нее есть usbserial, но она встроена в ядро и скорее всего от нее
в dmesg сразу после обнаружения веб камеры идет PicoTAP c номером вендора и продукта.

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

В udev-правила я полез исключительно из-за MODE:="0666". Без него обычному пользователю не было прав на запись.

Без udev-правила при попытке залить программу на контроллер:

libusb couldn't open USB device /dev/bus/usb/001/003: Permission denied.
libusb requires write access to USB device nodes.
Ошибка сегментирования (core dumped)

RE: Работа с отладочными комплектами в Linux - Added by mouse about 11 years ago

Про HW-MCp не скажу, но на LDM одновременно работа модуля ftdi_sio и прошивальщика возможна только с хаком, описанным вначале.
Если без udev-правила потом просто сделать chmod 666 /dev/ttyUSB0, то работает так же, как с симлинком на /dev/bus/usb/... ? Какие major/minor у этого /dev/bus/usb/...? Отличаются ли они от /dev/ttyUSB0, созданного без правил udev? Я так подозреваю, что libusb кушает raw-устроства тогда, когда ttyUSB0 предоставляет tty-интерфейс посредством модуля ftdi_sio.

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

без правил udev никакого /dev/ttyUSB0 не создается. я делал chmod 666 на /dev/bus/usb/.. Меня major/minor интересовал для /dev/ttyUSB0, но я не догадался посмотреть туда, куда указывает симлинк.

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

хак я пробовал, но он умирал у меня после 10 таймаутов.

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

втыкаю PicoTAP после загрузки

[root@localhost ~]# dmesg
[ 149.084662] usb 1-1.1: new high-speed USB device number 4 using ehci-pci
[ 149.175096] usb 1-1.1: New USB device found, idVendor=096c, idProduct=1449
[ 149.175102] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 149.175105] usb 1-1.1: Product: PicoTAP
[ 149.175108] usb 1-1.1: Manufacturer: GOEPEL electronic GmbH
[ 149.175111] usb 1-1.1: SerialNumber: PicoTAP-0416

[root@localhost ~]# lsusb
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0c45:6480 Microdia Sonix 1.3 MP Laptop Integrated Webcam
Bus 001 Device 004: ID 096c:1449
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

[root@localhost ~]# ls -all /dev/ttyUSB0
ls: невозможно получить доступ к /dev/ttyUSB0: Нет такого файла или каталога

втыкаю контроллер
[root@localhost ~]# modprobe ftdi_sio
[root@localhost ~]# dmesg

[ 650.022115] usbcore: registered new interface driver ftdi_sio
[ 650.022141] usbserial: USB Serial support registered for FTDI USB Serial Device

в рантайме /dev/ttyUSB0 не появляется

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

После рестарта с включенным контроллером /dev/ttyUSB0 появился

[root@localhost ~]# ls -al /dev/ttyUSB0
lrwxrwxrwx. 1 root root 15 окт 16 19:53 /dev/ttyUSB0 -> bus/usb/001/003

[root@localhost ~]# ls al /dev/bus/usb/001/003
crw-rw-rw
. 1 root root 189, 2 окт 16 19:53 /dev/bus/usb/001/003

[root@localhost ~]# readlink -f /dev/ttyUSB0
/dev/bus/usb/001/003

[root@localhost ~]# dmesg

[ 1.112919] usb 2-1: new high-speed USB device number 2 using ehci-pci
[ 1.118176] [drm] ring test on 0 succeeded in 1 usecs
[ 1.118234] [drm] ring test on 3 succeeded in 1 usecs
[ 1.227179] usb 2-1: New USB device found, idVendor=8087, idProduct=0020
[ 1.227185] usb 2-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 1.227460] hub 2-1:1.0: USB hub found
[ 1.227551] hub 2-1:1.0: 8 ports detected
[ 1.302913] usb 1-1.1: new high-speed USB device number 3 using ehci-pci
[ 1.305302] [drm] ring test on 5 succeeded in 1 usecs
[ 1.305306] [drm] UVD initialized successfully.
[ 1.305451] [drm] ib test on ring 0 succeeded in 0 usecs
[ 1.305476] [drm] ib test on ring 3 succeeded in 0 usecs
[ 1.393109] usb 1-1.1: New USB device found, idVendor=096c, idProduct=1449
[ 1.393113] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1.393115] usb 1-1.1: Product: PicoTAP
[ 1.393117] usb 1-1.1: Manufacturer: GOEPEL electronic GmbH
[ 1.393118] usb 1-1.1: SerialNumber: PicoTAP-0416
[ 1.456783] [drm] ib test on ring 5 succeeded

[root@localhost ~]# lsmod | grep ftdi
ничего не выдает

[@localhost uart0_inv]$ mc-ploader uart0_inv.bin
info: selected device: "PicoTAP A"
info: erasing device: 100%
info: image loading: 100%

[root@localhost ~]# echo 1 >/dev/ttyUSB0
-bash: echo: ошибка записи: Недопустимый аргумент

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

На удаленной машине в Екатеринбурге следующая картина
dmesg:
[ 1.767464] systemd-udevd149: starting version 201
[ 1.773296] usb 1-8: New USB device found, idVendor=096c, idProduct=1449
[ 1.773303] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1.773307] usb 1-8: Product: PicoTAP
[ 1.773310] usb 1-8: Manufacturer: GOEPEL electronic GmbH
[ 1.773313] usb 1-8: SerialNumber: PicoTAP-0402
[ 1.952295] [drm] Initialized drm 1.1.0 20060810
[ 1.953085] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded
[ 1.953399] r8169 0000:02:00.0: irq 42 for MSI/MSI-X
<skip>
[ 10.123090] systemd-udevd311: starting version 201
[ 10.302709] SELinux: initialized (dev hugetlbfs, type hugetlbfs), uses transi
tion SIDs
[ 10.321876] SELinux: initialized (dev tmpfs, type tmpfs), uses transition SID
s
[ 11.191222] EXT4-fs (sda3): re-mounted. Opts: (null)
[ 11.323454] SELinux: initialized (dev configfs, type configfs), uses genfs_co
ntexts
[ 11.837833] usbcore: registered new interface driver pl2303
[ 11.837864] usbserial: USB Serial support registered for pl2303
[ 11.837890] pl2303 5-1:1.0: pl2303 converter detected
[ 11.850183] usb 5-1: pl2303 converter now attached to ttyUSB0

Хм. похоже, что они используют обычный ком порт. через pl2303

[trott@localhost ~]$ ls al /dev/ttyUSB0
crw-rw---
. 1 root dialout 188, 0 Oct 11 18:34 /dev/ttyUSB0

trott@localhost ~]$ lsmod | grep ftdi
нет драйвера ftdi

RE: Работа с отладочными комплектами в Linux - Added by mouse about 11 years ago

судя по dmesg, модуль ftdi_sio ничего не знает про это устройство.
предлагаю сделать:

modprobe ftdi_sio vendor=0x096c product=0x1449

симлинк должен быть точно не на raw-usb устройство

pl2303 — вполне возможно. теперь-то работает?

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

после modprobe ftdi_sio vendor=0x096c product=0x1449

[ 94.203157] ftdi_sio 2-1.1:1.0: FTDI USB Serial Device converter detected
[ 94.203196] usb 2-1.1: Detected FT2232H
[ 94.203198] usb 2-1.1: Number of endpoints 2
[ 94.203200] usb 2-1.1: Endpoint 1 MaxPacketSize 512
[ 94.203201] usb 2-1.1: Endpoint 2 MaxPacketSize 512
[ 94.203203] usb 2-1.1: Setting MaxPacketSize 512
[ 94.204674] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 94.204760] ftdi_sio 2-1.1:1.1: FTDI USB Serial Device converter detected
[ 94.204811] usb 2-1.1: Detected FT2232H
[ 94.204813] usb 2-1.1: Number of endpoints 2
[ 94.204815] usb 2-1.1: Endpoint 1 MaxPacketSize 512
[ 94.204817] usb 2-1.1: Endpoint 2 MaxPacketSize 512
[ 94.204820] usb 2-1.1: Setting MaxPacketSize 512
[ 94.205277] usb 2-1.1: FTDI USB Serial Device converter now attached to ttyUSB1

и minicom -s отвечает
minicom: невозможно открыть /dev/ttyUSB0: Время ожидания соединения истекло
minicom: невозможно открыть /dev/ttyUSB1: Время ожидания соединения истекло

[root@localhost ~]# ls al /dev/ttyUSB*
crw-rw---
. 1 root dialout 188, 0 окт 17 00:04 /dev/ttyUSB0
crw-rw----. 1 root dialout 188, 1 окт 17 00:04 /dev/ttyUSB1

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

это тоже не работает
[root@localhost mcp-sdk-ftdi-master]# make load
/usr/local/src/mcp-sdk-ftdi-master/load-ftdi.sh
Unable to open 'Dual RS232-HS B'.
Unable to lock 'Dual RS232-HS B'.
Interrupted.
make: *** [load] Ошибка 1

RE: Работа с отладочными комплектами в Linux - Added by krufter_multiclet about 11 years ago

На плате HW1 UART выведен отдельно, через PicoTap он не выведен! К UART необходимо подключаться отдельным проводом. Колодка чёрная по виду как COM порт - это и есть UART0!

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

понятно. и если подключаться, то нужно искать ком порт на компьютере или покупать переходник от USB, тот который определится как pl2302. Хм.. а на плате LDM-MCp UART выведен через PicoTap?

RE: Работа с отладочными комплектами в Linux - Added by krufter_multiclet about 11 years ago

Да на плате LDM всё включено в один вывод. На LDM плате всё выведено через FTDI.

RE: Работа с отладочными комплектами в Linux - Added by sprin about 11 years ago

Здравствуйте.

1. Есть ли способ получить данные из памяти МП теми средствами, что идут в отладочном комплекте HW1-MCp04?

2. Какой кабель подойдет для UART0 из списка USB->COM и что ещё потребуется, чтобы заработал UART0? (драйвер?)

RE: Работа с отладочными комплектами в Linux - Added by trott about 11 years ago

самый дешевый кабель выглядит подходящим.
http://key.ru/shop/aksessuary_kabeli_perehodniki/kabeli_perehodniki/usb/kabel_usb_-_com_rs232_18m_umc/#tab_features
http://radiodesign.ru/aa-330/perexodnik-usb-com-bf-810-dlya-analizatora-aa-330m.html

он на чипе PL-2303. Судя по dmesg на удаленной машине в Екатеринбурге используют кабель на таком же чипе.
драйвер в Линуксе должен подгрузится автоматически

RE: Работа с отладочными комплектами в Linux - Added by krufter_multiclet about 11 years ago

sprin wrote:

Здравствуйте.

1. Есть ли способ получить данные из памяти МП теми средствами, что идут в отладочном комплекте HW1-MCp04?

2. Какой кабель подойдет для UART0 из списка USB->COM и что ещё потребуется, чтобы заработал UART0? (драйвер?)

1) Да есть такой способ, но надо найти время и расписать подробно как это сделать
2) Кабель переходник USB-COM можно взять любой, однако всё равно придётся перекрестить RX и TX. Немного позже нарисую картинку.

RE: Работа с отладочными комплектами в Linux - Added by trott almost 11 years ago

Нарисуйте, пожалуйста картинку.
я пробовал 2 варианта

1-1
2-3
3-2
4-4
5-5
6-6
7-7
8-8
9-9

и

1-1
2-3
3-2
4-6
5-5
6-4
7-8
8-7
9-9

Оба варианта не сработали для меня. USB-COM у меня на микросхеме pl2302

RE: Работа с отладочными комплектами в Linux - Added by krufter_multiclet almost 11 years ago

USB-COM сами спаяли или купили? Картинку через часика 2-3 нарисую.

RE: Работа с отладочными комплектами в Linux - Added by trott almost 11 years ago

USB-COM купил. проверил его работу с внешним модемом. на команду at модем ответил ok

RE: Работа с отладочными комплектами в Linux - Added by krufter_multiclet almost 11 years ago

Подключение должно выглядеть вот так. Если не получается что-то принять по uart попробуйте поменять местами 2 и 3 выводы на разъёме COM.

подключение COM

com_connect.jpg (11.4 KB) com_connect.jpg подключение COM

RE: Работа с отладочными комплектами в Linux - Added by sprin almost 11 years ago

trott wrote:

Нарисуйте, пожалуйста картинку.
я пробовал 2 варианта
[...]

и

[...]

Оба варианта не сработали для меня. USB-COM у меня на микросхеме pl2302

Я поменял местами RX-TX. Попробуйте файл из примеров: "HW1-MCp04"->"c"->"uart", там используется UART0 (сначала я попробовал пример где был UART3, но ничего не получилось, думал неправильно перепаял, но тот файл из примеров заработал нормально)

(1-25/31)