Firefly开源社区

打印 上一主题 下一主题

[Linux] can通信报错

827

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
827
发表于 2022-11-11 11:17:18      楼主
正常现象,底层驱动没有把数据发出去就会阻塞上层队列,而上层队列就如你所说的改成1000,代表上层缓存1000帧。你底层没有发生成功,他不会从上层拿数据,也就是上层队列满,你应用层写不进去。该问题最根本原因是,can驱动发送出去的数据没有收到发送确认信号,就不会打队列发送另一帧。检测接收端是否正常,波特率是否一致,如果有分析仪就接上看看。
回复

使用道具 举报

827

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
827
发表于 2022-11-14 16:26:35      沙发
你这个使用的是can1.0, 不支持同时发送和接收数据,同时发送和接收会有大量错误帧。
回复

使用道具 举报

827

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
827
发表于 2022-11-14 16:31:27      板凳
wx__aXXToW 发表于 2022-11-14 14:25
连上can分析仪,在上面发1000000比数据,间隔时间10ms,都有错误帧。间隔时间调到1ms,can总线就挂掉了
...

如果需要同时发送和接收数据,设备树更改在can下添加:
compatible = "rockchip,can-2.0";
回复

使用道具 举报

827

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
827
发表于 2022-11-15 14:58:53      地板
wx__aXXToW 发表于 2022-11-15 14:35
我试过,把rk3568-firefly-port.dtsi 里的compatible改成compatible = "rockchip,can-2.0"; ...

你使用到的can才要更改,软件的can0是看谁先注册进来谁就是can0,后面的就是can1、can2....,而现在更改的是硬件的can1和can2,你只使能了can2,那软件上只会有can0
回复

使用道具 举报

827

积分

0

威望

0

贡献

技术大神

Rank: 3Rank: 3

积分
827
发表于 2022-11-15 17:50:54      5#
wx__aXXToW 发表于 2022-11-15 17:29
明白了,那我要在这里把can1和can0都使能一遍,对吗?

你使用的can才需要使能,而且还要看引脚有没有被其他设备复用。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表