一、什麼是Autosar E2E
Autosar E2E全稱是Automotive Open System Architecture End-to-End Protection,是汽車電子領域用於保護數據完整性的標準協議。E2E協議是一個端到端保護的協議,它的設計初衷是為了解決CAN網絡數據傳輸時的數據安全問題。E2E協議通過在CAN收發數據時對數據進行處理,來保證數據在傳輸過程中不被篡改。E2E協議的設計思想是在數據發出端添加一個校驗碼,然後在接收端進行校驗,如果校驗失敗則說明數據被篡改。
二、Autosar E2E的優勢和應用
Autosar E2E協議的優勢主要有以下幾點:
1. 數據完整性保證。由於E2E協議的固有設計思路,數據在傳輸過程中無法被篡改,因此數據的完整性得以保證。
2. 配置靈活。根據不同的應用場景,E2E協議可以進行靈活的配置,從而滿足不同的安全需求。
3. 相對較低的成本。E2E協議的設計簡單並且易於實現,因此相對於其他保護數據完整性的協議來說,它的成本較低。
E2E協議主要應用在汽車電子系統中,在汽車領域中,由於各種原因引發的數據丟失或者數據的篡改都有可能引發嚴重的問題。如ABS系統誤剎,車輛着火,座椅高度調整失靈等,這些都是因為數據傳輸終端篡改所導致的。
三、Autosar E2E的設計思路
Autosar E2E協議的設計思想是基於可靠性的消息傳輸。E2E協議是消息級別的保護協議,主要包含一下三個部分:
1. 發送端部分:發送端將數據打包並添加一個校驗碼。
2. 存儲及傳輸部分:該部分旨在確保數據在傳輸過程中不被篡改。
3. 接收端部分:接收端對接收到的數據進行解包並驗證該校驗碼,以確保數據的正確性。
/**
* @brief 將數據打包並添加校驗碼
* @param data 需要傳輸的數據
* @param len 數據長度
* @return 打包後的數據
*/
uint8_t* E2E_Encode(uint8_t* data, uint32_t len)
{
uint16_t checksum = calculateChecksum(data, len);
uint8_t* package = malloc(len + sizeof(checksum));
memcpy(package, data, len);
memcpy(package + len, &checksum, sizeof(checksum));
return package;
}
/**
* @brief 對接收到的數據進行解包並驗證校驗碼
* @param package 接受到的數據包
* @param len 數據包長度
* @return 是否驗證通過
*/
bool E2E_Decode(uint8_t* package, uint32_t len)
{
uint16_t receivedChecksum;
memcpy(&receivedChecksum, package + len - sizeof(receivedChecksum), sizeof(receivedChecksum));
uint16_t checksum = calculateChecksum(package, len - sizeof(receivedChecksum));
return checksum == receivedChecksum;
}
四、Autosar E2E的應用示例
以智能座艙為例,座艙中一共有多個控制器,如儀錶盤、中控屏幕、氣囊、座椅調節等。這些控制器都需要相互通訊,而在通訊過程中,數據的完整性問題是關鍵的。智能座艙中的消息按以下三種方式進行傳輸:
1. 直接消息傳輸:控制器之間直接傳輸消息,不涉及到中間件的消息轉發和處理。該方式通常用於一些時間敏感的控制消息。
2. 中間件消息傳輸:控制器通過中間件進行通訊,中間件將消息轉發到指定的控制器,該方式通常用於需要廣播的消息。
3. 網絡消息傳輸:控制器通過網絡進行通訊,通常在汽車領域中,該方式只用於診斷,如控制器的在線升級、故障碼的讀取、通訊診斷等。
/**
* @brief 氣囊控制消息示例,添加Autosar E2E保護
*/
struct AirbagControl
{
uint8_t airbagId; // 氣囊Id
uint8_t airbagStatus; // 氣囊狀態
uint8_t eventCode; // 事件碼
};
/**
* @brief 構造氣囊控制消息並添加Autosar E2E保護
* @param airbagId 氣囊Id
* @param airbagStatus 氣囊狀態
* @param eventCode 事件碼
* @return 構造好的消息
*/
uint8_t* createAirbagControlMessage(uint8_t airbagId, uint8_t airbagStatus, uint8_t eventCode)
{
struct AirbagControl control = {airbagId, airbagStatus, eventCode};
uint8_t* data = (uint8_t*)&control;
uint8_t* package = E2E_Encode(data, sizeof(control));
return package;
}
/**
* @brief 接收氣囊控制消息並驗證Autosar E2E保護
* @param package 接收到的消息
* @param len 消息長度
* @return 是否驗證通過
*/
bool receiveAirbagControlMessage(uint8_t* package, uint32_t len)
{
struct AirbagControl control;
memcpy(&control, package, sizeof(control));
return E2E_Decode(package, len);
}
五、Autosar E2E的發展前景
隨着汽車電子系統的不斷發展,汽車領域中對數據傳輸的要求越來越高,數據的完整性愈發重要。E2E協議不僅可以應用於傳統的CAN網絡,也可以應用於其他現代汽車通信網絡,如FlexRay、LIN、Ethernet等。
同時,隨着自動駕駛和智能汽車的發展,對汽車電子系統的安全性和數據保護性的要求也越來越高。因此,在未來的發展中,E2E協議將成為實現汽車數據安全的重要保障。
原創文章,作者:JIBWX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/361228.html
微信掃一掃
支付寶掃一掃