Intel格式與Motorola格式的區別


 

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含義一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM