听别人说起CAN通讯协议的时候总说到Intel格式和motorola格式的时候。Intel格式如何,Motorola格式又如何?觉得很有必要搞懂这些知识,也看了相关资料,可直到今天还没明白。真是聪明人都是相似的,笨的人则各有各的难处吗?看来我非下水磨工夫不能搞明白了!先讨论最基本的概念吧。
1,CAN先接受到的是低字节还是高字节?
一个CAN数据包最多有64bit,分成8byte。从第1个bit开始直到第64个bit,从第一个byte开始直到第8个byte。往数据寄存器里写的时候是以字节为单位的。先发送ID然后依次发送数据。在数据链路层还谈不上什么高,低字节。只有bit流,发送端先发送什么,接收端就先接收到什么。
2,intel格式,motorola格式
就一个不大于8bit且落在同一个字节内的数据而言,从lsb开始到msb依次发送,这是明确的,别无选择。但是当一个数据的bit位落在不同的byte中,就不一定了。有两点值得疑问:
(1),lsb和msb,谁先被发送?
这是关于字节序的问题。intel格式让数据的较低位的lsb先发送,较高位的msb后发送。motorola格式让较高位的msb先发送,较低位的lsb后发送。
(2),全部bit是一股脑儿一起发送的,还是先发送部分bit,中间又去发送了其他数据的bit,最后再发送其余的bit?
这是关于bit序的问题。bit是向高字节对齐,还是向低字节对齐。