CAN总线工作原理

来源:互联网 发布:程序员职业学历要求 编辑:程序博客网 时间:2024/05/22 01:45

    CAN是控制器局域网络(Controller Area Network, CAN)的简称。CAN总线有两条信号线构成,分别是CANL和CANH。相比于RS485总线构成的网络,CAN总线构成的网络更有优势。
CAN的报文格式
    在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。
    在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位 (RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。
    控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。
    应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。
    报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

   

如上图所示,帧格式包括扩展帧和标准帧两种。帧类型包括数据帧和远程帧。数据部分最大长度共8个字节。在编程时,如下的数据结构可以用来描述一个CAN消息:

typedef struct {    uint32_t id;            /**< 29 bit identifier, it depend on "format" value                                 - if format = STD_ID_FORMAT, id should be 11 bit identifier                                 - if format = EXT_ID_FORMAT, id should be 29 bit identifier                             */    uint8_t dataA[4];       /**< Data field A */    uint8_t dataB[4];       /**< Data field B */    uint8_t len;            /**< Length of data field in bytes, should be:                                 - 0000b-0111b: 0-7 bytes                                 - 1xxxb: 8 bytes                            */    uint8_t format;         /**< Identifier Format, should be:                                 - STD_ID_FORMAT: Standard ID - 11 bit format                                 - EXT_ID_FORMAT: Extended ID - 29 bit format                            */    uint8_t type;           /**< Remote Frame transmission, should be:                                 - DATA_FRAME: the number of data bytes called out by the DLC                                 field are send from the CANxTDA and CANxTDB registers                                 - REMOTE_FRAME: Remote Frame is sent                            */} CAN_MSG_Type;


另外,还有如下图所示的参数可以进行设置。如CAN总线的波特率,工作模式,过滤器里的内容等。














0 0
原创粉丝点击