Периодический мусор на последовательном интерфейсе

У меня есть встроенная плата на основе Allwinner V40, которая имеет последовательный (UART) интерфейс на уровнях напряжения TTL. Я получаю доступ к этому интерфейсу с помощью небольшой платы адаптера (MAX232) и адаптера RS232->USB.

Обычно этот интерфейс настроен на отправку отладочной информации (/dev/ttyS0 в Linux). Я могу включать и выключать это, и я могу отправлять и получать данные, как я хочу. Однако что-то еще отправляет данные ровно каждые десять секунд. Вот так выглядит мусор (10 секунд между каждой строкой, записано на скорости 9600 бод, третья строка отправлена ​​мной).

введите описание изображения здесь

Для справки, это первая строка в шестнадцатеричном формате:

0A 05 31 04 41 6C 4E 0A 02 39 02 F3 F0 F4 F7 F1 F1 F6 F3 F1 F6 F1 FF FF FF FE FF FF FF FF FF FF FF

Я пытался изменить настройки скорости передачи и т. д. на случай, если что-то еще отправляет с другой скоростью передачи, но это ни к чему не привело. Я также попытался отключить Bluetooth, так как у Raspberry Pi есть аналогичная проблема, когда Bluetooth включен. Это не помогло, но и при активном использовании Bluetooth хуже не становится.

Это двухпроводной UART, управления потоком нет. UART 0 подключен к PB22 и PB23 на SoC, что кажется правильным. Из моего sys_config.fex (я использую устаревшее ядро/Allwinner):

[uart0]
uart0_used       = 1
uart0_port       = 0
uart0_type       = 2
uart0_tx         = port:PB22<2><1><default><default>
uart0_rx         = port:PB23<2><1><default><default>

[uart0_suspend]
uart0_tx         = port:PB22<7><1><default><default>
uart0_rx         = port:PB23<7><1><default><default>

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

Включен ли сторожевой таймер?
Я не знаю. Честно говоря, я даже не знаю, о чем вы...
grep -R "HELLO THIS IS A TEST" /
что-то вроде root@orangepizero:~# systemctl status watchdog.service
Из того, что я смог найти, и это может быть бесполезно, но 0x0A 0x05 - это управляющие символы ASCII для «Новая строка», «Запрос» ... все строки, которые начинаются таким образом, вы называете «мусором»? Может быть, это метод управления потоком (?), может быть, у вас есть пустые строки в вашем файле (?) Я не знаю, просто выбрасываю вещи, которые могут соотноситься с другими вещами, которые вы уже заметили.
@CapnJJ да, все строки начинаются с 0x0A, 0x05, 0x31 (или 0x32) и заканчиваются большим количеством установленных битов (0xFF и т. д.). "ПРИВЕТ, ЭТО ТЕСТ" был я, чтобы доказать, что у меня такая же скорость передачи данных и я могу общаться :-).
@SpehroPefhany На этом устройстве Android 6 (рутированный), без systemctl. В SoC есть сторожевой таймер, который может перезагрузить устройство, если оно зависнет, но в настоящее время мы его не используем.
Ах. Я предположил, что когда вы написали «что-то еще отправляет данные каждые десять секунд. Вот как это выглядит» , вы показали фактические данные, которые отправляются каждые десять секунд. Дурак я.
Похоже на контроль потока, проблема с проверкой действительных данных не фильтруется должным образом. Вы проверяете статус ошибки UART и хотите отфильтровать результаты?
Может быть, проверить с помощью lsof /dev/ttyS0, есть ли другой процесс, использующий порт?
@фило Бинго! Это был демон сенсорного экрана, eGTouchDслучайным образом открывающий все TTY и записывающий на них. Однако вам приходилось многократно использовать команду, чтобы поймать ее в действии. Если вы дадите ответ с трюком lsof, я могу принять его, чтобы вы могли получить репутацию :-).

Ответы (1)

Проверьте с помощью lsof /dev/ttyS0, есть ли другой процесс, использующий порт?