LINUX.ORG.RU

Проблема согласования UART

 , , , ,


0

1

Есть древний полумёртвый роутер, который у меня уже лет 5 валялся. Был отдан мне с комментарием «труп». И вот, до него дошли руки =) Разумеется, на RESET не реагирует: вывод - загрузчика точно нет. Собрался было я уже выпаивать флешку, как дёрнуло меня сначала распаять UART пины...

Подцепляюсь к ним с настройками 115200, 8N1 (инфа по openwrt wiki), а там признаки жизни - бегут кракозябры. Поигрался я с параметрами, и кракозябры преобразовались в нормальный текст (7E1, странно...). И видно, что загрузчик ругается на битую фирмварь, грозится ребутнуться и ребутается. Ещё раз я понажимал на RESET(failsafe tftp должен быть), глядя в консоль - не реагирует. Даже контакты сами замыкал, чтобы исключить мёртвую кнопку. Ну ладно...

Есть последовательность символов, которая останавливает процесс загрузки фирмвари. Нужно успеть её написать за 1 секунду. И как я только ни приседал - не получается. Начал я подозревать, что роутер меня не слышит физически... Поигрался я с резисторами даже, с помощью которых подключен Rx пин к SoC. Думаю, может загрузчик, всё-таки, частично битый (не знаю, проверяет ли SoC его хэш). На всякий случай решил подключиться через screen (до этого - minicom), даже настройки правильные не успел сделать. Пишу заветные буквы несколько раз - ОСТАНОВИЛОСЬ! Диоды перестали мигать от цикличного ребута, кракозябры устаканились, на Enter реагирует небольшой порцией кракозябр (там должно быть написано «hornet>»).

Итого имеем:

  • в режиме 8N1 роутер слышит, но мне видны кракозябры
  • в режиме 7E1(7N1) роутер не слышит, мне видны нормальные символы

Открыл для себя я утилиту stty =), которая позволяет настраивать кучу параметров на лету. Но как я не перебирал - заветная комбинация не родилась =) На данный момент предполагаю, что есть какая-то несогласованность в параметрах, из-за чего регулярно появляются/исчезают 1-2 бита.

Вопрос такой: можно ли как-то задампить сырой трафик, чтобы можно было посмотреть на уровне битов, что там происходит? Так как я могу заставить роутер слать мне «hornet>», то можно было бы сопоставить его выхлоп с предполагаемыми битами для соответствующих ASCII символов.

В stty --help можно посмотреть доступные мне опции.

П.с. Выкинуть, перешить программатором, купить другой router_name, завести женщину/мужчину - не предлагать =)

можно ли как-то задампить сырой трафик?

А на осцилограф вывести не проще будет?

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

А на осцилограф вывести не проще будет?

Под рукой нет такого добра =(

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

Цепляюсь с RaspberryPi. С неё же до этого успешно коннектился к другим девайсам по UART.

ephecaff ()
Последнее исправление: ephecaff (всего исправлений: 1)
# uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux
ephecaff ()

Решил проверить, может быть на tty разные параметры дефолтные - нет, всё одинаково (даже diff делал).

# stty -F /dev/ttyUSB0 -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; discard = ^O; min = 100; time = 2;
-parenb -parodd -cmspar 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 -flusho -extproc

Т.е. на tty 100% одинаковые настройки: через ttyUSB0 работает, через ttyS0 - нет.

ephecaff ()
Последнее исправление: ephecaff (всего исправлений: 1)
Ответ на: комментарий от anonymous

Да вряд ли... Я в старт-топике целую портянку накатал, попробую проще написать.

Если я подключаюсь через screen cs7, то всё прекрасно видно, но ввод игнорируется. Если подключаюсь через screen cs8 - на экране кракозябры, но роутер корректно реагирует на ввод.

ephecaff ()

PL-2303 работает через cs8 (8N1), как и написано в мануале (openwrt wiki).

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

Подключи приемник через один порт, передатчик через другой, план б - запиши на звуковую карту что там.

ilovewindows ★★★★★ ()

Посмотреть на каком SoC сделан роутер. Скачать даташит, там скорее всего будет типичная схема подключения UART. Есть подозрение, что на Rx линии должен стоять pull-up резистор на стороне роутера, может быть внутренний, а может внешний не запаяли из экономии. Хост при передаче опускает напряжение с роутера на своей Tx.

Но вообще, нужен чип преобразования уровней. Может на роутер шарашит +12V с компа.

Вот например похожий вопрос задают. https://www.embeddedrelated.com/showthread/msp430/17602-1.php И чип MAX RS-232 советуют, где уже все есть.

bugs-bunny ()
Ответ на: комментарий от ephecaff

Игрался с hw flow control?

/мимокрокодил

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