首页 > 解决方案 > Python CAN isotp 套接字未接收数据,但接收到了 candump

问题描述

我正在尝试将 Pican3+Raspberry Pi 4(设备 1)与我的笔记本电脑(设备 2)中的独木舟进行通信。我在树莓派中使用 python can isotp 模块。我能够将我的树莓派代码中的数据发送到独木舟,但无法接收从独木舟发送到树莓派到我在 python 代码中创建的 isotp.socket 的数据。但是数据是在树莓派端接收的,用candump验证。下面是使用的代码。

import isotp 
s = isotp.socket()
s.bind("can0", isotp.Address(rxid=0x701, txid=0x708))
s.send(b'a')
while True:
    da = s.recv()
    if da is not None:
        print('here')
        print(da)

canoe 发送的消息具有消息 ID 701 和标准罐框架。据我了解,套接字已绑定以从 can0 通道接收 ID 为 701 的消息。我错过了什么吗?附上canoe和raspberry的candump的消息截图,请看。

我的笔记本电脑中独木舟的屏幕截图

树莓派 4 中的 candump 截图

标签: pythonraspberry-pican-bussocketcanpython-can

解决方案


代码中没有问题,并且工作正常。问题出在另一端,我试图将 CAN 帧从笔记本电脑中的 Canoe 发送到 PICAN。该帧不是按照 ISO TP 格式创建的,因为 raspberry pi linux 中的 iso tp 层无法处理它。一旦我按照 isotp 制定了 CAN 帧,在代码中创建的套接字就会接收和处理数据。有关 ISO TP 协议的更多信息,请查看https://www.emotive.de/wiki/index.php?title=ISOTP


推荐阅读