Переключатель скорости передачи данных CAN FD на Raspberry Pi 3 - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь получить два RasPis с экраном CAN FD (MCP2517FD) для связи через CAN FD. Это на самом деле работает нормально, но как только я установил для BRS значение TRUE, происходят странные вещи, и сообщения не отправляются должным образом.

Настройка, которую я использовал для обоих Pis, довольно похожа на эту: https://github.com/GBert/misc/tree/master/RPi-MCP2517

Я добавил следующие строки в мой /boot/config.txt:

core_freq=250
kernel=ms7/zImage
device_tree=ms7/bcm2710-rpi-3-b.dtb
overlay_prefix=ms7/overlays/
dtoverlay=mcp2517fd-can0
dtparam=interrupt=25
dtparam=oscillator=40000000
dtparam=spimaxfrequency=20000000

Файлы отправки и получения записаны и python и в значительной степени скопировано с: https://github.com/skpang/PiCAN-FD-Python-examples

Если я отправляю сообщения без активной BRS, я получаю:


pi@raspberrypi:~/Desktop $ python receive.py 

CAN Tx test
Bring up CAN0....
Ready
 1585041201.788182 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.808952 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.830066 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.851458 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.872531 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.893586 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.914766 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.935900 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.957289 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.978357 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041201.999257 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041202.020625 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041202.042069 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041202.062888 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041202.083847 1 0 123 8 1 2 3 4 5 6 7 8 
 1585041202.104733 1 0 123 8 1 2 3 4 5 6 7 8 

Пока все хорошо. Теперь я отправляю те же сообщения, но с BRS, установленным в True:


CAN Tx test
Bring up CAN0....
Ready
 1585042868.352613 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.372650 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.372807 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.372949 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.373283 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.393287 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.393603 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.414106 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.414431 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.434750 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.435073 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.455482 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.455801 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.476293 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.476358 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.476461 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.476531 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.476863 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.497091 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.497158 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.497273 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.497595 1 1 123 8 1 2 3 4 5 6 7 8 
 1585042868.517904 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518014 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518133 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518226 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518320 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518439 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518558 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518678 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518815 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518870 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.518991 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.519087 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.519267 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.519425 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.519550 0 0 8 8 0 0 0 0 0 0 0 0 
 1585042868.519683 0 0 8 8 0 0 0 0 0 0 0 0 

В большинстве случаев результат отличается. Я отправляю 16 сообщений, но получаю только некоторые из них (всегда другое число). Кроме того, если я отправляю больше сообщений от того же RasPi, я получаю следующую ошибку при отправке RasPi:


Traceback (most recent call last):
  File "send.py", line 32, in <module>
    bus.send(msg)
  File "/home/pi/.local/lib/python2.7/site-packages/can/interfaces/socketcan/socketcan.py", line 626, in send
    sent = self._send_once(data, msg.channel)
  File "/home/pi/.local/lib/python2.7/site-packages/can/interfaces/socketcan/socketcan.py", line 649, in _send_once
    raise can.CanError("Failed to transmit: %s" % exc)
can.CanError: Failed to transmit: [Errno 105] No buffer space available

Иногда RasPi зависает, и мне приходится его отключать.

Битрейты и выборочные точки обеих конфигураций одинаковы.

Есть идеи о том, как правильно настроить этот режим, пока установлен BRS, или почему это происходит?

Заранее большое спасибо!

...