完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好!最近我在调试CAN设备的时候遇到了这样一个问题: 1、32个CAN设备上电后每隔1秒上报一次自己的状态(需要发送两条报文); 2、用CAN分析仪接收发现,有些设备要等很久才能发送出来,有些设备发送一会儿就不发送了,有些设备从一开始就发送不出来; 3、第一条报文的CAN ID如下:0x13000601 第二条报文的CAN ID如下:0x13000701 4、减少CAN总线上的设备个数,当减少到5的时候,所有设备都能快速上报,继续往上加设备,上面说的现象就开始逐渐出现了; 5、波特率用的是500k,用CAN_test软件测试了CAN总线的占用率,还是比较低的,不超过10%; 不知道大家有没有遇到过类似的情况,这是什么原因呢?谢谢大家! |
|
相关推荐
5个回答
|
|
|
|
|
|
CAN 驱动有很多问题,比如多帧一起收发,就不行了!用CAN 工具连续发3帧 就会死机!
|
|
|
|
有没有想过可能是32单片机的fifo占满了,32个设备如果同一时间收发,单片机没有及时处理3个fifo早就满了。
按我之前的经验,就算把can接收中断设为最高且在中断里马上通过消息队列发送出去,也来不及处理的,使用的f407 建议发送报文前,根据can协议的ack确定接收端收到了再发送第二条报文,根据ack测试的几乎没有耗费多余的时间,而且很稳定 |
|
|
|
目前我找到的解决方式是,在上电之后,逐个开启CAN设备的上报功能,先开启CAN ID值比较大(也就是优先级比较低的),然后在开启CAN ID值比较小的,这样,在全部开启之后,同时上报就没有问题了。只是不知道是什么原因,为什么直接开启同时上报就会出现上面说的现象。
|
|
|
|
如果使用设备框架CAN驱动,使用MSH命令canstate查看丢包率 应该是撞包导致的,计算一下撞包率。 can在硬件层面有仲裁机制。 ID小的优先级大,当两个CAN同时发送数据时,会对CAN帧ID进行仲裁。优先级高的会发送。优先级低的仲裁失败。 如果使用STM32,会进入SCE中断,即错误中断中。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2219 浏览 0 评论
2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
17660 浏览 11 评论
2406 浏览 0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
3815 浏览 0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1289 浏览 0 评论
69399 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 07:13 , Processed in 0.671054 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号