ЗАО «ЗЭО»

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

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

Новости:

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

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

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
не отправляются данные по CAN
« : 11 Июня, 2011, 15:42:22 »

Здравствуйте!
Купил у вас CAN адаптер для тион-про2. Пытаюсь наладить соединение по CAN с внешним устройством, но пока не получается. Вот какие мои действия:
1. подлючил CAN адаптер к тиону
2. На тион залито ядро с подержкой CAN
3. выплняю команду ifconfig can0 up и вижу, что появился интерфейс CAN:
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:0 errors:0 dropped:0 overruns:0 frame:0                                                     
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0                                                   
          collisions:0 txqueuelen:10                                                                             
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)                                                                 
4. Скачал с вашего сайта пример программы по работе с CAN (can-test_svn733), собрал её для тиона и запускаю:
Запуск выглядит так:
# ./can-test -e 0xAA -l 5 -d 12345                                                                               
can-test: ext. id, hex: AA                                                                                       
can-test: length:       5                                                                                         
can-test: data, hex:    00 00 01 23 45                                                                           
wwwwwwwwwwwwwwwwwwwwwwwwwwwww   
И вижу, что символ "w" печатается и печатается.
Функция send возвращает ошибку и strerror говорит, что ошибка No buffer space available.
5. Смотрю осциллографом на линии CAN - там тишина

Что я делаю не так? Как заставить CAN адаптер отправлять и принимать данные?

PS: плата тион-про2, ОС Linux
Записан

asv

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

5V на X5 подали?
Записан

MOHOMAX

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

X5 это разъем на адаптере который? Да, подавал. Хотя я прозванивал линии и понял, что эти 5В идут только на DC-DC, а питание микросхем адаптера осуществляется от 3В с SPI разъема. Хотя может я и ошибаюсь.

В общем 5В я подавал и на выходе ничего не видел.
Есть ли возможность получить принципиальную схему адаптера?
Записан

asv

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

> Есть ли возможность получить принципиальную схему адаптера?

5V ещё на ИМС изолятора и на ИМС формирования физ. уровней.

> Есть ли возможность получить принципиальную схему адаптера?

http://www.zao-zeo.ru/media/files/adapters/can-spi-adapter_rev2_circuit.pdf
Записан

MOHOMAX

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

за схему спасибо!
Я ещё раз проведу эксперимент с подачей 5В на разъем и отпишусь
Записан

asv

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

> Смотрю осциллографом на линии CAN - там тишина

Вы смотрите сразу или после сообщения об ошибке?
Ошибка нормальна, если у вас нет на шине принимающего сообщения устройства.
Записан

MOHOMAX

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

осциллограф я включаю до отправки какой либо команды. Осциллограф работает в режиме триггера по изменению уровня. То есть любая активность на линии CAN будет отображаться на экране. Я отправляю команду на отправку данных по CAN, но на линиях тишина. Осциллограф подключен так: земля - к CAN-H, сигнал - CAN-L.
Но принимающего устройства действительно нет.
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: не отправляются данные по CAN
« Ответ #7 : 15 Июня, 2011, 01:47:47 »

ситуация немного изменилась.Я подал 5В на X5 и смотрю осциллографом на линии CAN. Выполняю:
Цитировать
# ./can-test -e 0xAA -l 5 -d 12345                                           
can-test: ext. id, hex: AA                                                   
can-test: length:       5                                                   
can-test: data, hex:    00 00 01 23 45                                       
..........wwwwwwwwwwwwwwwwwwwwwwwwwwwww                                     
can-test: Send packets (-1): 10, errors: 0                                   
#                                           
Как можно заметить в начале мы видим 10 точек, что говорит о том, что отправка якобы прошла успешно. Но при этом на линиях CAN по прежнему тишина. У меня два адаптера CAN. На обоих одинаковая картина. Такая картина и при подключенном внешнем прибора, и без него.

Дополнительный вопрос: как настраивается скорость передачи на шине CAN?
Записан

asv

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

Изменение режима и скорости возможно только при выключенном CAN-интерфейсе.

Включение режима передачи:
echo 0 > /sys/class/can0/listen_only

Выключение режима передачи (выключен по умолчанию):
echo 1 > /sys/class/can0/listen_only

Задание скорости (по умолчанию 500 кбит/с):
echo 250000 > /sys/class/can0/bit_rate

