Firefly开源社区

标题: can通信报错 [打印本页]

作者: wx__aXXToW    时间: 2022-11-10 11:57
标题: can通信报错
can1测试通信时,十几秒后就报“write: No buffer space available”,网上查找该报错,将qlen由10改成1000,但还是报错。源码没改,只把can1使能,帮忙看看可能是什么原因引起的,给下修改建议感谢!

报错截图


can1信息



发送数据脚本




个人修改设备树


tchip_askquestions

forum.zip

79.4 KB, 下载次数: 0, 下载积分: 灯泡 -1 , 经验 -1


作者: dengkx    时间: 2022-11-11 11:17
正常现象,底层驱动没有把数据发出去就会阻塞上层队列,而上层队列就如你所说的改成1000,代表上层缓存1000帧。你底层没有发生成功,他不会从上层拿数据,也就是上层队列满,你应用层写不进去。该问题最根本原因是,can驱动发送出去的数据没有收到发送确认信号,就不会打队列发送另一帧。检测接收端是否正常,波特率是否一致,如果有分析仪就接上看看。
作者: e_donkey    时间: 2022-11-12 13:19
txqueuelen 我们设置4M个缓存。之前在其他平台好用的程序,每10ms 发送10帧,发现在rockchip大量出现发送失败,soket can write函数返回-1。dmesg 能看到 virtual device can1 asks to queue packet!
rockchip can控制器上没有硬件的发送队列?
在queuelen设置足够大情况,只连续write 10次就触发了wirte失败,这个怎么能优化性能?
作者: wx__aXXToW    时间: 2022-11-14 14:25
dengkx 发表于 2022-11-11 11:17
正常现象,底层驱动没有把数据发出去就会阻塞上层队列,而上层队列就如你所说的改成1000,代表上层缓存1000 ...

连上can分析仪,在上面发1000000比数据,间隔时间10ms,都有错误帧。间隔时间调到1ms,can总线就挂掉了



作者: dengkx    时间: 2022-11-14 16:26
你这个使用的是can1.0, 不支持同时发送和接收数据,同时发送和接收会有大量错误帧。
作者: dengkx    时间: 2022-11-14 16:31
wx__aXXToW 发表于 2022-11-14 14:25
连上can分析仪,在上面发1000000比数据,间隔时间10ms,都有错误帧。间隔时间调到1ms,can总线就挂掉了
...

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

作者: wx__aXXToW    时间: 2022-11-15 14:35
dengkx 发表于 2022-11-14 16:31
如果需要同时发送和接收数据,设备树更改在can下添加:
compatible = "rockchip,can-2.0";

我试过,把rk3568-firefly-port.dtsi 里的compatible改成compatible = "rockchip,can-2.0";。ifconfig -a就只有can0,没有can1和can2。还有其他地方需要修改的吗?



作者: dengkx    时间: 2022-11-15 14:58
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
作者: wx__aXXToW    时间: 2022-11-15 17:29
dengkx 发表于 2022-11-15 14:58
你使用到的can才要更改,软件的can0是看谁先注册进来谁就是can0,后面的就是can1、can2....,而现在更改 ...

明白了,那我要在这里把can1和can0都使能一遍,对吗?


个人修改设备树




作者: dengkx    时间: 2022-11-15 17:50
wx__aXXToW 发表于 2022-11-15 17:29
明白了,那我要在这里把can1和can0都使能一遍,对吗?

你使用的can才需要使能,而且还要看引脚有没有被其他设备复用。
作者: wx__aXXToW    时间: 2022-11-18 08:58
dengkx 发表于 2022-11-15 17:50
你使用的can才需要使能,而且还要看引脚有没有被其他设备复用。

可以了,源码升级后canfd驱动文件里才出现can-2.0。现在没有错误帧可以正常通信了,感谢!
作者: fox8171    时间: 2024-2-29 11:39
谢谢大神,学习了
作者: fox8171    时间: 2024-3-8 22:27
小白学习中,多谢指教




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1