方曉穎
(同濟(jì)大學(xué) 201804)
AUTOSAR(Automotive Open System Architecture)標(biāo)準(zhǔn)是汽車電子系統(tǒng)開發(fā)的新理念?;贏UTOSAR 標(biāo)準(zhǔn)的汽車電子系統(tǒng)開發(fā)實(shí)現(xiàn)了應(yīng)用軟件設(shè)計(jì)與底層硬件的分離,是汽車電子嵌入式系統(tǒng)發(fā)展的趨勢(shì)。ISO26262 是汽車功能安全的新標(biāo)準(zhǔn),包括了安全周期、汽車安全集成等級(jí)(ASIL)以及安全需求規(guī)范等核心概念[1]。為了支持功能安全,AUTOSAR 標(biāo)準(zhǔn)結(jié)合ISO26262功能安全標(biāo)準(zhǔn),在基礎(chǔ)軟件層從安全執(zhí)行、安全通訊以及安全內(nèi)建測(cè)試三方面做了規(guī)范。其中,安全通信包括兩個(gè)方面,ECU 內(nèi)部通訊和ECU 之間的通信。AUTOSAR 對(duì)于安全通信提供了三種機(jī)制,數(shù)據(jù)順序控制、PDU 復(fù)制和K/N 的投票機(jī)制以及端到端(End to End,簡(jiǎn)稱E2E)的保護(hù)機(jī)制。本文針對(duì)ECU 內(nèi)部數(shù)據(jù)元素層面的E2E 保護(hù),重點(diǎn)闡述其保護(hù)機(jī)制、使用限制、E2E結(jié)構(gòu)1(E2E profile1)以及基于E2E 保護(hù)包的E2E 庫(kù)實(shí)現(xiàn)方式。
“E2E 保護(hù)”是指對(duì)安全相關(guān)的數(shù)據(jù)在交互過(guò)程中進(jìn)行保護(hù)以防止通訊故障造成的影響。
E2E 的保護(hù)機(jī)制借助于端到端保護(hù)庫(kù)(E2E 庫(kù))來(lái)實(shí)現(xiàn)。比如,隨機(jī)性的硬件故障,由于EMC 造成的CAN 收發(fā)器故障,或者諸如RTE、IOC、COM 以及網(wǎng)絡(luò)堆棧等VFB 軟件通訊故障。
E2E 庫(kù)是基于其內(nèi)部功能行為開發(fā)的,具體體現(xiàn)在通訊保護(hù)機(jī)制以及E2E 結(jié)構(gòu)上。
1.1.1 通訊保護(hù)
圖1 E2E 配置結(jié)構(gòu)體
圖2 Comspec 設(shè)置
通訊保護(hù)機(jī)制的重要意義之一是它對(duì)于不同目的標(biāo)準(zhǔn)化和靈活性,這可以通過(guò)配置E2E 結(jié)構(gòu)中函數(shù)調(diào)用參數(shù)來(lái)解決。有些E2E 結(jié)構(gòu)有標(biāo)準(zhǔn)的變量。每個(gè)E2E 變量是E2E 結(jié)構(gòu)提供的一組配置選項(xiàng)。比如,在E2E 結(jié)構(gòu)1 中,CRC 和Counter 的位置是可以配置的。E2E 變量1A 指定了CRC 的起始位是bit0,Counter 的起始位是bit8。除了E2E 結(jié)構(gòu)外,E2E 庫(kù)還提供基本的功能(比如多字節(jié)CRC)來(lái)建立的安全協(xié)議。
發(fā)送:對(duì)于傳輸?shù)臄?shù)據(jù),有CRC 或Counter 這樣的額外控制域。
接收:從接收的數(shù)據(jù)中評(píng)估和計(jì)算控制域,比如計(jì)算接收數(shù)據(jù)的CRC,與收到的值做比較。
圖3 E2E_Comspec 模塊封裝
每種E2E 結(jié)構(gòu)有特定的控制區(qū)域設(shè)置,包括特定的功能行為和用于監(jiān)測(cè)通訊故障的特定屬性。
1.1.2 E2E 結(jié)構(gòu)
E2E 結(jié)構(gòu)提供了一系列數(shù)據(jù)保護(hù)的機(jī)制,用于對(duì)故障模型中考慮進(jìn)去的故障的保護(hù)。每一種E2E 結(jié)構(gòu)通過(guò)不同的算法,提供了一種可選的方式來(lái)保護(hù)通訊。然而每種E2E 結(jié)構(gòu)幾乎都有確定的API。每種E2E 結(jié)構(gòu)必須使用如下保護(hù)機(jī)制集合。
(1)CRC,由CRC 庫(kù)提供。
(2)序列計(jì)數(shù)器(Sequence Counter)每次根據(jù)傳輸需求增加,由接收方檢查增加數(shù)值的正確性。
(3)存活計(jì)數(shù)器(alive Counter)每個(gè)根據(jù)傳輸需求增加,接收方僅檢查數(shù)值是否改變,但不檢查是否改變正確。
(4)通過(guò)同一端口的數(shù)據(jù)元素有指定ID。每一組I-PDU 有一個(gè)指定ID。
(5)超時(shí)監(jiān)測(cè):接收通信通訊超時(shí);發(fā)送確認(rèn)超時(shí)。
(6)本文使用比較常用的E2E 結(jié)構(gòu)1 及其變量1A 來(lái)進(jìn)行數(shù)據(jù)保護(hù)開發(fā)。
為了合理使用E2E 庫(kù),該庫(kù)的獲取方案有多種。這些方案的選擇取決于RTE、COM 軟件及底層其余軟件單元的集成方式。所以使用者有責(zé)任選擇合適的使用方式來(lái)實(shí)現(xiàn)安全相關(guān)系統(tǒng)的需求。
E2E 庫(kù)可以由以下不同方式來(lái)實(shí)現(xiàn)。
(1)E2E 保護(hù)包——無(wú)標(biāo)準(zhǔn)的集成軟件來(lái)保護(hù)數(shù)據(jù),用于RTE 之上,即應(yīng)用層。
(2)COM callouts——無(wú)標(biāo)準(zhǔn)的集成代碼來(lái)保護(hù)I-PDUs
(3)以上混合使用。
(4)RTE 層的Out-of-box 保護(hù)。
本文運(yùn)用E2E 保護(hù)包來(lái)實(shí)現(xiàn)E2E 庫(kù)的調(diào)用。E2E 保護(hù)包的功能由Rte_Write 和Rte_read 實(shí)現(xiàn),并提供給應(yīng)用層。應(yīng)用層軟件需要包含了E2EPW_xxx.h(xxx 為運(yùn)行體名)。E2EPW_xxx.h 和E2EPW_xxx.c 即E2Ewapper 代碼,屬于RTE 接口代碼的一部分,通過(guò)RTE 配置后,存在于RTE 代碼生成過(guò)程。RTE_xxx.h 包含了運(yùn)行體RTE 實(shí)現(xiàn)相關(guān)的聲明和宏定義,同樣在RTE 代碼生成過(guò)程中產(chǎn)生。如果RTE 配置中建立某一運(yùn)行體的實(shí)例,則RTE 代碼包含相應(yīng)的RTE_xxx.h 和RTE_xxx_Type.h。其余E2E_P01.h 和E2E.h 由底層軟件供應(yīng)商提供。本文研究對(duì)象為TGI 軟件組件。首先,定義E2E 配置結(jié)構(gòu)體(Config)。該配置結(jié)構(gòu)體需要應(yīng)用層和底層共同確認(rèn),根據(jù)變量1A 的規(guī)則。原則上該配置應(yīng)該由底層軟件完成。但在SystemDesk 也有實(shí)踐,完成之后生成描述文件如圖1所示。
其次,在SystemDesk 中建立軟件組件TGI,除內(nèi)部行為外,重點(diǎn)通過(guò)添加Comspec 對(duì)需要E2E 保護(hù)的數(shù)據(jù)進(jìn)行端口屬性配置:依次關(guān)聯(lián)相應(yīng)的接口,并設(shè)UseEndtoEndProtection屬性為on,在IniValueRef 中設(shè)置初始值。軟件組件設(shè)計(jì)完后,從SystemDesk 中導(dǎo)出描述文件,并導(dǎo)入TargetLink。比如,對(duì)于供型端口的設(shè)置及Comspec 在DD 中體現(xiàn)如圖2。對(duì)于需型端口也做同樣設(shè)置。
圖4 接收端保護(hù)機(jī)制
接著,在TargetLink 中生成框架模型TGI.slx,添加TL AR Utilities 中“E2E 庫(kù)”,進(jìn)行端口配置和調(diào)試。如果調(diào)試成功,E2E_Comspec 模塊將封裝成如圖3,不僅對(duì)需要進(jìn)行保護(hù)的端口承載信號(hào)打包,同時(shí)生成status 信號(hào)。
最后,生成TGI.slx 的AUTOSAR 代碼。以接收端為例,在TGI.c 中如預(yù)期生成了E2E 保護(hù)包的調(diào)用函數(shù)E2EPW_Read_C2L_E2e_L2_In(TGI_E2e_L2_In_t* E2ESignal)。而在E2EPW_TGI.c 中如期生成RTE 數(shù)據(jù)更新?tīng)顟B(tài)返回值Rte_Read_C2L_L2_E2e_L2_In(E2ESignal)。
以接收端為例,其保護(hù)機(jī)制和調(diào)用關(guān)系如圖4所示。
(1)應(yīng)用層激活E2EPW_Read__ (2)E2EPW激活RTE讀取接口Rte_Read_ (3)如果獲取最新元素成功,Rte_Read 返回沒(méi)有錯(cuò)誤。 (4)調(diào)用E2E 庫(kù)中E2E_P01Check(&Config, &State, &Data)。 (5)E2E 庫(kù)計(jì)算CRC,完成檢查:E2E 庫(kù)激活CRC 庫(kù)若干次來(lái)計(jì)算數(shù)據(jù)和數(shù)據(jù)ID 的CRC,并檢查CRC、計(jì)數(shù)器、最新數(shù)據(jù)元素,最后根據(jù)檢查結(jié)果,更新State。 (6)更新?tīng)顟B(tài)值State->Status。 (7)評(píng)估接收到的數(shù)據(jù)元素是否可信,或者觸發(fā)錯(cuò)誤后處理。 目前,E2E 保護(hù)仍處于研發(fā)階段。作為AUTOSAR 提供的ISO26262 標(biāo)準(zhǔn)中安全通訊保護(hù)的實(shí)現(xiàn)方式,其研發(fā)成果不僅可以用于ECU 內(nèi)部數(shù)據(jù)元素的保護(hù),還能用于整車CAN 通訊的保護(hù)。3 結(jié)論