Bennett 发表于 2023-4-10 15:59:49

CAN问题

请教一下ITX-3588J上关于CAN的问题,买了一个CAN收发小模块接在板子上,canh接canh,canl接canl,在板子串口里面candump can0,在Linux命令行下cansend can0 123#1122334455667788,却接收不到任何数据,bitrate都设置为500K,两边都有can0节点生成,不知道问题出在哪里,我看kernel的代码默认编译的是canfd的代码,设备树里面的compatible = "rockchip,can-2.0"; can驱动里面的是can-1.0,canfd驱动里既有can-1.0也有can-2.0,有没有大佬给点思路。。。。

zhangzhenzhao 发表于 2023-4-10 17:55:09

ITX-3588J硬件版本是多少?拍丝印看看

dengkx 发表于 2023-4-11 14:11:19

看一下硬件版本,有一个版本没有加ic,那个版本的can还不能直接使用。驱动就是使用canfd的也就是设备树的can2.0

Bennett 发表于 2023-4-11 14:48:33

dengkx 发表于 2023-4-11 14:11
看一下硬件版本,有一个版本没有加ic,那个版本的can还不能直接使用。驱动就是使用canfd的也就是设备树的ca ...

设备树里面默认的确实是can2.0,但是没有数据,我把改成can1.0就能正常candump了,这是为什么呢?

Bennett 发表于 2023-4-11 14:55:39

zhangzhenzhao 发表于 2023-4-10 17:55
ITX-3588J硬件版本是多少?拍丝印看看

板子上有三行字

ITX-15J
ITX-3588J
V1.2 2022.09.26

你说的是这个吗
我现在把设备树里里卖弄的compatible = "rockchip,can-2.0"改成compatible = "rockchip,can-1.0"就能candump数据了,这是为什么。

Bennett 发表于 2023-4-11 15:01:01

dengkx 发表于 2023-4-11 14:11
看一下硬件版本,有一个版本没有加ic,那个版本的can还不能直接使用。驱动就是使用canfd的也就是设备树的ca ...

还有rockchip_canfd.c里面的一段代码如下:

static const struct of_device_id rockchip_canfd_of_match[] = {
        {
                .compatible = "rockchip,canfd-1.0",
                .data = (void *)ROCKCHIP_CANFD_MODE
        },
        {
                .compatible = "rockchip,can-2.0",
                .data = (void *)ROCKCHIP_CAN_MODE
        },
        {},
};

这个意思是说canfd的驱动既可以使用can-1.0也可以使用can-2.0吗?

Bennett 发表于 2023-4-11 15:18:44

dengkx 发表于 2023-4-11 14:11
看一下硬件版本,有一个版本没有加ic,那个版本的can还不能直接使用。驱动就是使用canfd的也就是设备树的ca ...

我现在把can和canfd的驱动同时都打开了,can.c里面的是can-1.0而canfd里面的是canfd-1.0和can-2.0,设备树里面的是can-2.0,我实验证明当不加修改直接用的时候,没有dump的数据,在这里我感觉是当设备树是can-2.0的时候canfd的驱动并不能用?难道当我把设备树改成can-1.0的时候can的驱动就可以用,难道只有 把设备树改成canfd-1.0的时候canfd的驱动才能用吗,那既然这样,为什么还要在canfd的驱动代码里面加can-2.0这一条。。。搞不懂

dengkx 发表于 2023-4-11 16:34:26

Bennett 发表于 2023-4-11 15:18
我现在把can和canfd的驱动同时都打开了,can.c里面的是can-1.0而canfd里面的是canfd-1.0和can-2.0,设备 ...

使用can2.0的会比can1.0性能更强,can1.0在发送数据时不能接收数据。一般can1.0能使用的,can2.0也没问题,至于你这种现象我没有遇到过
页: [1]
查看完整版本: CAN问题