CAN总线,没有同步信号,收发双方如何准确交换数据?
- UID
- 826437
|
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总线另有他用?? |
|
|
|
|
|
- UID
- 826524
- 性别
- 男
|
1,如楼上hwm大师所说,can是靠双方约定好的波特率来确定位的
2,标识符是报文的id,一个模块可以有多个报文,id是由用户根据实际应用规定的,在同一时刻,高优先级报文优先发送,发送完后低优先级就可以发送了,所以说优先级低的报文还是可以发出去的,低优先级的报文有可能出现较大延迟
3,一个系统有2个CAN网络的话,一方面是由于系统包括2个完全不同的子系统,比如汽车中的PCAN,和BCAN,前者挂的是与安全息息相关的动力模块,双CAN可以实现安全隔离,使整个系统更加可靠,另一方面,can总线在不同的波特率下支持的模块数量是有限的。 |
|
|
|
|
|
- UID
- 826524
- 性别
- 男
|
关于标示符: 1,这个里边可以包含分站的“身份识别”成份,也就是系统设计者自定义的,可以这样理解吧。 2,两个不同优先级的同时申请发送时,高优先级的先传,之后多久低优先级的可以传?好像协议里只是讲到了仲裁,没看到“高优先”传完“低优先”接着传的这部分内容,如果10个子站同时申请仲裁,那就是由高到低10个分站依次传完,总线空闲下来后再传回应信息,哪子站的接收缓冲溢出了丢数据了怎么办? |
|
|
|
|
|