CAN接口的介绍:
CAN总线可分为:高速CAN,低速CAN,单线CAN。
在速度方面高速CAN的传输速率在125K~~1Mbps。低速CAN的速率在125Kbps以下,低速CAN具更好的容错性。单线CAN波特率在33K~~83Kbps.
当双线CAN的两个导线处于静止状态,两个电平是一样的,大约5伏,这个静电平状态就是隐形状态,也称隐性电平,也就是没有任何干扰的时候的状态称为隐性状态。当有信号修改时,CAN_High线上的电压值变高了,一般来说会升高至少1v;而CAN_Low线上的电压值会降低一个同样值,也是1v。那么此时,CAN_High就是5v+1v=5v,它就处于激活状态了。而CAN_Low降为5v-1v=5v。
空闲时
有效时
睡眠时
唤醒时
CAN工作原理
当CAN总线上的某一个节点或站发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。
每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的,当几个站同时竞争总线读取时,这种配置十分重要。
CAN的报文格式有两种,不同之处其实就是识别符长度不同,具有11位识别符的帧称为标准帧,而还有29位识别符的帧为扩展帧,CAN报文有以下4个不同的帧类型。分别是:
数据帧:发送帧的节点设备,发送这个帧的目的是为了将某些消息传递给其他节点设备
远程帧:发送帧的节点设备,发送这个帧的目的是呼叫其他节点设备发送数据
错误帧:因为通信中,因为各种因素干扰太多了,总会有可能产生错误,那么出现错误怎么办?发送帧的节点设备,发送这个帧的目的是发现总线上的帧有错误,提醒总线上的其他设备。
过载帧:因为通信时,总是两方或者多方通信,发送数据的那一方不知道接收的那一方准备好了没有,过载帧的作用就是接收方告诉发送方,接收方还没有准备好接收下一帧的工作,请缓一会。
间隔帧:帧间隔就是上述四种帧的中间,都要有这个帧间隔,去隔离。以达到容易每个帧的类型。如果每个帧都直接连接在一起,变成一坨一坨的数据堆,接收方会非常难解读的。所以帧间隔好比我们文字中的标点符号中的句号一样,起到让通信密文更加易懂。
/***structcan_frame-basicCANframestructure*@can_id:CANIDoftheframeandCAN_*_FLAGflags,seecanid_tdefinition*@can_dlc:framepayloadlengthinbyte(0..akadatalengthcode*theDLCfieldfromISO11898-1Chapter3hasa1:1*mappingofthe'datalengthcode'totherealpayloadlength*@data:CANframepayload(upto8byt*/structcan_frame{canid_tcan_id;/*32bitCAN_ID+EFF/RTR/ERRflags*/__u8can_dlc;/*framepayloadlengthinbyte(0..CAN_MAX_DLE*/__u8data[CAN_MAX_DLEN]__attribute__((align;};
can_id定义如下所示,是一个无符号的32位整形数
can_id数据组织形式如下
/**ControllerAreaNetworkIdentifierstructure**bit0-28:CANidentifier(11/29bit)*bit29:errormessageframeflag(0=dataframe,1=errormessag*bit30:remotetransmissionrequestflag(1=rtrfram*bit31:frameformatflag(0=standard11bit,1=extended29bit)*/
0-28位为标识符,如果是扩展帧,则高11位为标准ID
位标识是数据帧还是错误消息
0位说明是否是远程帧
1位说明是标准帧还是扩展帧。
以下是在处理can_frame时用到的掩码和标识符:
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点