CAN匯流排通信之詳解數據幀(Data Frame)
前面的文章我們對CAN匯流排進行了概括性的介紹,講解了CAN匯流排在汽車通信中的應用,今天這篇文章深入探討CAN匯流排通信——介紹下CAN通信的數據幀(Data Frame)。
CAN匯流排以「幀(Frame)」形式進行通信。「數據幀(Data Frame)」,顧名思義,是用來傳輸數據的。CAN匯流排的數據幀有標準格式(Standard Format)和擴展格式(Extended Format)的區分,標準幀的格式如下圖:
數據幀可以分為七段:
1)幀起始(Start Of Frame-SOF): 1bit,顯性信號,表示數據幀(或遠程幀)的開始。
2)仲裁段(Arbitration Field):包括兩部分:標識符位(Identifier field-ID)和遠程發送請求位(Remote Transfer Request-RTR)。
標識符位,是一個功能性的地址(Functional address),CAN接收器通過標識符來過濾數據幀。標準格式的數據幀的標識符(CAN-ID)長度為11位(11 bits),ID10~ID0,ID10為最高權重位(MSB),ID0為最低權重位(LSB),按照ID10~ID0的順序進行傳輸。CAN協議還規定:前7位最高權重位(ID10~ID4)不能都為「隱性」信號。
遠程發送請求位,簡稱「RTR」,1 bit。雖然這個位的名字很長,但它的功能很簡單,用於區分該幀是數據幀還是遠程幀:「顯性信號(0)」代表數據幀(Data Frame);「隱性信號(1)」代表遠程幀(Remote Frame)。
3)控制段(Control Field):包括6個位(6 bits),分別是擴展標識符位(Identifier Extension bit-IDE,1 bit);保留位0(Reseved bit0-r0,1 bit);數據長度編碼位(Data Length Code-DLC,4 bits),如下圖:
擴展標識符位(IDE),用來表示該幀是標準格式還是擴展格式;
保留位0(r0),保留,以後使用;
數據長度編碼位(DLC),4位(4 bits),包括DLC3~DLC0,表示該幀實際發送的數據的長度(以位元組為單位);DLC的編碼規則如下:
其中「d」表示顯性信號;「r」表示隱性信號;
4) 數據段(Data Field):發送數據的內容,最多8個位元組。數據段與DLC的對應關係如下圖:
5)循環校驗段(CRC Field):包括循環校驗序列(CRC Sequence)和界定符(Delimiter,DEL):
循環校驗序列(CRC Sequence),15 bits,用於校驗傳輸是否正確;
界定符(DEL),1 bit,隱性信號,表示循環校驗序列的結束;
6) 確認段(ACK Field):包括確認位(ACK SLOT)和界定符(Delimiter,DEL),表示確認是否正常接收。
確認位(ACK),1 bit,節點收到正確的CRC序列時,發送端的ACK位被置位;
界定符(DEL),1 bit,隱性信號;
7) 幀結束(End of Frame-EOF):7位(7 bits),隱性信號,表示幀的結束。
以上是標準格式的數據幀,下面來看看擴展格式與標準格式有哪些不同,先看看下面這張圖:
仲裁段與控制段有所不同:
1)仲裁段(Arbitration Field):擴展格式的仲裁段包括五個部分:
基本標識符位(Base identifier-Base ID),11 bits,與標準格式的標識符相同;
替代遠程請求位(Substitute Remote Request Bit,SRR),1 bit,隱性信號;
擴展位(Identifier Extension bit,IDE),1 bit,標識擴展幀還是標準幀;
擴展標識ID位(Extended Identifier, Extended ID),18 bits,存放擴展標識ID;
遠程發送請求位(Remote Transmission Request,RTR),1 bit,數據幀中為顯性信號,遠程幀中為隱性信號;
2)控制段(Control Field):6 bits,與標準幀不同的是:用保留1(r1)取代了標準幀的IDE,r0和DLC是一樣的;也就是說,擴展幀有兩個保留位r1 和r0,這兩個保留位均需要發送顯性信號;
好了,關於CAN匯流排通信的數據幀就先介紹到這裡了,相關參考文章:
為什麼汽車電控單元間會選擇使用CAN匯流排進行通信?
官網方正智芯(founder chip)提供本文PDF版本下載:
推薦閱讀: