LINUX.ORG.RU

Linux + UART

 , , ,


0

1

Мой линукс (Debian Unstable, linux-3.11) отказывается работать с последовательным портом, по которому комп должен общаться с микроконтроллером на отладочной плате через UART. После заливания фирмвари в мк, которая врубает uart и начинает периодическую передачу данных, ОСь начинает странно работать с устройством: во-первых, на /dev/ttyACM0 никаких данных не появляется; во-вторых, невозможно подключить устройство к виртуалке на винде, можно только отрубить мк от отладочной платы, подключить пустую плату к винде, а потом уже врубать микроконтроллер. На виртуалке с виндой все работает, данные с порта приходят. На линуксе же после заливки прошивки и переподключения устройства к компу mspdebug в зависимости от фазы луны то видит, то не видит его. Еще после рандомного шаманства с rmmod cdc_acm && modprobe cdc_acm иногда даже появляются данные по cat /dev/ttyACM0. Читал о каком-то баге с uart в старых версиях ядра, но его вроде давно пофиксили. Собственно прошу помочь в решении этой проблемы.

Выхлоп dmesg после подключения платы с включенным uart:

[152429.218445] usb 2-1.1: new full-speed USB device number 49 using ehci-pci
[152429.333581] usb 2-1.1: New USB device found, idVendor=0451, idProduct=f432
[152429.333586] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[152429.333588] usb 2-1.1: Product: Texas Instruments MSP-FET430UIF
[152429.333591] usb 2-1.1: Manufacturer: Texas Instruments
[152429.333592] usb 2-1.1: SerialNumber: E4FF4695F7143117
[152429.339355] cdc_acm 2-1.1:1.0: This device cannot do calls on its own. It is not a modem.
[152429.339360] cdc_acm 2-1.1:1.0: No union descriptor, testing for castrated device
[152429.339392] cdc_acm 2-1.1:1.0: ttyACM0: USB ACM device
[152439.392800] hid-generic 0003:0451:F432.003D: usb_submit_urb(ctrl) failed: -1
[152439.392816] hid-generic 0003:0451:F432.003D: timeout initializing reports
[152439.393013] hid-generic 0003:0451:F432.003D: hiddev0,hidraw2: USB HID v1.01 Device [Texas Instruments Texas Instruments MSP-FET430UIF] on usb-0000:00:1d.0-1.1/input1

Замкни RxD на TxD и проверь в терминале.

RVictor ()

я и винде с UART плесал, так что сказок, что это только в линуксе - не надо

res2500 ()
Ответ на: комментарий от RVictor

Пробовал, никакой реакции. Проблема не в микроконтроллере и отладочной плате.

obolon_svitle ()
Ответ на: комментарий от res2500

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

obolon_svitle ()

между UART контроллера и RS-232 компа конвертор уровней ставил?

dr_Ohm ()

Что за плата? usb-uart и отладчик случаем не в одной микросхеме?

nand ()
Ответ на: комментарий от obolon_svitle

И не в линуксе. У меня USBASP на винде пошел, а в линуксе ошибками только сыпал, пока стабилитроны не впаял. Возьми фт232рл и не мучайся. Там и уровни для TTL и вообще

minakov ★★★★★ ()
Ответ на: комментарий от minakov

У него скорее всего конвертор уровней и отладчик в одной микросхеме. Не хватает какого-нибудь правила для udev и все. Ваше предложение слишком радикально.

nand ()
Ответ на: комментарий от obolon_svitle

какая микруха uart-usb? если подпаяться можешь, посади ftdi'ку на uart отладочный, потом корми minicom`у/screen`у или чему-нибудь ещё. Вообще полистай форумы TI,там вероятно есть решение в сторону - добавить чтото в конфиг udev

dr_Ohm ()
Ответ на: комментарий от dr_Ohm

для stlink добавлял правила в udev, чтоб программатор правильно определялся

dr_Ohm ()
Ответ на: комментарий от obolon_svitle

Правило для udev добавляли? Проверьте отпускает ли отладчик ресет после программирования, любым внешним действием после инита, светодиодом там поморгайте. Плюс проверьте так uart: замкните rx на tx, шлите определенный байт при приеме на мк именно его - внешний сигнал, тот же светодиод. Если есть перемычки на выводы отладчика - пробуйте снимать их.

nand ()
Ответ на: комментарий от minakov

