У меня есть Linux SBC на базе Atmel SAMA5D36. У меня есть другое устройство, подключенное к нему через/dev/ttyS2 через TTL-линии (115200 8N1). Используя pyserial, у меня есть довольно высокоскоростной запрос на запрос/ответ с этим устройством.Weird (py) последовательное повреждение linux
Периодически (не реже одного раза в минуту) я вижу очень повторяющееся повреждение даты, возвращающейся с другого устройства. Если бы ответить какой-нибудь текстом, как
"123456" (ascii character values)
Он будет падать на один символ и добавить символ-0 после следующего характера:
"13\x00456"
Надеется, что это ясен. Он сбросит 2, следующий символ будет таким, как ожидалось, после этого появится символ-0, а затем вернется в нормальное состояние.
Я использую ядро 4.1.10. Через некоторые операторы отладки, я уверен, что этого не происходит в моем цикле питона, потому что 0 отображаются в случайных точках буфера read(). Я также подключил область на входящих линиях и подтвердил, что провод не несет этого повреждения.
Я ищу ответ, который поможет мне в правильном направлении выяснить, почему это происходит. Загрузка ЦП кажется для увеличения частоты (например, когда я делаю кучу трафика DBUS для присоединенного адаптера BLE).
Что вы подразумеваете под «довольно высокой пропускной способностью»? Вы говорите, что вы «подтвердили, что провод не несет этого искажения» - на самом деле это довольно сложно сделать с аналоговой областью, если эта ошибка происходит только раз в минуту, и происходит много потоков данных. Одна из возможностей заключается в том, что ваш SBC uart превосходит серийный Rx, возможно, потому что другие прерывания с более высоким приоритетом блокируют uart для> 80us-ish, что является характерным временем при 115200 бодах. Или, если uart имеет, например, 16-байтовый rx fifo, а прерывания блокируются для> 1 мс-иш, хотя это кажется маловероятным. – barny
Я буду использовать его завтра, когда я нахожусь на машине, чтобы получить более подробный ответ на высокой пропускной способности. –
Я проверил отсутствие коррупции на проводе (прямо он подключался к контактам на Linux SBC) с помощью PicoScope, который может выполнять последовательное декодирование потока. Получив мое программное обеспечение для управления штырем gpio, когда я обнаруживаю неожиданный ноль, я могу вызвать область действия на этом, а затем сравнить характер для персонажа, что произошло, и что вышло на стороне pyserial. –