Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: linux & cp210x
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
nik.laus
Доброго времени суток, форумчане!

Есть чип от silabs cp2102. (К нему есть силабовский драйверы, которыми я не пользуюсь, потому что при некоторых обстоятельствах они вешают мне систему...)
Есть открытые драйверы в ядра линукса. cp210x.ko называеться модуль. Находиться в kernel-source/drivers/usb/serial/cp210x.c.

"Устройство" мое - это просто один cp2102 чип на плате и usb шнурочек. На чипе Rx и Tx запаяны между собой.
Тобишь, я в чип/порт/ttyUSB0 записываю что-то и это-же получаю (по идее).

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

Дело в том, что когда я записываю первый раз в порт - я получаю это же значение обратно. Для всех последующих попыток поведение не определено.
Возможные случаи - это вываливаеться полностью буфер, тоесть, я туда буквы "х", а мне обратно содржимое буфера чипа с буквой "х" на конце.
Или же он просто выдает перевод строки...

Функции чтения и записи в чип модуль использует стандартные (из файла generic.c) - это usbserial модуль.
я сделал modprobe usbserial debug=1 и понял, что после того, как я туда записываю символ "а", я его получаю обратно, но ведь потом
я (драйвер) пишет туда '\r' и получает... и так бесконечно, пока есть хоть один процесс, который читает из ttyUSB0.


Вопросы:
Это он только у меня так работает, или еще у когото???

Я понимаю (или думаю, что понимаю) что это где-то глюк в ядра... ведь у меня один чип с закорочеными Рх и Тх...
Может быть, надо чип сначала как-то настроить программой конфигурации последовательных портов, такой как minicom например???

Большое спасибо за время и внимение!
ukpyr
Цитата
Дело в том, что когда я записываю первый раз в порт - я получаю это же значение обратно.
Может замкнуты RX/TX ?
использую преобразователь на этом чипе в программаторе AVR910 (avrdude) и через модуль serial в Питоне - все работает отлично.
MrYuran
Цитата(ukpyr @ Jul 1 2009, 13:55) *
Может замкнуты RX/TX ?


Цитата(nik.laus @ Jul 1 2009, 13:29) *
"Устройство" мое - это просто один cp2102 чип на плате и usb шнурочек. На чипе Rx и Tx запаяны между собой.
nik.laus
Rx и Tx замкнуты.

Просто я ожидаю того, что я туда что-то записал - тоже и считал.
Первый раз так и получаеться, но после (я незнаю где затык, возможно в драйвере),
драйвер сам! записывает '\r' в чип, естественно, его же и получает... и так в каком-то бесконечном цикле...
А я думаю, что правильно было-бы (опять таки... я думаю...) чтобы я туда пакет данных записал, чип мне обратно этот же
пакет. И все. Ждет следующего, а не пишет туда символы возврата каретки...


Спасибо, что быстро ответили!
sasamy
Цитата(nik.laus @ Jul 1 2009, 12:29) *
Есть открытые драйверы в ядра линукса. cp210x.ko называеться модуль. Находиться в kernel-source/drivers/usb/serial/cp210x.c.
"Устройство" мое - это просто один cp2102 чип на плате и usb шнурочек. На чипе Rx и Tx запаяны между собой.
Тобишь, я в чип/порт/ttyUSB0 записываю что-то и это-же получаю (по идее).
Дело в том, что когда я записываю первый раз в порт - я получаю это же значение обратно.


Чем пишите/читаете - какая-то своя программа или стандартные утилиты типа echo/cat ?

Цитата
Я понимаю (или думаю, что понимаю) что это где-то глюк в ядра... ведь у меня один чип с закорочеными Рх и Тх...


Поспешные выводы. Обычно в ванильном ядре драйверы все же работают немнога smile.gif

Цитата
Может быть, надо чип сначала как-то настроить программой конфигурации последовательных портов, такой как minicom например???


Для начала попробуйте настроить raw режим например так
#stty -F /dev/ttyUSB0 raw
потом пробуйте писать/читать. текущее состояние можно посмотреть например так
#stty -F /dev/ttyUSB0 -a
nik.laus
to sasamy:
читаю
Код
cat /dev/ttyUSB0

пишу
Код
cat > /dev/ttyUSB0 << EOF

с помощью echo что-то не получаеться.



патылся настроить чип как Вы советовали... stty -F /dev/ttyUSB0 raw
вот что выдает при stty ... -a

speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