Чтение скорости
cat /sys/class/can0/bit_rate

Включение CAN-интерфейса:
ifconfig can0 up

Выключение CAN-интерфейса:
ifconfig can0 down
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: не отправляются данные по CAN
« Ответ #9 : 15 Июня, 2011, 15:19:27 »

А режим передачи надо постоянно выставлять? Каков вообще алгоритм работы? Я хочу отправить на удаленное устройство пакет и получить ответ. Какие мои действия?
Я понимаю так:

1. Выключить CAN интерфейс (ifconfig can0 down)
2. включить режим передачи (echo 0 > /sys/class/can0/listen_only)
3. Включить CAN интерфейс (ifconfig can0 up)
4. Отправить пакет запроса
5. Выключить CAN интерфейс (ifconfig can0 down)
6. выключить режим передачи (echo 1 > /sys/class/can0/listen_only)
7. Включить CAN интерфейс (ifconfig can0 up)
8. начать слушать канал, чтобы получить ответ

Так что ли? Как то больно сложно получается. Наверно есть какой то другой алгоритм работы?
Записан

asv

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

listen_only нужен чтобы аппаратно запретить адаптеру что-либо передавать на шину (для мониторинга), даже не отмечать подтвержение приёма пакета.

Т.е. достаточно переключить режим из listen_only, задать скорость и ifconfig can0 up.
После этого можете передавать и принимать.
Записан

MOHOMAX

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

после включения режима передачи

echo 0 > /sys/class/can0/listen_only

я увидел активность на линии. Спасибо!
Продолжаю разбираться с CAN.
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: не отправляются данные по CAN
« Ответ #12 : 22 Июня, 2011, 13:21:23 »

Ещё пара вопросов по работе с CAN адаптером

1. Если отправляется сообщение на шину, но на шине нет приемника, при этом через несколько секунд после отправки в консоль выводится сообщение о таймауте отправки.  Но осциллографом я вижу, что это сообщение бесконечно отправляется на шину. Это нормально? Можно ли его прервать? Помогает только перезагрузка тиона. ifconfig can0 down ifconfig can0 up не помогает

2. Как программно определить, что приемник не получил сообщения? После send ошибок не происходит. То есть видимо send говорит, что данные успешно отправлены "на отправку", но как определить, доставлены ли они физически или нет?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: не отправляются данные по CAN
« Ответ #13 : 23 Июня, 2011, 16:30:21 »

> Если отправляется сообщение на шину, но на шине нет приемника,
> при этом через несколько секунд после отправки в консоль выводится
> сообщение о таймауте отправки.  Но осциллографом я вижу, что это
> сообщение бесконечно отправляется на шину

Оно не должно отравляться бесконечно, сообщения (с ошибками) отправляются
пока счётчик ошибок при передаче (TEC в документации на MCP2515) не достигнет
определённого значения. После чего они перестают передаваться, а устройство входит
в одно из состояний ошибок (active, passive, bus-off).

> ifconfig can0 down ifconfig can0 up не помогает

Выходить из этого состояния устройство должно автоматически: при определённых условиях.

> Как программно определить, что приемник не получил сообщения

Вероятно определить какая ошибка в каком конкретно сообщении не получится, так как инф.
об ошибках получается в прерывании. Общее состояние должно быть в статистике интерфейса.

> доставлены ли они физически или нет

Может быть вам нужен какой-то более высокоуровневый протокол поверх CAN?
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: не отправляются данные по CAN
« Ответ #14 : 24 Июня, 2011, 13:29:43 »

> Оно не должно отравляться бесконечно, сообщения (с ошибками) отправляются
> пока счётчик ошибок при передаче (TEC в документации на MCP2515) не достигнет
Судя по осциллографу передатчик вещает что-то на линию даже после того, как в консоли появилось сообщение о таймауте. по крайней мере минут 10 точно идет. Дольше я не смотрел. может надо как то сбрасывать состояние буферов?

>>> доставлены ли они физически или нет
>Может быть вам нужен какой-то более высокоуровневый протокол поверх CAN?
Протокол CAN имеет возможность определять, доставлено ли сообщение (сигнал ACK ведь присутствует). Определить, был ли ACK мне было бы достаточно. Поиграюсь ещё с типами ошибок, но по-моему их (ошибок) не возникает.
Записан