CAN總線(xiàn)工作原理
CAN的報文格式
在總線(xiàn)中傳送的報文,每幀由7部分組成。CAN協(xié)議支持兩種報文格式,其唯一的不同是標識符(ID)長(cháng)度不同,標準格式為11位,擴展格式為29位。
在標準格式中,報文的起始位稱(chēng)為幀起始(SOF),然后是由11位標識符和遠程發(fā)送請求位 (RTR)組成的仲裁場(chǎng)。RTR位標明是數據幀還是請求幀,在請求幀中沒(méi)有數據字節。
控制場(chǎng)包括標識符擴展位(IDE),指出是標準格式還是擴展格式。它還包括一個(gè)保留位 (ro),為將來(lái)擴展使用。它的最后四個(gè)位用來(lái)指明數據場(chǎng)中數據的長(cháng)度(DLC)。數據場(chǎng)范圍為0~8個(gè)字節,其后有一個(gè)檢測數據錯誤的循環(huán)冗余檢查(CRC)。
應答場(chǎng)(ACK)包括應答位和應答分隔符。發(fā)送站發(fā)送的這兩位均為隱性電平(邏輯1),這時(shí)正確接收報文的接收站發(fā)送主控電平(邏輯0)覆蓋它。用這種方法,發(fā)送站可以保證網(wǎng)絡(luò )中至少有一個(gè)站能正確接收到報文。
報文的尾部由幀結束標出。在相鄰的兩條報文間有一很短的間隔位,如果這時(shí)沒(méi)有站進(jìn)行總線(xiàn)存取,總線(xiàn)將處于空閑狀態(tài)。
如上圖所示,幀格式包括擴展幀和標準幀兩種。幀類(lèi)型包括數據幀和遠程幀。數據部分最大長(cháng)度共8個(gè)字節。在編程時(shí),如下的數據結構可以用來(lái)描述一個(gè)CAN消息:
- typedefstruct
- {
- uint32_tid;/**<29bitidentifier,itdependon"format"value
- -ifformat=STD_ID_FORMAT,idshouldbe11bitidentifier
- -ifformat=EXT_ID_FORMAT,idshouldbe29bitidentifier
- */
- uint8_tdataA[4];/**
- uint8_tdataB[4];/**
- uint8_tlen;/**
- -0000b-0111b:0-7bytes
- -1xxxb:8bytes
- */
- uint8_tformat;/**
- -STD_ID_FORMAT:StandardID-11bitformat
- -EXT_ID_FORMAT:ExtendedID-29bitformat
- */
- uint8_ttype;/**
ission,shouldbe: - -DATA_FRAME:thenumberofdatabytescalledoutbytheDLC
- fieldaresendfromtheCANxTDAandCANxTDBregisters
- -REMOTE_FRAME:RemoteFrameissent
- */
- }CAN_MSG_Type;
- uint8_tdataB[4];/**
另外,還有如下圖所示的參數可以進(jìn)行設置。如CAN總線(xiàn)的波特率,工作模式,過(guò)濾器里的內容等。
評論