前篇內(nèi)容:
CAN和CANFD協(xié)議簡(jiǎn)介(上)
2. CAN協(xié)議
2.2 協(xié)議層
前文講述了CAN的物理層標(biāo)準(zhǔn),約定了電氣特性,以下介紹的協(xié)議層則規(guī)定了通訊邏輯。
2.2.1 幀的種類
通信是通過(guò)以下5種類型的幀進(jìn)行的。
? 數(shù)據(jù)幀
? 遙控幀
? 錯(cuò)誤幀
? 過(guò)載幀
? 幀間隔
在這些幀當(dāng)中,數(shù)據(jù)幀和遙控幀由用戶設(shè)定,其他的幀由CAN的硬件部分完成。
另外,數(shù)據(jù)幀和遙控幀有標(biāo)準(zhǔn)格式和擴(kuò)展格式兩種格式。標(biāo)準(zhǔn)格式有11位的ID,擴(kuò)展格式具有29位ID。
各種幀的用途如下表所示。
2.2.2 數(shù)據(jù)幀
數(shù)據(jù)幀把消息從發(fā)送單元傳到接收單元,是用戶使用的最基本的幀。數(shù)據(jù)幀由7個(gè)段構(gòu)成。
(1) 幀起始:表示數(shù)據(jù)幀開始。
(2) 仲裁段:表示該幀優(yōu)先級(jí)的段。
(3) 控制段:表示數(shù)據(jù)的字節(jié)數(shù)及保留位。
(4) 數(shù)據(jù)段:數(shù)據(jù)本身,可傳送0~8個(gè)字節(jié)。
(5) CRC段:檢查幀的傳送錯(cuò)誤的段。
(6) ACK段:正常接收確認(rèn)段。
(7) 幀結(jié)束:表示數(shù)據(jù)幀結(jié)束。
2.2.3 遙控幀
接收單元向發(fā)送單元請(qǐng)求消息所用的幀。遙控幀由6 個(gè)段組成,也可以說(shuō)是沒(méi)有數(shù)據(jù)段的數(shù)據(jù)幀。
(1) 幀起始(SOF):表示幀的開始。
(2) 仲裁段:表示該幀優(yōu)先級(jí)的段。請(qǐng)求具有同樣ID的數(shù)據(jù)幀。
(3) 控制段:表示所請(qǐng)求數(shù)據(jù)的字節(jié)數(shù)及保留位。
(4) CRC段:檢查幀的傳送錯(cuò)誤的段。
(5) ACK段:正常接收確認(rèn)段。
(6) 幀結(jié)束:表示遙控幀結(jié)束。
關(guān)于遙控幀和數(shù)據(jù)幀:
? 數(shù)據(jù)幀和遙控幀有何不同
遙控幀沒(méi)有數(shù)據(jù)段,仲裁段的RTR位為隱性電平。
沒(méi)有數(shù)據(jù)段的數(shù)據(jù)幀和遙控幀可通過(guò)RTR位區(qū)別開來(lái)。
? 遙控幀沒(méi)有數(shù)據(jù)段,數(shù)據(jù)長(zhǎng)度碼該如何表示?
遙控幀的數(shù)據(jù)長(zhǎng)度碼以所請(qǐng)求數(shù)據(jù)幀的數(shù)據(jù)長(zhǎng)度碼表示。
? 沒(méi)有數(shù)據(jù)段的數(shù)據(jù)幀有何用途?
可用于各單元的定期連接確認(rèn)/應(yīng)答、或仲裁段本身帶有實(shí)質(zhì)性信息的情況下。
2.2.4 錯(cuò)誤幀
在收發(fā)信中發(fā)現(xiàn)錯(cuò)誤時(shí)用于通知錯(cuò)誤的幀。錯(cuò)誤幀由錯(cuò)誤標(biāo)志和錯(cuò)誤間隔符構(gòu)成,錯(cuò)誤幀的發(fā)送是由CAN的硬件部分來(lái)完成的。
(1) 錯(cuò)誤標(biāo)志:錯(cuò)誤標(biāo)志包括有效錯(cuò)誤標(biāo)志和無(wú)效錯(cuò)誤標(biāo)志兩種。
? 有效錯(cuò)誤標(biāo)志:6位顯性電平。
? 無(wú)效錯(cuò)誤標(biāo)志:6位隱性電平。
(2) 錯(cuò)誤間隔符:錯(cuò)誤間隔符由8位隱性電平構(gòu)成。
注:
1. 有效錯(cuò)誤標(biāo)志:處于錯(cuò)誤有效態(tài)的單元檢出錯(cuò)誤時(shí)傳送的錯(cuò)誤標(biāo)志。
2. 無(wú)效錯(cuò)誤標(biāo)志:處于錯(cuò)誤無(wú)效態(tài)的單元檢出錯(cuò)誤時(shí)傳送的錯(cuò)誤標(biāo)志。
3. 錯(cuò)誤標(biāo)志的重合:由連接到總線上的各單元的錯(cuò)誤檢出時(shí)間不同,錯(cuò)誤標(biāo)志會(huì)發(fā)生重合,最長(zhǎng)可延續(xù)到12位。
2.2.5 過(guò)載幀
過(guò)載幀是用于接收單元通知其尚未完成準(zhǔn)備所用的幀。過(guò)載幀由過(guò)載標(biāo)志和過(guò)載間隔符構(gòu)成。
(1) 過(guò)載標(biāo)志:6位顯性電平。過(guò)載標(biāo)志的構(gòu)成與有效錯(cuò)誤標(biāo)志的構(gòu)成相同。
(2) 過(guò)載間隔符:8個(gè)隱性位。過(guò)載間隔符的構(gòu)成與錯(cuò)誤間隔符的構(gòu)成相同。
注
1. 過(guò)載幀的重合:與錯(cuò)誤標(biāo)志一樣依據(jù)發(fā)生時(shí)序不同過(guò)載標(biāo)志也會(huì)發(fā)生重合,最長(zhǎng)可延遲到12位。
2.2.6 幀間隔
幀間隔用于分隔數(shù)據(jù)幀或遙控幀。數(shù)據(jù)幀或遙控幀前插入幀間隔可將本幀與前面發(fā)送的任何幀(數(shù)據(jù)幀、遙控幀、錯(cuò)誤幀、過(guò)載幀)分開。但是,過(guò)載幀和錯(cuò)誤幀前不能插入幀間隔。
(1) 間隔:3位隱性電平。在“間隔”期檢測(cè)到顯性電平時(shí),一定要發(fā)送過(guò)載幀。然而,在間隔期的第3位出現(xiàn)的顯性電平被認(rèn)為是SOF,此時(shí)不發(fā)送過(guò)載幀。
(2) 總線空閑:隱性電平,無(wú)長(zhǎng)度限制(0位亦可)。本狀態(tài)為總線處于空閑中,要發(fā)送的單元可開始發(fā)送消息。
(3) 延遲傳送(發(fā)送暫時(shí)停止):8個(gè)隱性電平。處于錯(cuò)誤無(wú)效態(tài)的單元在發(fā)送完一個(gè)消息后的幀間隔中必須包含的段。
2.2.7 優(yōu)先級(jí)的仲裁
在總線空閑態(tài),最先開始發(fā)送消息的單元獲得通信權(quán)。
多個(gè)單元同時(shí)開始傳送時(shí),各發(fā)送單元從仲裁段的第一位開始進(jìn)行仲裁。位電平第一次出現(xiàn)不同而且位電平為顯性的單元獲得通信權(quán)發(fā)送。仲裁失敗的單元在下一個(gè)位開始進(jìn)入接收狀態(tài)。
仲裁的過(guò)程如下圖所示:
(1) 數(shù)據(jù)幀和遙控幀的優(yōu)先級(jí)
具有同樣ID的數(shù)據(jù)幀和遙控幀在總線上競(jìng)爭(zhēng)時(shí),仲裁段的最后一位(RTR)為顯性電平的數(shù)據(jù)幀具有優(yōu)先權(quán),可繼續(xù)通信。
(2) 標(biāo)準(zhǔn)格式和擴(kuò)展格式的優(yōu)先級(jí)
具有相同基本ID的標(biāo)準(zhǔn)格式與擴(kuò)展格式的數(shù)據(jù)幀或遙控幀在總線上競(jìng)爭(zhēng)時(shí),由于標(biāo)準(zhǔn)格式的RTR位為顯性電平,具有更高的優(yōu)先權(quán),可進(jìn)行發(fā)送。
2.2.8 錯(cuò)誤的種類
錯(cuò)誤共有5種。有時(shí)數(shù)種錯(cuò)誤同時(shí)發(fā)生。
? 位錯(cuò)誤
? 填充錯(cuò)誤
? CRC錯(cuò)誤
? 格式錯(cuò)誤
? ACK錯(cuò)誤
錯(cuò)誤的種類、錯(cuò)誤的內(nèi)容、出錯(cuò)的幀和檢出錯(cuò)誤的單元如下表所示。
2.2.9 位時(shí)序
一個(gè)位可分為4段。
? 同步段(SS: Synchronization Segment)
? 傳播時(shí)間段(PTS: Propagation Time Segment)
? 相位緩沖段1(PBS1: Phase Buffer Segment 1)
? 相位緩沖段2(PBS2: Phase Buffer Segment 2)
這些段由最小時(shí)間單位Tq(Time Quantum)構(gòu)成。
消息中的1位被分為4個(gè)段,每個(gè)段又由若干個(gè)Tq構(gòu)成,這稱為位時(shí)序。
消息中的1位由多少個(gè)Tq構(gòu)成、每個(gè)段又由多少個(gè)Tq構(gòu)成、這些是可以任意設(shè)定的。通過(guò)設(shè)定位時(shí)序,總線上數(shù)個(gè)單元可以以相同的時(shí)序?qū)ο⒉蓸?,可以設(shè)定采樣點(diǎn)。采樣點(diǎn)設(shè)置在PBS1的結(jié)束處,以此時(shí)檢測(cè)到的總線上的電平值作為該位的電平值。
各段的用途和Tq數(shù)如下表所示。
1位的構(gòu)成如下圖所示。
2.2.10 取得同步的方法
CAN 協(xié)議的通信方法為非歸零NRZ(Non-Return to Zero)方式。每個(gè)位上沒(méi)有開始或終了的同步信號(hào)。發(fā)送單元以與位時(shí)序同步的方式開始發(fā)送數(shù)據(jù)。接收單元根據(jù)總線上電平的變化進(jìn)行同步接收信號(hào)。
但是,發(fā)送單元和接收單元存在的時(shí)鐘頻率誤差及傳送路徑上的(電纜、驅(qū)動(dòng)器等)相位延遲會(huì)引起同步偏差。因此接收單元通過(guò)強(qiáng)制同步、再同步的方法調(diào)整時(shí)序進(jìn)行接收。
2.2.11 強(qiáng)制同步
接收單元在總線空閑狀態(tài)檢出幀起始時(shí)進(jìn)行的同步調(diào)整。檢出從隱性電平到顯性電平的邊沿時(shí)被認(rèn)為是SS段,與SJW無(wú)關(guān)。
2.2.12 再同步
在接收過(guò)程中根據(jù)總線上的電平變化進(jìn)行的同步。
檢出邊沿(總線上的電平跳變)時(shí),對(duì)照誤差值并且根據(jù)SJW值延長(zhǎng)PBS1段,或縮短PBS2段,以配合同步。但如果發(fā)生了超出SJW值的誤差,按照SJW值作修正。
2.2.13 同步規(guī)則
強(qiáng)制同步和再同步遵從如下規(guī)則。
(1) 1 位中只進(jìn)行一次同步調(diào)整(兩次采樣點(diǎn)間)。
(2) 只有當(dāng)邊沿后的總線電平與邊沿前一個(gè)總線采樣值不同時(shí),該沿才能用于同步。
(3) 一旦檢測(cè)到隱性電平到顯性電平的邊沿,如果滿足條件(1)、(2)須進(jìn)行同步。
(4) 幀間隔(“間隔”的第1位除去)中檢測(cè)到隱性電平到顯性電平的邊沿時(shí),須進(jìn)行強(qiáng)制同步。
(5) 其他所有的隱性電平到顯性電平的邊沿,須進(jìn)行再同步。
(6) 發(fā)送單元觀測(cè)到自身輸出的顯性電平有延遲時(shí)不進(jìn)行再同步。
2.3 CANFD框架
CAN FD可以理解成CAN協(xié)議的升級(jí)版,只升級(jí)了協(xié)議,物理層未改變。
CAN FD協(xié)議引入了經(jīng)過(guò)調(diào)整的CAN數(shù)據(jù)幀,以實(shí)現(xiàn)額外的數(shù)據(jù)字節(jié)和靈活的比特率。
下面我們比較一個(gè)11位的傳統(tǒng)CAN幀與一個(gè)11位的CAN FD幀(同時(shí)也支持29位):
下面我們一步一步地討論這些差異:
RTR與r1(RRS):傳統(tǒng)CAN中使用了遠(yuǎn)程傳輸請(qǐng)求Remote Transmission Request(RTR)來(lái)識(shí)別數(shù)據(jù)幀和相應(yīng)的遠(yuǎn)程幀。但在CAN FD中,不支持遠(yuǎn)程幀,遠(yuǎn)程請(qǐng)求替換(r1)始終是顯性(0)。
在CAN-FD幀中,在控制字段中添加了三個(gè)新位(FDF、BRS、ESI位):
? 擴(kuò)展數(shù)據(jù)長(zhǎng)度 Extended Data Length (EDL):隱性表示幀為CAN-FD,否則該位為顯性(稱為R0)在CAN 2.0幀中。在傳統(tǒng)CAN格式的幀中,所對(duì)應(yīng)傳輸?shù)氖俏籖0而不是EDL。
? 比特率切換 Bit Rate Switch(BRS):指示是否啟用兩個(gè)比特率。如果是隱性,則比特率從仲裁階段的標(biāo)準(zhǔn)比特率切換到數(shù)據(jù)階段的預(yù)配置交替比特率。如果是顯性,則不切換比特率。
? 錯(cuò)誤狀態(tài)指示器 Error State Indicator(ESI):表示發(fā)送節(jié)點(diǎn)狀態(tài),指示節(jié)點(diǎn)處于錯(cuò)誤活動(dòng)模式還是錯(cuò)誤被動(dòng)模式。
DLC:像在傳統(tǒng)CAN中一樣,CAN FD DLC是4位,表示幀中數(shù)據(jù)字節(jié)的數(shù)量。下表顯示了這兩種協(xié)議如何始終使用多達(dá)8個(gè)數(shù)據(jù)字節(jié)的DLC。為了維持4位DLC,CAN FD使用從9到15的其余7個(gè)值來(lái)表示所使用的數(shù)據(jù)字節(jié)數(shù)(12、16、20、24、32、48、64)。
CRC:傳統(tǒng)CAN中的循環(huán)冗余校驗(yàn)(CRC)為15位,而在CAN FD中為17位(最多16個(gè)數(shù)據(jù)字節(jié))或21位(20-64個(gè)數(shù)據(jù)字節(jié))。在傳統(tǒng)CAN中,CRC中可以包含0到3個(gè)填充位,而在CAN FD中,總是有四個(gè)固定填充位以提高通信可靠性。
-
mcu
+關(guān)注
關(guān)注
146文章
17316瀏覽量
352520 -
CAN
+關(guān)注
關(guān)注
57文章
2766瀏覽量
464310 -
CANFD
+關(guān)注
關(guān)注
0文章
59瀏覽量
5012
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論