codeyear 发表于 2012-7-27 17:28:57

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

最近接触到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总线另有他用??

codeyear 发表于 2012-7-28 08:17:32

看的人挺多,没人解答一下,万能的阿莫论坛啊,指引我吧

Destiny 发表于 2012-7-28 09:10:12

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

avrstm32 发表于 2012-7-28 09:58:07

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

codeyear 发表于 2012-7-28 10:56:42

感谢楼上两位大师的解释!

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

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

avrstm32 发表于 2012-7-28 11:24:21

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

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

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

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

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

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



页: [1]
查看完整版本: CAN总线疑问,相信也是初学的疑问,求高手,同问者顶!