статистика интерфейса действительно дает информацию об успешно отправленных пакетах
В примере ниже сначала я отправил несолько (26) пакетов устройству и получил на них ответы. TX packets:26 - успешно отправили пакеты. Затем я отключил устройство и отправил на него 1 пакет. Через несколько секунд получил в консоль
# NETDEV WATCHDOG: can0: transmit timed out
И осциллографом вижу, что передача на линии не прекращается. Статистика показывает следующее:
# ifconfig can0
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MULTICAST MTU:16 Metric:1
RX packets:26 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:1 dropped:0 overruns:0 carrier:3
collisions:59474 txqueuelen:10
RX bytes:208 (208.0 B) TX bytes:0 (0.0 B)
collisions постоянно растет с неимоверной скоростью. За несколько секунд оно выросло с 0 до 59474. Как это остановить? Может надо установить какой то лимит попыток отправки пакетов?
Оно не должно отравляться бесконечно, сообщения (с ошибками) отправляются
пока счётчик ошибок при передаче (TEC в документации на MCP2515) не достигнет
определённого значения. После чего они перестают передаваться, а устройство входит
в одно из состояний ошибок (active, passive, bus-off).
Видимо этого не происходит. Как узнать состояние ошибки?
Но так как сообщения буферизируются и ошибка сообщается по прерыванию, как определить для какого
сообщения была ошибка? Кроме того, оно автоматически будет отправлено ещё (и ещё...).
Что значит "Кроме того, оно автоматически будет отправлено ещё (и ещё...)." Значит ли это, что сообщение, которое не отправлено, будет отправляться бесконечно?