BSP视频教程第25期:CAN/CANFD/CANopen专题,CAN知识点干货分享, 收发执行过程和错误帧处理(2023-01-03)
CAN的知识点非常多,我们预计将制作3-4期专题视频,针对第1期视频,花了好几天时间将重要的知识全部给大家做个整理分享,了解后,大家会有个全面的认识。大大方便以后实战测试和CAN规范查阅。
视频教程:
https://www.bilibili.com/video/BV1RM411h7tN
https://www.bilibili.com/video/BV1RM411h7tN
视频提纲:
https://img.alicdn.com/imgextra/i2/299314119/O1CN01p2LAHU1gIYCVEy12r_!!299314119.pnghttps://img.alicdn.com/imgextra/i2/299314119/O1CN01ILc15G1gIYCVF0MZs_!!299314119.png
https://img.alicdn.com/imgextra/i4/299314119/O1CN015DjDGB1gIYCP5Rztm_!!299314119.png
参考资料:
1、CAN总线35周年特别篇 -- CAN总线的前世今生
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104480
2、WiKi百科CAN总线
https://en.wikipedia.org/wiki/CAN_bus
3、瑞萨CAN入门教程
https://www.armbbs.cn/forum.php?mod=viewthread&tid=14546
4、Kvaser入门教程
https://www.kvaser.com/can-protocol-tutorial/
5、MDK的CAN入门教程
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104463
6、CANFD教程:
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104728
7、博世的CAN2.0和CANFD规格书
https://www.armbbs.cn/forum.php?mod=viewthread&tid=117358
更新完毕。 测试阶段那里讲的不好,不应该介绍使用二极管的接法(毕竟看不到PHY出来之后的电平)。应该直接说购买两块开发或者H7-Tools进行配套实验,这样才有实战价值:) 硬漢哥給力 ndx1986 发表于 2023-1-3 07:50
测试阶段那里讲的不好,不应该介绍使用二极管的接法(毕竟看不到PHY出来之后的电平)。应该直接说购买两块 ...
{:8:}
这个也是个非常好的知识点,给大家分享下,之前好几个网友咨询是否可以不使用PHY芯片也能使用CAN,这个是可以测试阶段玩的,测试软件应用层,STM32芯片大部分都是双CAN,所以可以测试。
然后就是也可以看电平效果,不过这个不是差分电平了。用来了解PHY芯片之前的电平也非常不错。
这个讲解真是太有用了,后面希望可以把采样率这个知识点科普一下。
错误帧的检测这个非常重要,一般CAN盒只是包错误帧,但很难检测出来是具体那个地方出错,我们的H7-TOOL要是能有这种功能可就太棒 ppcult 发表于 2023-1-3 10:20
这个讲解真是太有用了,后面希望可以把采样率这个知识点科普一下。
错误帧的检测这个非常重要,一般CAN盒 ...
H7-TOOL可以方便检测错误状态,有寄存器可以读取,后面TOOL升级把这些内容都展示出来。 cool,非常好,坐等后续更新。 请教下大佬,两个节点同时发送数据的话,ID大的数据在仲裁失败后,是这次数据就不发送了,还是等ID小的数据发完以后,继续发送本次数据 支持,可以跟着系统性的学习canopen eric2013 发表于 2023-1-3 10:06
这个也是个非常好的知识点,给大家分享下,之前好几个网友咨询是否可以不使用PHY芯片也能使 ...
实际项目中,大部分的问题都出在总线匹配电阻、采样点的位置不统一上。这些靠自己闭环玩发现不了的。个人理解,还是应该至少有两个独立CAN节点(可以是CAN分析仪或者H7-Tool这种)才能更好的体会CAN的特点。 ndx1986 发表于 2023-1-3 14:20
实际项目中,大部分的问题都出在总线匹配电阻、采样点的位置不统一上。这些靠自己闭环玩发现不了的。个人 ...
不影响,这也是一个知识点,非常有必要给大家介绍下。
第3期是专门的实战,肯定不会这么玩。学习这个东西,我觉得应该灵活些,可以了解有这么东西,但不一定要实际项目中使用。 ssimple 发表于 2023-1-3 13:41
请教下大佬,两个节点同时发送数据的话,ID大的数据在仲裁失败后,是这次数据就不发送了,还是等ID小的数据 ...
仲裁失败的节点,在总线空闲的时候会尝试重新传输。 还有CAN节点的负载能力问题,采样点问题,下期视频可以说说。 byccc 发表于 2023-1-3 18:25
还有CAN节点的负载能力问题,采样点问题,下期视频可以说说。
嗯,安排上。 接触CAN还是刚从事嵌入式开发的时候。当时FD刚出来,还没有广泛使用。现在已经快忘光了。借着这个机会重新学习一下。
多谢多谢:handshake watershade 发表于 2023-1-5 19:15
接触CAN还是刚从事嵌入式开发的时候。当时FD刚出来,还没有广泛使用。现在已经快忘光了。借着这个机会重新 ...
一起学习。 硬汉哥,请教一下,我目前遇到一个情况是,CAN发送会漏帧。目前是这样的,我的设备正常情况下有1000ms的心跳报文(目前2条)持续发送,也有200ms的其他报文在发(目前3条报文),进入其他菜单之后读取当前菜单的参数,以20ms的周期读取当前菜单中的参数2次。测试发现,这中间会有1个参数只读一次,会漏掉一次。周期性发送的报文的ID小,也就是优先级会高于菜单中读取参数的ID。正如您文章中讲的,我理解的两个ID同时启动发送,一个竞争失败,另一个发送成功之后,是不是竞争失败的这个会立即发呢?帮忙分析下呢 sunshine666 发表于 2023-1-6 17:01
硬汉哥,请教一下,我目前遇到一个情况是,CAN发送会漏帧。目前是这样的,我的设备正常情况下有1000ms的心 ...
使能重发没,可以使能下试试。 补充一个早年硬汉哥分享的CAN 中文资料。英文原版虽然好,但是看起来还是费劲,可以先看中文大致了解一下 忘了贴链接,补上https://www.armbbs.cn/forum.php?mod=viewthread&tid=14548&highlight=CAN%2B%D6%D0%CE%C4 STM32H7B0遇到一个奇怪的问题,CANFD帧数据速率5Mbps以下收发正常,6-12Mbps数据接收正常,发送进入busoff,感觉延时补偿没有用,开不开都一样。 siasevan 发表于 2023-1-12 21:07
STM32H7B0遇到一个奇怪的问题,CANFD帧数据速率5Mbps以下收发正常,6-12Mbps数据接收正常,发送进入busof ...
用那款CANFD PHY芯片 eric2013 发表于 2023-1-13 14:02
用那款CANFD PHY芯片
ADM3050最高支持12Mbps
siasevan 发表于 2023-1-13 14:08
ADM3050最高支持12Mbps
身下就是合理的参数配置了,后面我也测试下8Msps,看看是否可行。
另外考虑使用特别备注了CANFD SiC试试。
https://www.nxp.com/products/interfaces/can-transceivers/can-signal-improvement:CAN-FD eric2013 发表于 2023-1-14 09:32
身下就是合理的参数配置了,后面我也测试下8Msps,看看是否可行。
另外考虑使用特别备注了CANFD SiC试 ...
可以试试,可能发送延时补偿没有配置好,按理说也不应该,5Mbps发送接收非常稳定,不丢帧不报错误帧,12Mbps接收也正常,不丢帧,5Mbps以上发送会出现错误,唯一影响就是发送延时补偿。这个节后抓下波形看看。 硬汉哥以后出ethernet和ethercat的教程嘛
fcz 发表于 2023-2-4 16:00
硬汉哥以后出ethernet和ethercat的教程嘛
安排,工业协议栈一条龙,都搞下。 eric2013 发表于 2023-2-4 17:16
安排,工业协议栈一条龙,都搞下。
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶 太强了我汉哥!!!!!:lol:lol:lol:lol 下期预计什么时候出来呢?期待下期。 sunshine666 发表于 2023-4-4 11:22
下期预计什么时候出来呢?期待下期。
本周应该可以录制。 eric2013 发表于 2023-4-4 13:33
本周应该可以录制。
期待期待。硬汉哥。最近在整CAN的时候,发现掩码模式下,过滤的不是那么干净。这个是掩码模式的特征决定了,还是与算法有关系呢?这一块可以深入讲解下么。还有就是实际项目中,如何使用掩码模式比较稳妥。如下配置:设定7E0 ~ 7E9 。实测7EA~7EF没有过滤掉,也会进来。
uint16_t StdIdArray ={0x7e0,0x7e1,0x7e2,0x7e3,0x7e4,
0x7e5,0x7e6,0x7e7,0x7e8,0x7e9}; //定义一组标准CAN ID
uint16_t mask,num,tmp,i;
CAN_FilterStruct.FilterBank = 2; //使用过滤器2
CAN_FilterStruct.FilterMode = CAN_FILTERMODE_IDMASK; //配置为掩码模式
CAN_FilterStruct.FilterScale = CAN_FILTERSCALE_32BIT; //设置为32位宽
CAN_FilterStruct.FilterIdHigh =(StdIdArray<<5); //验证码可以设置为StdIdArray[]数组中任意一个,这里使用StdIdArray作为验证码
CAN_FilterStruct.FilterIdLow =0;
mask =0x7ff; //下面开始计算屏蔽码
num =sizeof(StdIdArray)/sizeof(StdIdArray);
for(i =0; i<num; i++) //屏蔽码位StdIdArray[]数组中所有成员的同或结果
{
tmp =StdIdArray ^ (~StdIdArray); //所有数组成员与第0个成员进行同或操作
mask &=tmp;
}
CAN_FilterStruct.FilterMaskIdHigh =(mask<<5);
CAN_FilterStruct.FilterMaskIdLow =0|0x02; //只接收数据帧
CAN_FilterStruct.FilterFIFOAssignment = 0;
CAN_FilterStruct.FilterActivation = ENABLE;
CAN_FilterStruct.FilterBank = 14;
sunshine666 发表于 2023-4-4 20:21
期待期待。硬汉哥。最近在整CAN的时候,发现掩码模式下,过滤的不是那么干净。这个是掩码模式的特征决 ...
你这个貌似还是F1,F4的标准库设置,早期的标准这个配置设置的太难用了,还需要用户去手动移位。
可以考虑使用CMSIS-Driver的CAN驱动,很好用了,直接调用函数填API即可,次之是HAL库的CAN驱动,配置方便了些。
本身这个滤波是比较简单的东西。标准库搞得配置麻烦。 eric2013 发表于 2023-4-4 13:33
本周应该可以录制。
坐等,一直想搞搞can 正需要搞这部分东西,对FIFO和Buffer挺蒙的。就等出下一期了,等的好久。{:34:} tengagic 发表于 2023-4-10 15:14
正需要搞这部分东西,对FIFO和Buffer挺蒙的。就等出下一期了,等的好久。
嗯,得加油了。 硬汉哥,请教个问题。CANFD测试时不使用transceiver的话,使用上面那个接二极管的电路也是可以的吗?
jingnij 发表于 2023-4-20 01:29
硬汉哥,请教个问题。CANFD测试时不使用transceiver的话,使用上面那个接二极管的电路也是可以的吗?
经典CAN是可以的,CANFD不知道行不行 仲裁段那里写错了图片里写的“禁止高7bit都是隐性0”
页:
[1]
2