попробовал на 9600, без результата : (

Последовательность моих действий:
Код
tail -f /var/log/kern.log | tee kern.log

в другом окне терминала
Код
cat /dev/ttyUSB0
- открываем и читаем из порта
Код
cat > /dev/ttyUSB0 << EOF
> hello world
> EOF
- записываем в порт (echo и echo -n не работали...)
В окне лога ядра я вижу, что в порт я записал, пижу, что я из него прочитал,
а также я еще вижу, что он туда еще что-то (символ возврата каретки '\r') записывает...
Потом читает.
Потом пустое туда пишет... и еще кучу непонятно чего туда валит, чего я не просил...

прикрепляю лог (kernlog.txt)

Может быть нужно еще какие-то настройки модемные поменять?

Заранее огромнейшее спасибо за внимание и советы.
sasamy
Цитата(nik.laus @ Jul 6 2009, 17:45) *
с помощью echo что-то не получаеться.

патылся настроить чип как Вы советовали... stty -F /dev/ttyUSB0 raw
вот что выдает при stty ... -a

speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

Может быть нужно еще какие-то настройки модемные поменять?


Судя по выхлопу вашего stty -a - это не raw режим и потом что значит не работает echo ?

1 В первом терминале
#stty -F /dev/ttyUSB0 raw -echo
#cat /dev/ttyUSB0

2 Во втором терминале
#echo "hello world" > /dev/ttyUSB0

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

PS если по каким то неизвестным причинам echo все же не работает (хотя с чего бы это smile.gif можно и так как вы раньше делали через cat
nik.laus
to Sasamy:
Заработало! *куча радостного вопля*
Очень очень большое спасибо!

Заработало после того, как установил raw режим и -echo (раньше я echo не отключал, и не думал отключать).
Даже echo, не только cat теперь работает.

Проблема решена! Спасибо!
Еще один вопрос, где мне начать читать про настройки терминалов/модемов и т.д.
Просто работать с stty не умею и надо где-то почерпнуть информацию об этом.
Если подскажите, как эта тема называеться, буду рад.

Огромное спасибо!
sasamy
Цитата(nik.laus @ Jul 7 2009, 11:21) *
Еще один вопрос, где мне начать читать про настройки терминалов/модемов и т.д.
Просто работать с stty не умею и надо где-то почерпнуть информацию об этом.


Я не специалист в этом, по stty как и практически любой команде в linux можно смотереть man
#man stty
короткую подсказку можно и так
#stty --help

Последовательные порты/терминалы такие же древние как и сами ос, так что информации море, правда в основном на английском. Что-то советовать не могу, потому что не занимаюсь этим. Имхо поиск можно начать тут
http://tldp.org/HOWTO/Serial-HOWTO.html
кое-что есть на русском - при наличии интернета найдете быстро.
nik.laus
to Sasamy:
Уже и нашел и почитал. smile.gif

Цитата
Поспешные выводы. Обычно в ванильном ядре драйверы все же работают немнога


Действительно поспешные! smile.gif

Большое спасибо!
Тему можно закрывать.
nik.laus
Что-то я погорячился...
Или тему закрывать, или новую открывать... : (
Вообщем, *плакаю*... Дали мне готовое устройство... на этом, cp2102, чипе.
Пустышка отлично работала.
А готовое не работает...

Позволяет в него записывать, но обратно ничего не выдает...
Я в логе не вижу *read_bulk_callback...

Под виндой, говорят, работает...

Как-то раз товарищь запулил туда из /dev/urandom'а, что-то выдало.
Очень был удивлен... Посмотрели dmesg - 8250.ko запустился и отрабатывал
как com port. Вытянули и опять вставили - запустился уже cp210x... который ничего нам не выдал.

Я откровенно незнаю куда лезть... Ведь и спецификации нету : (
И спаришать где незнаю...

Буду баловаться с параметрами, скоростью и т.д....
И даже незнаю, куда держать ориентир для того, чтобы решить эту задачу...
Толи в драйверы разные лезть, толь с stty баловаться (а вдруг что получитсья)
Где почитать я тоже без понятия...
В гугле тоже не нашел чего-либо стоящего... : (
Поэтому у меня опять кризис жанра и неизвестно куда копать... : (

Вообщем, если кто подскажет, куда копать, когда непонятно куда копать... : (((
буду очень и очень благодарен и признателен!
nik.laus
А с утра оказалось, что девайс надо устанавливать на 4800 бит/секунду.
И все начало работать.

Всем спасибо за внимание и терпение!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.