ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: не отправляются данные по CAN  (Прочитано 9428 раз)

0 Пользователей и 1 Гость просматривают эту тему.

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: не отправляются данные по CAN
« Ответ #15 : 24 Июня, 2011, 14:38:53 »

> Определить, был ли ACK мне было бы достаточно.

Можете определить что ACK был, если статистика ошибок не изменилась.
Но так как сообщения буферизируются и ошибка сообщается по прерыванию, как определить для какого
сообщения была ошибка? Кроме того, оно автоматически будет отправлено ещё (и ещё...).

> Поиграюсь ещё с типами ошибок, но по-моему их (ошибок) не возникает.

В статистике интерфейса нет ошибок?
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: не отправляются данные по CAN
« Ответ #16 : 05 Июля, 2011, 00:03:08 »

статистика интерфейса действительно дает информацию об успешно отправленных пакетах
В примере ниже сначала я отправил несолько (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).
Видимо этого не происходит. Как узнать состояние ошибки?


Цитировать
Но так как сообщения буферизируются и ошибка сообщается по прерыванию, как определить для какого
сообщения была ошибка? Кроме того, оно автоматически будет отправлено ещё (и ещё...).
Что значит "Кроме того, оно автоматически будет отправлено ещё (и ещё...)." Значит ли это, что сообщение, которое не отправлено, будет отправляться бесконечно?
Записан