6、錯誤幀
- 總線上所有設備都會監督總線的數據,一旦發現“位錯誤”或“填充錯誤”或“CRC錯誤”或“格式錯誤”或“應答錯誤” ,這些設備便會發出錯誤幀來破壞數據,同時終止當前的發送設備。
7、過載幀
- 當接收方收到大量數據而無法處理時,其可以發出過載幀,延緩發送方的數據發送,以平衡總線負載,避免數據丟失。
8、幀間隔
- 將數據幀和遙控幀與前面的幀分離開。
9、位填充
- 第一列數據,正常連續數據正常后面補位填充位。
- 第二列數據,位填充數據與后續數組組成連續5個相同電平后,需要隨后再補一個位填充電平。
- 第三列數據,數據若是有連續多個同樣電平信號,例如10個,此時需要每五個補一個位填充。
- 位填充適用于數據包(數據幀和遙控幀)中,總線空閑長時間出現的隱性邏輯1不適用。CAN總線連續出現11個隱性邏輯1時,被認為是空閑狀態。
10、波形實例
- 數據的開頭顯性邏輯0代表SOF起始幀,結尾處的七位連續隱性邏輯代表結束幀EOF。
- 報文ID是高位先行,是從高位到低位的,正常的讀取即可,所以讀取時需從左往右。
- 數據段是高位先行的,是高位到低位,正常的讀取即可,讀取時從左往右。
- 黃色部分是位填充,連續五個同樣的電平后的一位數據就是位填充,讀波形時需要忽略掉。如果連續超過五個的同樣電平說明,發生了錯誤幀或過載幀。
①標準數據幀,報文ID為0x555,數據長度1字節,數據內容為0xAA。
②標準數據幀,報文ID為0x666,數據長度2字節,數據內容為0x12,0x34。
③擴展數據幀,報文ID為0x0789ABCD,數據長度1字節,數據內容為0x56。
④標準遙控幀,報文ID為0x088,數據長度1字節,無數據內容。
11、接收方數據采樣
- CAN總線沒有時鐘線,總線上的所有設備通過約定波特率的方式確定每一個數據位的時長。
- 發送方以約定的位時長每隔固定時間輸出一個數據位。
- 接收方以約定的位時長每隔固定時間采樣總線的電平,輸入一個數據位。
- 理想狀態下,接收方能依次采樣到發送方發出的每個數據位,且采樣點位于數據位中心附近。
12、接收方采樣數據遇到的問題
①接收方以約定的位時長進行采樣,但是采樣點沒有對齊數據位中心附近。
②接收方剛開始采樣正確,但是時鐘有誤差,隨著誤差積累,采樣點逐漸偏離。
(12)位時序
- 為了靈活調整每個采樣點的位置,使采樣點對齊數據位中心附近,CAN總線對每一個數據位的時長進行了更細的劃分,分為同步段(SS)、傳播時間段(PTS)、相位緩沖段1(PBS1)和相位緩沖段2(PBS2),每個段又由若干個最小時間單位(Tq)構成。
13、硬同步
- 每個設備都有一個位時序計時周期,當某個設備(發送方)率先發送報文,其他所有設備(接收方)收到SOF的下降沿(顯性邏輯0)時,接收方會將自己的位時序計時周期撥到SS段的位置,與發送方的位時序計時周期保持同步
- 硬同步只在幀的第一個下降沿(SOF下降沿)有效
經過硬同步后,若發送方和接收方的時鐘沒有誤差,則后續所有數據位的采樣點必然都會對齊數據位中心附近
14、再同步
若發送方或接收方的時鐘有誤差,隨著誤差積累,數據位邊沿逐漸偏離SS段,則此時接收方根據再同步補償寬度值(SJW)通過加長PBS1段(接收方時鐘快,發送方時鐘慢),或縮短PBS2段(接收方時鐘慢,發送發時鐘快),以調整同步。SJW=1~4Tq。
- 再同步可以發生在第一個下降沿之后的每個數據位跳變邊沿。
15、波特率的計算
波特率:每秒傳輸多少個bit。
波特率 = 1 / 一個數據位的時長 = 1 / (TSS + TPTS + TPBS1 + TPBS2)
例如:
SS = 1Tq,PTS = 3Tq,PBS1 = 3Tq,PBS2 = 3Tq
Tq = 0.5us
波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps
16、多設備同時發送遇到的問題
CAN總線只有一對差分信號線,同一時間只能有一個設備操作總線發送數據,若多個設備同時有發送需求,該如何分配總線資源?
解決問題的思路:制定資源分配規則,依次滿足多個設備的發送需求,確保同一時間只有一個設備操作總線。
17、資源分配規則
①先占先得。
若當前已經有設備正在操作總線發送數據幀/遙控幀,則其他任何設備不能再同時發送數據幀/遙控幀(可以發送錯誤幀/過載幀破壞當前數據)。
任何設備檢測到連續11個隱性電平,即認為總線空閑,只有在總線空閑時,設備才能發送數據幀/遙控幀。
一旦有設備正在發送數據幀/遙控幀,總線就會變為活躍狀態,必然不會出現連續11個隱性電平,其他設備自然也不會破壞當前發送。
若總線活躍狀態其他設備有發送需求,則需要等待總線變為空閑,才能執行發送需求。
②非破壞性仲裁。
若多個設備的發送需求同時到來或因等待而同時到來,則CAN總線協議會根據ID號(仲裁段)(仲裁段的數據進行判斷==報文ID+RTR)進行非破壞性仲裁,ID號小的(優先級高)取到總線控制權,ID號大的(優先級低)仲裁失利后將轉入接收狀態,等待下一次總線空閑時再嘗試發送。
實現非破壞性仲裁需要兩個要求:
線與特性:總線上任何一個設備發送顯性電平0時,總線就會呈現顯性電平0狀態,只有當所有設備都發送隱性電平1時,總線才呈現隱性電平1狀態,即:0 & X & X = 0,1 & 1 & 1 = 1。
回讀機制:每個設備發出一個數據位后,都會讀回總線當前的電平狀態,以確認自己發出的電平是否被真實地發送出去了,根據線與特性,發出0讀回必然是0,發出1讀回不一定是1。
③非破壞性仲裁過程
數據位從前到后依次比較,出現差異且數據位為1的設備仲裁失利。標紅方格之前單元1和單元2的數返回值均相同,但在標紅方格處:單元1發出的是1卻返回的是0,所以就代表此時總線仲裁將數據的發送權轉交給了其他發送器。單元1需要繼續等待。單元2,每次發送數據位時,返回的數據電平值都和發送的一致,說明此時并未失去發送數據權力,即繼續下一位數據發送。
報文ID越小,所出現的電平1的頻率越小,即優先級越高(返回值)。
④數據幀和遙控幀的優先級
數據幀和遙控幀ID號一樣時,數據幀的優先級高于遙控幀。理由就在于發送完數據后,讀取總線上電平的反饋值并進行比較,數據幀設置的電平狀態是顯性邏輯0,而遙控幀設置的電平值設置的電平狀態是隱性邏輯1,返回值0的優先級高,即數據幀優先級高的原因。
⑤標準格式和擴展格式的優先級
標準格式11位ID號和擴展格式29位ID號的高11位一樣時,標準格式的優先級高于擴展格式(SRR必須始終為1,以保證此要求)
如果此時是相同報文ID的標準遙控幀和擴展數據幀進行仲裁時,因為擴展數據幀的報文ID比較多,且兩者前11+1位完全相同所以直到標準遙控幀結束仲裁段時都沒有分出優先級,但是此時擴展數據幀的仲裁段并沒有結束。第十三位,標準遙控幀的位是IDE數值為0表示標準格式。而擴展數據幀的第十三位是也是IDE數值為1表示擴展格式。直到此時才分出優先級,標準遙控幀勝出,取得仲裁權,繼續發送數據。
18、錯誤處理
錯誤共有5種: 位錯誤、填充錯誤、CRC錯誤、格式錯誤、應答錯誤。
主動錯誤狀態的設備正常參與通信并在檢測到錯誤時發出主動錯誤幀。
被動錯誤狀態的設備正常參與通信但檢測到錯誤時只能發出被動錯誤幀。
總線關閉狀態的設備不能參與通信。
每個設備內部管理一個TEC和REC,根據TEC和REC的值確定自己的狀態。
19、錯誤波形演示
①設備處于主動錯誤狀態,發送標準數據幀,正常傳輸。
ACK界定符+7位EOF結束幀+3位幀間隔==11位隱性邏輯1,表示總線處于空閑狀態。
②設備處于主動錯誤狀態,發送標準數據幀,檢測到ACK錯誤。在ACK應答幀結束后發出連續6位的顯性邏輯0,表示錯誤標志。
8位錯誤界定符+3位幀間隔==11位隱性邏輯1,表示總線處于空閑狀態。
③設備處于被動錯誤狀態,發送標準數據幀,檢測到ACK錯誤。
注意:本文章內容均來源于網絡,如有異議請聯系本作者