搜索
bottom↓
回复: 5

CAN总线疑问,相信也是初学的疑问,求高手,同问者顶!

[复制链接]

出0入0汤圆

发表于 2012-7-27 17:28:57 | 显示全部楼层 |阅读模式
最近接触到CAN总线,看了好久了,云里雾里,资料翻了好多,都讲的很抽象,没有一个能用通俗的语言把CAN通信的原理及实现方法讲透的,也许这个协议只适合研究人员进行学术研究。
     但现在的项目又必须搞清楚这个该死的协议怎么工作的,噢-卖糕的!!
我仅代表初学者,向前辈,大侠们,请教如下问题:

1,这个CAN总线共两根线,两根线都是数据线,没有同步信号线,怎么确定“位”?也就是说“高”多久认为是1,超出多少ns认为是11了?如果有很长时间的一个高信号,怎样区分是1和11或111或1111或11111???
2,这个该死的协议用了“报文”这个词,报文里又有 “起始位”+“标志符11或29位”+“数据位”+“效验”,这个“标识符”好像是决定了“谁有发言权”,那挂在总线上的每个分机这个标识符该是多少?如果某个分机A总是发00000000000,哪这个分机A总有对总线的控制权,那别的分机何时才能有“发言权”,我的意思是,各个分机的“标示符”是如何生成的?随机的?还是定好的?还是跟要说的话有关系?如果某个分机总是“平民”,进不来“人*大”,是不是总也说不上话?哪他的“言论”不久无法表达了吗???
3,有的CPU芯片上有两组CAN总线,例如:STM32F107V和英飞凌XC886等,一组都可以并联100多个节点(分机),用得着两组吗?真要用得到两组来交换200多分机的数据,哪数据量也很不小啦,还是说两组CAN总线另有他用??

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-7-28 08:17:32 | 显示全部楼层
看的人挺多,没人解答一下,万能的阿莫论坛啊,指引我吧

出0入0汤圆

发表于 2012-7-28 09:10:12 | 显示全部楼层
1,bit timing (baudrate)决定了采样点,500k与125k的采样点就不一样,
2,确实如你所述,所以你就要保证优先级最高的不能一直占着位子说话,要亲民,主动给机会给老百姓
3,比如两条总线的baudrate不一样,就可以用得上了。还有就是滤波方便
貌似这些跟硬件关系比较大,软件关心ID号,滤波,协议。

出0入0汤圆

发表于 2012-7-28 09:58:07 | 显示全部楼层
其实楼上已经回答了。1:同一个CAN网络所有节点的通信速度必须一样。这个是由软件设计者事先确定好了的,有相关的寄存器需要你去设置。(位时间特性)。2:我觉得不能简单地说每个分机的标示符是多少。标识符主要用来参与过滤,要深刻理解“过滤”的意义。这是理解CAN是怎样有选择性地接收数据的关键所在。

出0入0汤圆

 楼主| 发表于 2012-7-28 10:56:42 | 显示全部楼层
感谢楼上两位大师的解释!

可以这样理解:
1,位时间的问题是波特率设置的问题,一般在带有CAN总线功能的CPU配置时设置一下就好了。?
2,标识符,这11位(或29位)ID里设计者自由发挥,这里可以包含消息的紧急程度,也可以包含分站的“身份识别”。

另外:高优先级传完后,低优先级接着传,还是总线空闲后重新仲裁申请?
      一个高优先级传完数据后,有需要应答的申请占线,还有上次被仲裁挤掉的低优先级的也要申请占线,那岂不是很忙啊?
     如果一个接收分站在接收了1个(或几个)其它分站上传的数据,没来得及响应,又有新数据传上来,接收“邮箱”(有的芯片手册里这么叫)满了,溢出了,造成丢数据,怎么办?

出0入0汤圆

发表于 2012-7-28 11:24:21 | 显示全部楼层
1:是的,波特率是在寄存器里面设置的。2:是的 ,标识符也是设计者根据自己的需要自由发挥的。当然也可以当做地址用:比如网络中有15个节点,那么我们可以用其中4位标识符来代表地址,具体使用11(29)中的哪4位呢?这个也是由你自己决定的 。
------------------------------------------------------------------------------------------------------------------------------------------
高优先级传完后,低优先级接着传,还是总线空闲后重新仲裁申请?

如果使能了重发机制,一旦空闲,会自动重发。

一个高优先级传完数据后,有需要应答的申请占线,还有上次被仲裁挤掉的低优先级的也要申请占线,那岂不是很忙啊?

一次正常的完整的传输,包括应答。也就是说应答之后,才算空闲。

如果一个接收分站在接收了1个(或几个)其它分站上传的数据,没来得及响应,又有新数据传上来,接收“邮箱”(有的芯片手册里这么叫)满了,溢出了,造成丢数据,怎么办?

一般的CAN接收缓冲都可以连续接收几帧的。一旦有一帧数据,就会申请中断。你的中断服务程序应该立即转移数据,然后释放这一帧的接收缓冲。如此反复。。。。只要你中断处理及时,永远都不会溢出啦。



回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表