王 民 劉龍龍
(上海汽車集團(tuán)股份有限公司技術(shù)中心 上海 201804)
在整車V模型的開發(fā)流程中,軟件測(cè)試和標(biāo)定是非常重要的一環(huán),軟件的功能是否滿足需求需要測(cè)試和標(biāo)定進(jìn)行驗(yàn)證。當(dāng)前,軟件標(biāo)定功能是基于XCP協(xié)議,利用不同的標(biāo)定測(cè)量工具(如INCA、CANape等)開展的,通過將不同的參數(shù)進(jìn)行標(biāo)定驗(yàn)證,得出軟件最優(yōu)化的功能,最終將標(biāo)定好的參數(shù)固化到FLASH中,完成整個(gè)標(biāo)定的過程。傳統(tǒng)的標(biāo)定方式是這樣實(shí)現(xiàn)的:在軟件初始化過程中,定義在FLASH中的參數(shù)(標(biāo)定量)會(huì)被全部拷貝到RAM中進(jìn)行重映射,在請(qǐng)求更改標(biāo)定量時(shí),通過更改RAM中的數(shù)據(jù)更改FLASH中的數(shù)據(jù),進(jìn)而影響參數(shù)的變化。此過程中,要將FLASH中的所有標(biāo)定量拷貝到RAM中,需要有足夠大的RAM空間,工程上通常這需要定制有超大RAM的開發(fā)芯片。當(dāng)RAM空間小于所要映射的FLASH空間時(shí),由于部分標(biāo)定量不能被拷貝到RAM中實(shí)現(xiàn)映射,進(jìn)而導(dǎo)致此部分標(biāo)定量不能被標(biāo)定[1]。
由于有超大RAM的芯片只在開發(fā)階段使用,其使用量不多,價(jià)格通常是量產(chǎn)芯片的一百倍左右。同時(shí)能做在線標(biāo)定的這種ECU控制器也非常昂貴,是常規(guī)量產(chǎn)控制器的幾十倍,所以如果在量產(chǎn)小RAM芯片上實(shí)現(xiàn)通常的標(biāo)定功能就能顯而易見地節(jié)省一大筆開銷。因此,針對(duì)RAM空間小于標(biāo)定FLASH空間的情況下,如何利用有限的RAM資源實(shí)現(xiàn)在線標(biāo)定功能成為本文的研究目的。
本文基于英飛凌AURIX芯片的Overlay模塊實(shí)現(xiàn)ECU在線標(biāo)定功能開發(fā)[2],其他芯片也具有類似的模塊來實(shí)現(xiàn)此功能[3-4]。英飛凌AURIX芯片提供了Data Overlay功能以實(shí)現(xiàn)FLASH和RAM之間的映射,其目的是實(shí)現(xiàn)更改RAM中的內(nèi)容達(dá)到最終更改FLASH中的內(nèi)容。在程序設(shè)計(jì)的時(shí)候,所有的標(biāo)定量都會(huì)被定義在FLASH中,實(shí)現(xiàn)標(biāo)定FLASH和RAM之間的映射,使得更改RAM中的數(shù)據(jù)也能更改映射之后的FLASH中的數(shù)據(jù),以達(dá)到在線標(biāo)定的目的,Data Overlay功能示意如圖1所示。
圖1 Data Overlay功能示意
針對(duì)Data Overlay功能的實(shí)現(xiàn),AURIX芯片定義了32個(gè)Overlay塊,每個(gè)Overlay塊可通過如下三個(gè)參數(shù)實(shí)現(xiàn)目標(biāo)地址(FLASH)和映射地址(RAM)之間的映射。
Overlay塊目標(biāo)地址:被映射的FLASH起始地址。
Overlay塊大小:被映射的FLASH的大小,大小范圍是32~128 KB。
Overlay塊映射地址:映射到的RAM起始地址。
每個(gè)Overlay塊有3個(gè)寄存器來實(shí)現(xiàn)上述三個(gè)參數(shù)的配置:Overlay塊目標(biāo)地址通過寄存器OTAR配置。Overlay塊大小通過寄存器OMASK配置。Overlay塊映射地址通過寄存器RABR來配置,其中:RABR.OMEM用于選擇重映射的RAM類型,共有LMU、DSPR、EMEM和EBU四種RAM可用;RABR.OBASE用于選擇映射的RAM起始地址;RABR.OVEN用于使能或不使能目標(biāo)地址和映射地址之間的映射。Data Overlay的實(shí)現(xiàn)原理如圖2所示。
圖2 Data Overlay實(shí)現(xiàn)原理
由于XCP標(biāo)準(zhǔn)中已經(jīng)詳細(xì)地描述了在線標(biāo)定的流程[5],在此只簡(jiǎn)單陳述標(biāo)定的流程。當(dāng)工程師利用標(biāo)定工具(Master端,如INCA)與ECU連接的時(shí)候,主要包含了如表1所示的指令[6-8]。
表1 連接ECU時(shí)的XCP指令集
當(dāng)Master端RAM空間的checksum數(shù)值與ECU端FLASH和RAM空間的checksum數(shù)值不一致時(shí),Master會(huì)提示是否將Master端的數(shù)據(jù)下載到ECU RAM端,如果選擇下載,則會(huì)執(zhí)行如表2所示的指令。
表2 ECU Download數(shù)據(jù)時(shí)的XCP指令集
在下載完數(shù)據(jù)之后,ECU就被切換到RAM PAGE區(qū)域,此時(shí)定義在FLASH中的標(biāo)定量就可以被修改。當(dāng)用戶通過SET_CAL_PAGE ECU to FLASH的時(shí)候,ECU就被切換到FLASH PAGE區(qū)域,此時(shí)定義在FLASH區(qū)的標(biāo)定量就不可以被修改,軟件以定義在FLASH中的標(biāo)定量原始數(shù)值運(yùn)行。在整個(gè)標(biāo)定過程中,最重要的就是DOWNLOAD和SET_CAL_PAGE指令,本文主要進(jìn)行的工作就是在ECU接收到Master請(qǐng)求的DOWNLOAD命令時(shí),利用Overlay機(jī)制如何動(dòng)態(tài)分配FLASH空間與RAM空間的映射,并將所請(qǐng)求更改的數(shù)據(jù)拷貝到已實(shí)現(xiàn)映射的RAM中去。
由于AURIX芯片支持通過RABR寄存器的OVEN位控制每個(gè)Overlay塊單獨(dú)的使能和非使能,這就為動(dòng)態(tài)分配Overlay塊以實(shí)現(xiàn)FLASH和RAM之間的映射提供了可能。與傳統(tǒng)的標(biāo)定方式不同的是,基于AURIX的Overlay機(jī)制的標(biāo)定方式不需要FLASH全部與RAM之間進(jìn)行映射,而只需要對(duì)于被標(biāo)定的變量所在的FLASH進(jìn)行映射即可,這就需要對(duì)FLASH和RAM進(jìn)行空間上的劃分。由于AURIX芯片只提供了32個(gè)Overlay塊可供映射,且可用標(biāo)定RAM資源只有32 KB,為了最大化地利用RAM資源,在劃分的時(shí)候以1 KB為基本單位。例如,標(biāo)定FLASH空間大小為512 KB,用于標(biāo)定的RAM資源為32 KB,則需要將FLASH空間劃分為512塊,每塊大小為1 KB,編號(hào)為0~511,即FLS0-FLS511,每塊FLASH的起始地址也固定;RAM空間也劃分為32塊,每塊大小也是1 KB,編號(hào)為0~31,即RAM0-RAM31,每塊RAM的起始地址也因此固定。這樣就能夠建立起FLASH塊和RAM塊之間的映射網(wǎng),即FLS0-FLS511可與RAM0-RAM31實(shí)現(xiàn)映射,F(xiàn)LS0可以映射到RAM0,F(xiàn)LSn(n不等于0,且小于512)也可以映射到RAM0,但同一時(shí)刻,F(xiàn)LS0和FLSn不能同時(shí)映射到同一個(gè)RAM塊。由于受制于RAM空間大小,最大只能映射32 KB的RAM空間,即FLASH和RAM之間的映射比例為16∶1。FLASH塊和RAM塊之間的映射關(guān)系如圖3所示。
圖3 Overlay機(jī)制中FLASH和RAM之間的映射關(guān)系
Master發(fā)送DOWNLOAD指令到ECU,該指令包含了被標(biāo)定量的地址、被標(biāo)定量長(zhǎng)度、被標(biāo)定量的新數(shù)值信息。ECU解析到該指令時(shí),實(shí)現(xiàn)流程如下:
1) 根據(jù)被標(biāo)定量的地址信息,判斷被標(biāo)定量所在的FLASH塊是否已經(jīng)與某一RAM塊建立映射關(guān)系。若已經(jīng)實(shí)現(xiàn)映射,則執(zhí)行2);若沒有實(shí)現(xiàn)映射,則執(zhí)行3)。
2) 該FLASH塊已經(jīng)實(shí)現(xiàn)映射,只需要將被標(biāo)定量的新數(shù)據(jù)拷貝到映射的RAM空間中即可,此時(shí)會(huì)出現(xiàn)兩種情況:若被標(biāo)定量的新數(shù)據(jù)和FLASH中的數(shù)據(jù)一致,執(zhí)行(1);若被標(biāo)定量的新數(shù)據(jù)和FLASH中的數(shù)據(jù)不一致,執(zhí)行(2)。
(1) 當(dāng)被標(biāo)定量的新數(shù)據(jù)和FLASH中的數(shù)據(jù)一致時(shí),即軟件在運(yùn)行時(shí)利用FLASH中的數(shù)據(jù)和RAM中的數(shù)據(jù)效果是一致的,為提高RAM的利用率,此RAM塊可以解除與FLASH的映射。在此過程中需要將寄存器OTAR設(shè)置為0,RABR寄存器的OBASE位設(shè)置為0,RABR寄存器的OVEN位設(shè)置為0,這樣此RAM塊就解除與FLASH的映射關(guān)系,可以為其他FLASH塊的映射提供資源。
(2) 當(dāng)被標(biāo)定量的新數(shù)據(jù)和FLASH中的數(shù)據(jù)不一致時(shí),則原先的映射關(guān)系維持不變,只要將新的標(biāo)定數(shù)據(jù)下載到對(duì)應(yīng)的RAM空間中去即可。
3) 被標(biāo)定量所在的FLASH塊沒有實(shí)現(xiàn)與RAM映射,則首先判斷RAM空間是否充足,判斷RAM空間是否充足的方法是掃描32個(gè)Overlay塊RABR寄存器的OVEN位是否為1,若所有的RAM塊都已實(shí)現(xiàn)映射關(guān)系,則表示空間不足,否則表示空間足夠。若空間足夠,則執(zhí)行(1),若空間不足,則執(zhí)行(2)。
(1) 當(dāng)RAM空間充足時(shí),則該FLASH在與RAM映射的時(shí)候,按照RAM編號(hào)從小到大的順序執(zhí)行,搜尋到編號(hào)為n(n小于32)的RAM未被映射,則需將寄存器OTAR設(shè)置為該FLASH塊的起始地址,OMASK設(shè)置為代表1 KB大小的0xFE0,RABR寄存器的OBASE位設(shè)置為編號(hào)為RAMn的起始地址,RABR寄存器的OVEN位設(shè)置為1,表示映射已經(jīng)使能。以上寄存器設(shè)置完畢之后,將該FLASH塊中的數(shù)據(jù)拷貝到映射之后的RAMn空間中,并將新標(biāo)定數(shù)據(jù)下載到RAMn空間中的所對(duì)應(yīng)的偏移地址中,這樣軟件在運(yùn)行的時(shí)候利用的是RAMn中的新數(shù)據(jù)。
(2) 當(dāng)RAM空間不足時(shí),則不能使能新的映射關(guān)系,此時(shí)應(yīng)該返回拒絕命令給Master,以此通知標(biāo)定人員該標(biāo)定請(qǐng)求被拒絕。在出現(xiàn)標(biāo)定拒絕時(shí),有兩種方案可以進(jìn)行:第一種是將原先不需要的標(biāo)定量更改回默認(rèn)數(shù)值,根據(jù)1)中的(1)可知,此時(shí)可以騰出RAM空間為下一次新的標(biāo)定請(qǐng)求做準(zhǔn)備;第二種方案是將所有已經(jīng)映射的標(biāo)定量固化到FLASH中,這樣所有的RAM空間都會(huì)騰出,為下一次新的標(biāo)定請(qǐng)求做準(zhǔn)備。
上述整個(gè)軟件實(shí)現(xiàn)的流程如圖4所示。
圖4 基于Overlay動(dòng)態(tài)分配的在線標(biāo)定流程
為了驗(yàn)證該軟件是否能夠在RAM空間小于FLASK空間的情況下實(shí)現(xiàn)在線標(biāo)定功能,測(cè)試代碼中增加66個(gè)標(biāo)定變量CAL_0-CAL_65和66個(gè)觀測(cè)變量MEA_0-MEA_65,MEA_0-MEA_65分別被相應(yīng)的標(biāo)定變量賦值,66個(gè)標(biāo)定量在編譯時(shí)被分配到33個(gè)不同的FLASH塊中,其中CAL_0和CAL_1被分配到FLASH0,CAL_2和CAL_3被分配到FLASH1,以此類推。通過在線標(biāo)定CAL_0-CAL_65為不同的數(shù)值,觀測(cè)變量MEA_0-MEA_65是否為相應(yīng)的數(shù)值。測(cè)試結(jié)果如下:
1) 更改標(biāo)定變量CAL_0為1,觀測(cè)變量MEA_0也為1,并且此時(shí)只有一個(gè)Overlay塊實(shí)現(xiàn)FLASH0映射到RAM0,其他Overlay塊不會(huì)被設(shè)置,如圖5所示。
圖5 只有一個(gè)Overlay塊使能
2) 更改標(biāo)定變量CAL_1為2,觀測(cè)變量MEA_1也為2,由于CAL_1和CAL_0被分配在同一個(gè)FLASH空間中,因此此時(shí)還是只有一個(gè)Overlay塊使能,其他Overlay塊不會(huì)被設(shè)置。
3) 更改標(biāo)定量CAL_2-CAL_63的數(shù)值,觀測(cè)變量MEA_2-MEA_63也會(huì)隨之更改,此時(shí)所有的Overlay塊實(shí)現(xiàn)了RAM和FLASH的映射。
4) 更改標(biāo)定量CAL_64的數(shù)值,由于無(wú)RAM資源可用,此時(shí)會(huì)拒絕標(biāo)定人員的請(qǐng)求。
5) 更改標(biāo)定變量CAL_0和CAL_1為默認(rèn)數(shù)值,觀測(cè)變量MEA_0和MEA_1也回到默認(rèn)數(shù)值,此時(shí)FLASH0所映射的RAM0資源已經(jīng)釋放。再次請(qǐng)求更改標(biāo)定量CAL_64的數(shù)值為65,則觀測(cè)變量MEA_64也變?yōu)?5,標(biāo)定請(qǐng)求實(shí)現(xiàn),如圖6所示。
圖6 Overlay塊釋放并被重新使能
綜上測(cè)試結(jié)果,滿足設(shè)計(jì)要求,即在FLASH空間大于RAM空間的情況下,能夠?qū)崿F(xiàn)標(biāo)定量的標(biāo)定請(qǐng)求,而在標(biāo)定RAM空間不足的情況下,可提示標(biāo)定人員釋放不需要的標(biāo)定RAM空間以為后續(xù)標(biāo)定請(qǐng)求做準(zhǔn)備。
針對(duì)傳統(tǒng)的標(biāo)定實(shí)現(xiàn)方式,本文分析了其利弊,提出了基于Overlay動(dòng)態(tài)分配管理的在線標(biāo)定解決方案,其在標(biāo)定FLASH需求大于RAM空間的情況下,仍能實(shí)現(xiàn)所請(qǐng)求的標(biāo)定變量的標(biāo)定功能,而不需要與FLASH空間等大的RAM資源,這在開發(fā)階段對(duì)于節(jié)省控制器的成本是非常有利的。
同時(shí),在FLASH和RAM空間比例較大的時(shí)候,極端情況下如果標(biāo)定人員的標(biāo)定請(qǐng)求非常大,可能會(huì)頻繁出現(xiàn)標(biāo)定量不可被標(biāo)定的情況。針對(duì)這種情況,可有兩種方案解決:一種方案是將使用頻率高的標(biāo)定量集中定義在相同的幾個(gè)FLASH空間中,這樣在映射的時(shí)候,就不會(huì)占用新的RAM空間,保證每一個(gè)映射的RAM區(qū)域利用率非常高;另一種方案是增加其他可用的RAM映射區(qū)域,如每個(gè)核的DSPPR存儲(chǔ)區(qū)域,在軟件集成完畢之后,整個(gè)軟件運(yùn)行的RAM使用情況已經(jīng)明確,可以將暫未利用的RAM區(qū)域用來做映射,這也是后期研究的目標(biāo)。