前言
??從這一節(jié)開始,正式步入功能安全專題。這一節(jié)先來看一個(gè)與Communication Stack強(qiáng)相關(guān)的且與功能安全有關(guān)的模塊,它就是E2E模塊。
1 E2E模塊簡(jiǎn)介
??E2E在AUTOSAR架構(gòu)中,它被定義成是一個(gè)函數(shù)庫。E2E 可以保護(hù)安全相關(guān)的數(shù)據(jù)交換,避免數(shù)據(jù)交換過程中通信鏈路造成的錯(cuò)誤。E2E通信保護(hù)庫實(shí)現(xiàn)了這些保護(hù)機(jī)制算法。E2E 的主要功能:
- 為將要發(fā)送的安全相關(guān)的數(shù)據(jù)提供保護(hù);
- 對(duì)接收到的安全相關(guān)的數(shù)據(jù)進(jìn)行校驗(yàn);
- 對(duì)接收到的安全相關(guān)的數(shù)據(jù)錯(cuò)誤做出指示。
??E2E模塊保護(hù)數(shù)據(jù)的算法其實(shí)就是CRC,它主要就是定義了怎樣使用一些特定的CRC算法來確保數(shù)據(jù)的準(zhǔn)確性和連續(xù)性,E2E用在發(fā)送數(shù)據(jù)上叫做Protect,用在接收數(shù)據(jù)上叫做Check。
2 E2E功能簡(jiǎn)介
??E2E 模塊可以被三個(gè)地方調(diào)用,分別是COM 模塊中的COM callout ,E2E Transformer模塊 和 E2E Protection Wrapper。當(dāng) E2E 庫被 Transformer 和 Wrapper 調(diào)用時(shí),需要在 Transformer 和 Wrapper 中對(duì)數(shù)據(jù)元素進(jìn)行序列化。在 E2E 模塊內(nèi)部會(huì)調(diào)用 Crc 模塊提供函數(shù)。
2.1 五種保護(hù)機(jī)制
??E2E提供了一下五種保護(hù)機(jī)制來保護(hù)數(shù)據(jù)安全,如下:
- CRC:發(fā)送端根據(jù)數(shù)據(jù)計(jì)算CRC值,接收端會(huì)重新計(jì)算并檢查。
- Sequence Counter: 發(fā)送端每次傳輸,該值都會(huì)加一,接收端會(huì)檢查該值。
- Alive Counter:發(fā)送端每次傳輸,該值都會(huì)加一,接收端會(huì)檢查該值,通常跟Sequence Counter是一個(gè)東西(具體我也不知道有什么區(qū)別)。
- Data ID:給每個(gè)數(shù)據(jù)或者I-PDU Group編號(hào)。
- Timeout detection: 接收者接收超時(shí),發(fā)送者響應(yīng)超時(shí)。
??為了同時(shí)滿足保護(hù)機(jī)制的標(biāo)準(zhǔn)化和靈活性要求,E2E 模塊提供了很多個(gè) profile,包括P01、P02、P04、P05 和 P06,P07, P11, P22,它們之間的最大區(qū)別就在于每一個(gè)所采用的保護(hù)機(jī)制是以上五個(gè)保護(hù)機(jī)制的子集。
Profile | 保護(hù)機(jī)制 | 發(fā)送描述 | 最大保護(hù)數(shù)據(jù)長度 |
---|---|---|---|
Profile01 | Counter(4bit)、Data ID(16bit)、 CRC8、Timeout monitoring | Data ID由Data ID Mode決定是否發(fā)送 ,Counter和CRC需要發(fā)送 | 30bytes |
Profile02 | Counter(4bit)、Data ID List(8bit)、 CRC8 | Data ID 不會(huì)發(fā)送,僅用作 CRC計(jì)算,Counter和CRC需要發(fā)送 | 256bytes |
Profile04 | Counter(16bit)、Data ID(32bit)、CRC32、Length(16bit) | Counter、Data ID、CRC、Length均會(huì)發(fā)送 | 4096bytes |
Profile05 | Counter(8bit)、Data ID(16bit) 、CRC16 | Data ID 不會(huì)發(fā)送,僅用作 CRC計(jì)算,Counter和CRC需要發(fā)送 | 4096bytes |
Profile06 | Counter(8bit)、Data ID(16bit)、CRC16、Length(16bit) | Data ID 不會(huì)發(fā)送,僅用作 CRC 計(jì)算,Counter,CRC和Length需要發(fā)送 | 4096bytes |
Profile07 | Counter(32bit)、Data ID(32bit)、CRC64、Length(32bit) | Counter、Data ID、CRC、Length均會(huì)發(fā)送 | 未知 |
Profile11 | Counter(4bit)、Data ID(16bit or 12bit)、CRC8 | Counter、Data ID、CRC均會(huì)發(fā)送 | 30bytes |
Profile12 | Counter(4bit)、Data ID List(16*8bit)、CRC8 | Data ID 不會(huì)發(fā)送,僅用作 CRC計(jì)算,Counter和CRC需要發(fā)送 | 未知 |
注:1. 保護(hù)機(jī)制中包含Length的Profile支持保護(hù)不定長數(shù)據(jù),其他則不支持。2. 保護(hù)機(jī)制中的Data ID List指的是每一條消息的Data ID由Counter值去確定,所以需要靜態(tài)定義Data ID和Counter的對(duì)應(yīng)表格,這種機(jī)制就叫做Data ID List。3. 當(dāng)使用 profile4、profile5 和 profile6 保護(hù)數(shù)據(jù)時(shí),如果需要保護(hù)的數(shù)據(jù)較長時(shí),CRC 計(jì)算時(shí)間會(huì)較長,由于 E2E 模塊的保護(hù)和檢測(cè)功能都是同步執(zhí)行的,可能會(huì)影響系統(tǒng)的實(shí)時(shí)性。4. 每一種profile檢測(cè)到錯(cuò)誤時(shí)所采取的措施也是不一樣的,至于每一種profile的工作機(jī)制大家可以參考官方規(guī)范手冊(cè)《AUTOSAR_SWS_E2ELibrary.pdf》。
2.2 E2E的狀態(tài)機(jī)
??E2E profile 中對(duì)數(shù)據(jù)的檢測(cè)只表示在單個(gè)周期內(nèi)數(shù)據(jù)的正確性,E2E 的狀態(tài)機(jī)則將固定次數(shù)內(nèi)(reception window)的 profile 數(shù)據(jù)檢測(cè)結(jié)果進(jìn)行統(tǒng)一管理,并將處理后的狀態(tài)提供給調(diào)用者,調(diào)用者可根據(jù)狀態(tài)決定是否使用數(shù)據(jù)。E2E 各狀態(tài)轉(zhuǎn)換描述如下:
??各個(gè)狀態(tài)具體描述如下:
狀態(tài) | 描述 |
---|---|
E2E_SM_DEINIT | 未初始化狀態(tài),在此狀態(tài)如果用戶調(diào)用 E2E_SMCheck,返回 E2E_E_WRONGSTATE。 |
E2E_SM_NODATA | 無數(shù)據(jù)狀態(tài),調(diào)用 E2E_SMCheckInit,進(jìn)入該狀態(tài)。在該狀態(tài)如果用戶調(diào)用 E2E_SMCheck,檢測(cè)的 profile 狀態(tài)不 為 E2E_P_ERROR 和 E2E_P_NONEWDATA , 則 進(jìn) 入E2E_SM_INIT 狀態(tài),否則一直停留在此狀態(tài)。 |
E2E_SM_INIT | 初 始 化 狀 態(tài) , 在 reception window 內(nèi) , 用 戶 調(diào) 用E2E_SMCheck,更新 ErrorCounter 和OKCounter 的值。如果 ErrorCounter 的值小于等于設(shè)置的閾值并且 OKCounter大于等于設(shè)置的閾值,則進(jìn)入 E2E_SM_VALID 狀態(tài)。如 果 ErrorCounter 的 值 大 于 設(shè) 置 的 閾 值 , 則 進(jìn) 入E2E_SM_INVALID 狀態(tài)。否則一直停留在該狀態(tài)。 |
E2E_SM_VALID | 數(shù) 據(jù) 有 效 狀 態(tài) , 在 reception window 內(nèi) , 用 戶 調(diào) E2E_SMCheck,更新 ErrorCounter 和 OKCounter 的值。如果 ErrorCounter 的值小于等于設(shè)置的閾值并且 OKCounter大于等于設(shè)置的閾值,則停留在該狀態(tài)。否則進(jìn)入E2E_SM_INVALID 狀態(tài)。 |
E2E_SM_INVALID | 數(shù) 據(jù) 無 效 狀 態(tài) , 在 reception window 內(nèi) , 用 戶 調(diào) 用E2E_SMCheck,更新 ErrorCounter 和 OKCounter 的值。如果 ErrorCounter 的值小于等于設(shè)置的閾值并且 OKCounter大于等于設(shè)置的閾值,則進(jìn)入 E2E_SM_VALID 狀態(tài)。否則一直停留在該狀態(tài)。 |
2.3 E2E Protection Wrapper
??前面提到了E2E Protection Wrapper 屬于 E2E 三種調(diào)用者之一,其位置比較特殊,它不屬于BSW層,而是位于 RTE 之上,屬于 SWC 層的一部分,其保護(hù)的數(shù)據(jù)需要為信號(hào)組的形式。其結(jié)構(gòu)如下:
??E2E Protection Wrapper主要功能如下。
??1. 負(fù)責(zé)將復(fù)雜數(shù)據(jù)元素進(jìn)行序列化
??2. 負(fù)責(zé)將調(diào)用 E2E Lib 時(shí)使用的數(shù)據(jù)結(jié)構(gòu)實(shí)例化和初始化
??3. 調(diào)用 E2E 接口對(duì)數(shù)據(jù)元素進(jìn)行保護(hù)
??4. 調(diào)用 RTE 接口接收和發(fā)送數(shù)據(jù)
??E2E Protection Wrapper 為每組需要保護(hù)的數(shù)據(jù)元素生成一組接口,發(fā)送數(shù)據(jù)接口E2EPW_Write_<p>_<o> 和 E2EPW_WriteInit_<p>_<o> , 接 收 數(shù) 據(jù) 接 口E2EPW_Read_<p>_<o> 和 E2EPW_ReadInit_<p>_<o> 。 當(dāng) 用 戶 發(fā) 送 數(shù) 據(jù) 時(shí) 調(diào) 用E2EPW_Write_<p>_<o> ()接口,該接口將數(shù)據(jù)進(jìn)行序列化,調(diào)用 E2E 的接口保護(hù)數(shù)據(jù),調(diào)用 RTE 的數(shù)據(jù)發(fā)送接口發(fā)送數(shù)據(jù);當(dāng)用戶接收數(shù)據(jù)時(shí)調(diào)用 E2EPW_Read_<p>_<o> ()接口,該接口調(diào)用 RTE 的數(shù)據(jù)接收接口接收數(shù)據(jù),序列化接收數(shù)據(jù),并調(diào)用 E2E 接口檢查接收數(shù)據(jù)。
2.4 E2E 錯(cuò)誤反饋方式
??當(dāng)用戶使用 E2E Protection Wrapper 調(diào)用 E2E 時(shí),E2E 中檢查的錯(cuò)誤通過 E2EProtection Wrapper 中的返回值反饋給用戶。該返回值為 32 位的無符號(hào)數(shù),各字節(jié)代表不同的錯(cuò)誤類型。E2EPW_Write**<p>_<o>和 E2EPW_Read**<p>_<o>返回值描述如下表。文章來源:http://www.zghlxwxcb.cn/news/detail-424408.html
函數(shù)類型 | 返回值 Byte3 | 返回值 Byte2 | 返回值 Byte1 | 返回值 Byte0 |
---|---|---|---|---|
Write | – | E2E_PxxProtect 函數(shù) 的 返 回 值 , 當(dāng)Byte1 為 E2E_E_OK時(shí),該值才有效 | E2E ProtectionWrapper 實(shí) 時(shí) 檢 查的結(jié)果 | Rte_Write 函數(shù)的返回值,當(dāng) Byte2 為E2E_E_OK 時(shí),該值才有效 |
Read | E2E_PxxCheck 函數(shù)檢查的錯(cuò)誤狀態(tài),當(dāng)Byte2 為 E2E_E_OK時(shí),該值才有效 | E2E_PxxCheck 函數(shù)的返回值,當(dāng) Byte1為 E2E_E_OK 時(shí),該值才有效 | E2E Protection Wrapper 實(shí) 時(shí) 檢 查的結(jié)果 | Rte_Read 函數(shù)的返回值,當(dāng) Byte1 為E2E_E_OK 時(shí),該值才有效 |
??E2E_PxxCheck 函數(shù)檢查的錯(cuò)誤狀態(tài)描述如下表:文章來源地址http://www.zghlxwxcb.cn/news/detail-424408.html
錯(cuò)誤狀態(tài) | 值 | 描述 |
---|---|---|
E2EPW_STATUS_OK | 0x0 | 數(shù)據(jù)被正確接收,無 crc、counter 等錯(cuò)誤 |
E2EPW_STATUS_NONEWDATA | 0x1 | 檢查函數(shù)被調(diào)用,但是未收到新數(shù)據(jù) |
E2EPW_STATUS_WRONGCRC | 0x2 | 接收到新數(shù)據(jù),但是存在 crc 或其他數(shù)據(jù)檢查錯(cuò)誤 |
E2EPW_STATUS_SYNC | 0x3 | 數(shù)據(jù)被正確接收,但是由于上次產(chǎn)生的檢查錯(cuò)誤,導(dǎo)致數(shù)據(jù)連續(xù)性檢查需要進(jìn)行數(shù)據(jù)同步 |
E2EPW_STATUS_INITIAL | 0x4 | 已接收數(shù)據(jù),crc 正確,但是由于進(jìn)行了初始化導(dǎo)致無法驗(yàn)證 counter 的正確性 |
E2EPW_STATUS_REPEATED | 0x8 | 已接收數(shù)據(jù),crc 正確,但是 counter 重復(fù) |
E2EPW_STATUS_OKSOMELOST | 0x20 | 已接收數(shù)據(jù),crc 正確,但是 counter 不連續(xù),DeltaCounter 在可接受范圍內(nèi) |
E2EPW_STATUS_WRONGSEQUENCE | 0x40 | 已接收數(shù)據(jù),crc 正確,但是 counter 不連續(xù),DeltaCounter 超出可接受范圍 |
END
到了這里,關(guān)于【小貓爪】AUTOSAR學(xué)習(xí)筆記12-功能安全之E2E模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!