这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » iCore-3568JQcan1测试通信报错是什么原因引起的

共7条 1/1 1 跳转至

iCore-3568JQcan1测试通信报错是什么原因引起的

工程师
2023-09-07 15:38:21     打赏

1.jpg

问题描述及复现步骤:

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

报错截图

1.jpg

2.jpg

can1信息

1.jpg

发送数据脚本

1.jpg

个人修改设备树

1.jpg

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

pYYBAGN3PZWANLAhAAL42JZWDrE291.jpg

pYYBAGN3PZ2AWGGBAADT7yZ8Wys528.jpg





关键词: iCore-3568JQ     can1    

助工
2023-09-07 15:39:58     打赏
2楼

正常现象,底层驱动没有把数据发出去就会阻塞上层队列,而上层队列就如你所说的改成1000,代表上层缓存1000帧。你底层没有发生成功,他不会从上层拿数据,也就是上层队列满,你应用层写不进去。该问题最根本原因是,can驱动发送出去的数据没有收到发送确认信号,就不会打队列发送另一帧。

根据分析仪接上所看,可以看到检测接收端是否正常,波特率是否一致;然而你这个使用的是can1.0, 不支持同时发送和接收数据,同时发送和接收会有大量错误帧。

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


工程师
2023-09-07 15:40:27     打赏
3楼

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


助工
2023-09-07 15:40:39     打赏
4楼

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


工程师
2023-09-07 15:40:56     打赏
5楼

明白了,那我要在这里把can1和can0都使能一遍,对吗?
个人修改设备树
pYYBAGN3PU2ATlrEAADBqu4CbZk882.jpg


助工
2023-09-07 15:41:09     打赏
6楼

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


工程师
2023-09-07 15:41:21     打赏
7楼

可以了,源码升级后canfd驱动文件里才出现can-2.0。现在没有错误帧可以正常通信了,感谢!


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]