Intel格式與Motorola格式的區別
文章出處:http://blog.csdn.net/ppdyhappy/article/details/52700464
Intel低位元組在前
Motorola高位元組在前
在進行CAN匯流排通訊設計或者測試過程中,經常看到CAN匯流排訊號的編碼格式有兩種定義:Intel格式與Motorola格式。究竟兩種編碼格式有什麼樣的區別呢?設計者、dbc檔案編輯者或者測試人員又該如何判斷兩種格式,並進行有效正確的配置和解析呢?下面作者給出自己在設計和測試過程中的一點體會和見解,希望能夠總結出來加深一下印象和理解。
在編碼優缺點上,Motorola格式與Intel格式並沒有孰優孰劣之分,只不過根據設計者的習慣,由使用者自主選擇罷了。當時,對於使用者來講,在進行解析之前,就必須要知道編碼的格式是哪一種,否則,就不能保證正確地解析訊號的含義。以下就以8位位元組編碼方式的CAN匯流排訊號為例,詳細分析一下兩者之間的區別。
首先,介紹一下CAN匯流排的資料傳輸規則,首先傳輸一個位元組的高位(msb),最後傳輸該位元組的低位(lsb)。如下圖所示。
一般情況下,主機廠在定義CAN匯流排訊號定義時,都會明確定義位元組的傳送順序,即:以首先發送byte0(LSB),然後byte1,byte2,……(MSB)的傳送順序;還是以首先發送byte7(MSB),然後byte6,byte5,……(LSB)的傳送順序。據作者瞭解到的多個主機廠定義的CAN匯流排位元組傳送順序均為前者(即:首先發送LSB,最後傳送MSB)。這一點可以從目前主流的CAN匯流排訊號資料庫編輯器德國verctor公司的CANoe軟體工具的定義上看出,CANoe中的CANdb++編輯器中預設定義的CAN資料場的位元組結構及每一位的排布入下圖所示。
在這種情況下,如果主機廠採用的是首先發送LSB,最後傳送MSB的傳送順序,則在上表中可直接按照從左至右,從上至下的順序依次對訊號進行排布即可;但是,如果主機廠採用的是首先發送MSB,最後傳送LSB的傳送順序,則在上表中需要從下至上,從右至左的順序依次對訊號進行排布,這樣就比較難以對應,而且訊號與資料場各位元組之間的對映關係也不太直觀。所以,一般來講,主機廠會採用首先發送LSB,最後傳送MSB的傳送順序。
下面就以CAN匯流排報文的傳送順序為首先發送LSB,最後傳送MSB的方式為前提,介紹Intel格式與Motorola格式這兩種編碼方式的不同之處。
一、 採用Intel格式編碼
當一個訊號的資料長度不超過1個位元組(8位)並且訊號在一個位元組內實現(即,該訊號沒有跨位元組實現)時,該訊號的高位(S_msb)1將被放在該位元組的高位,訊號的低位(S_lsb)2將被放在該位元組的低位。這樣,訊號的起始位3就是該位元組的低位。下圖分別以4位和8位資料長度的兩種訊號為例進行了說明,並給出了某一車型的通訊矩陣CANoe中的CAN資料庫實現的圖片說明。
當一個訊號的資料長度超過1個位元組(8位)或者資料長度不超過一個位元組但是採用跨位元組方式實現時,該訊號的高位(S_msb)將被放在高位元組(MSB)的高位,訊號的低位(S_lsb)將被放在低位元組(LSB)的低位。這樣,訊號的起始位就是低位元組的低位。對於一個訊號的資料長度不超過一個位元組,但是採用跨位元組方式實現的這種情況,因其對訊號解析和編碼以及訊號完整性都存在不利因素,所以主機廠在定義某一車型(系)的整車通訊矩陣時,不太可能設計出這種編碼結構。本文就不再考慮和分析這種較為特殊的情況,但其原理與本文討論的其他情況是相同的。下圖分別以12位和16位資料長度的兩種訊號為例進行了說明,並給出了CANoe中的某一車型的通訊矩陣的CAN資料庫的圖片說明。
二、 採用Motorola格式編碼
當一個訊號的資料長度不超過1個位元組(8位)並且訊號在一個位元組內實現(即,該訊號沒有跨位元組實現)時,訊號的高位(S_msb)將被放在該位元組的高位,訊號的低位(S_lsb)將被放在該位元組的低位。這樣,訊號的起始位就是該位元組的低位。下圖分別以4位和8位資料長度的兩種訊號為例進行了說明,並給出了某一車型的通訊矩陣在CANoe中CAN資料庫實現的圖片說明。
當一個訊號的資料長度超過1個位元組(8位)或者資料長度不超過一個位元組但是採用跨位元組方式實現時,該訊號的高位(S_msb)將被放在低位元組(MSB)的高位,訊號的低位(S_lsb)將被放在高位元組(LSB)的低位。這樣,訊號的起始位就是高位元組的低位。對於一個訊號的資料長度不超過一個位元組,但是採用跨位元組方式實現的這種情況,因其對訊號解析和編碼以及訊號完整性都存在不利因素,所以主機廠在定義某一車型(系)的整車通訊矩陣時,不太可能設計出這種編碼結構。本文就不再考慮和分析這種較為特殊的情況,但其原理與本文討論的其他情況是相同的。下圖分別以12位和16位資料長度的兩種訊號為例進行了說明,並給出了CANoe中的某一車型的通訊矩陣的CAN資料庫的圖片說明。
由上,可以看出,當一個訊號的資料長度不超過1個位元組(8位)時,Intel與Motorola兩種格式的編碼結果沒有什麼不同,完全一樣。當訊號的資料長度超過1個位元組(8位)時,兩者的編碼結果出現了明顯的不同。
文中術語解釋及定義:
1. 訊號的高位,即最能表達訊號特性的因子,比如:車速訊號500km/h按照給定的公
式,轉換成十六進位制數為0x6A5,因為6代表的數量級最大(162),那麼其中6就是其訊號的高位。
2. 訊號的低位,即最不能表達訊號特性的因子,比如:車速訊號500km/h按照給定的
公式,轉換成十六進位制數為0x6A5,因為5代表的數量級最小(160),那麼其中5就是其訊號的低位。
3. 訊號的起始位,一般來講,主機廠在定義整車CAN匯流排通訊矩陣時,其每一個信
號都從其最低位開始填寫,這樣也符合使用習慣。所以訊號的起始位就是訊號的最
低位。這也與CANoe中CANdb++的定義Startbit含義一致。