Чисто для конвертирования фт232 дороговата. Использую только в платах где нужен иногда битбэнг, инвертирование некоторых сигнальных линий и питание до 50мА 3.3В прям с нее.

nand ()
Ответ на: комментарий от nand

мк нормально работает после программирования, с перемычками уже игрался. Поискал правила для udev и ничего полезного не нашел кроме гневных отзывов по поводу реализации usb-uart + HID интерфейса на одном порту в этой плате.

obolon_svitle ()
Ответ на: комментарий от obolon_svitle

мож надо HID завалить перед тем как?

Вообще по-подробнее опиши проблему. Если у тебя в виртуалке в винде всё ок, не работает только в линуксе - то проблемы только в линуксе, мк, уровни и прочее ни при чём.

aiqu6Ait ★★ ()
Ответ на: комментарий от obolon_svitle

Плата - MSP-EXP430

Какая именно? Полное название нужно. Если это launchpad, то там бага в платах первой ревизии была rxd и txd накрест соединять приходилось вместо джамперов

nand ()
Ответ на: комментарий от nand

У меня launchpad, плата последней ревизии, т.е. этого бага нет. Проблема не в плате, а в линуксе. Вот в винде, например, при подключении платы появляются два устройства: COM порт (который отвечает за UART) и HID-устройство (которое отвечает за прошивку и отладку). В линуксе же появляется только ttyACM0, которое, похоже, отвечает за обе функции (этим можно объяснить, почему после долгих танцев с бубном каким-то неведомым образом начинают появляться данные по cat /dev/ttyACM0), но некорректно работает.

obolon_svitle ()
Ответ на: комментарий от obolon_svitle

udev правило отсюда попробуйте. Делал около года назад на работе макет на launchpad и uart работал, точно помню, что правило прописывал в udev.

nand ()
Ответ на: комментарий от obolon_svitle

данные по cat /dev/ttyACM0)

Вы так данные ловите?

nand ()

во-вторых, невозможно подключить устройство к виртуалке на винде, можно только отрубить мк от отладочной платы, подключить пустую плату к винде, а потом уже врубать микроконтроллер.

Если на хосте /dev/ttyACM0 ваш занят, то и не подключите. Может mspdebug не отдал управление/вы не прервали сеанс?

nand ()
Ответ на: комментарий от nand

Уже пробовал. Этот конфиг нужен только для того, чтобы можно было без рута работать с устройством. Нашел на гитхабе IDE-шки Energia информацию, что проблема может быть в драйвере cdc_acm (плохие высказывания в его сторону я много где читал). Так что попробую завтра перекомпилить его. https://github.com/energia/Energia/wiki/Linux-Serial-Communication

obolon_svitle ()
Ответ на: комментарий от obolon_svitle

Поставьте cutecom для начала и им попробуйте открывать /dev/ttyACM0. Про cdc_acm видел инфу, но год назад работал с launchpad на debian и все было ок

nand ()
Ответ на: комментарий от obolon_svitle

Странно, меня обошел этот баг, но все же

It is really, really tricky getting Linux to talk to the Launchpad via the USB interface under Linux. I was able to do it, but it requires executing these steps in exactly the right order.

Step 1: Unplug the USB cable for the Launchpad and reinsert it.

Step 2: Run the command mspdebug rf2500 exit

Step 3: Run the command stty 2400 -F /dev/ttyACM0

If this command executes successfully, you are basically home free. But don’t get excited and mess up the order of the next two steps!

Step 4: Execute the command cat /dev/ttyACM0

На step 3 только скорость поменяйте, отпишите что и как потом. Ну и затем можно cdc_acm ковырять.

nand ()

Выключи Hardware flow control. Потом замкни TxD и RxD, и потести еще раз.

Minoru ★★★ ()
Последнее исправление: Minoru (всего исправлений: 1)

это не собралось на ведре 3.11 и пока лень разбираться почему (но позабавили виндовские символы переноса строк в шелл-скриптах, интересно, авторы вообще пробовали сами собрать тот модуль? =)). здесь в постах много инфы как с помощью танцев с бубном можно заставить работать все как надо. У меня uart таки заработал, но через дурацкие костыли, при этом со стабильностью есть проблемы. В общем, cdc_acm - гогно. Даже появилось желание покопаться в исходниках, разобраться что к чему и, если нужно, переписать кривой драйвер.

Всем большое спасибо.

obolon_svitle ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.