在汽車電子開發(fā)、測試和售后診斷中,我們經(jīng)常需要對ECU進行固件升級,即“刷新”。
當前市面上的主流方案是通過硬編碼的方式實現(xiàn),但這種方式的缺點也顯而易見:只有懂編程的工程師才能做,一般工程師無法勝任;當需要修改刷新流程的時候,刷新工具必須重新編譯生成軟件。這對于刷新工具的維護極為不便。
針對這一痛點,勤壯提供了一套通過腳本實現(xiàn)的方案。由于采用圖形化配置界面,任何類型的工程師都可以輕松勝任;當需要修改的時候也只需修改腳本本身,無需重新編譯生成整個軟件,相比其他方案更方便、更靈活、更容易上手。
接下來我們按照步驟一一解析:
1.如何配置腳本?
首先我們有必要了解下兩個專有名詞:刷新規(guī)范和QzTitan。
刷新規(guī)范
刷新規(guī)范一般由整車廠制定,詳細定義了刷新的具體步驟。一般分為刷新前、刷新中、刷新后。
刷新前:切換會話、安全訪問等;
刷新中:34/36/37服務執(zhí)行具體刷新動作;
刷新后:完整性校驗、兼容性校驗等。
QzTItan
QzTItan是一款簡單易用的、圖形化的、綜合流程配置工具,文件后綴為ttn和ttb。
QzTItan可用于各種功能的開發(fā),如刷新、IMMO等,同時可用于基礎軟件測試用例的開發(fā),如:診斷測試用例、NM測試用例等,能夠滿足絕大多數(shù)汽車電子開發(fā)中的開發(fā)和測試場景。
由于使用圖形化的配置方式,QzTItan相比于使用硬編碼具有更強的靈活性,使得非軟件開發(fā)人員也能輕松使用。
流程由語句和語句之間的關(guān)系組成。語句采用基礎加擴展的基本方式,軟件預定義了一些常用的語句,如:If、delay、assign、math、service、sendmsg。若預定義語句無法滿足要求,可以通過usercall機制調(diào)用外部自定義函數(shù)。
由于腳本文件是二進制的,所以可以在各種軟硬件平臺上使用。軟件平臺包括:windows、linux、無操作系統(tǒng)環(huán)境,硬件平臺包括:PC、MCU等。
如
用Titan實現(xiàn)刷新規(guī)范
通過不同語句的組合形成一個刷新流程,下面以1001為例來說明如何配置服務:
1.從左側(cè)選中10服務;
2.拖放到中間的畫布;
3.在右側(cè)屬性窗口配置該服務的屬性。
注意:1.什么是FastSA?SA一般由兩條服務組成:RequestSeed和ResponseKey,F(xiàn)astSA指的就是這兩條服務的組合。系統(tǒng)會自動根據(jù)配置調(diào)用SADLL,計算Key。2. 添加語句的方式:拖放。
ttn與ttb的關(guān)系
ttn是ttb的源文件,ttn可生成ttb,ttb不可以反向生成ttn,所以需要注意保存ttn。
2.如何執(zhí)行腳本?
我們首先會用到QzSaturn這個工具,QzSaturn是一款總線和診斷測試工具,是整個工具鏈中的主軟件,文件后綴為:*.stn。
QzSaturn的主要功能包括:報文監(jiān)控、圖形監(jiān)控、總線記錄與回放、全車診斷、工程面板、流程、診斷、刷新、網(wǎng)報報文發(fā)送等,覆蓋了汽車電子開發(fā)與測試中最常用的功能。刷新是其功能之一。
刷新步驟:
1.導入ttb文件
將配置完成的腳本導入到QzSaturn刷新子窗口中。
2.導入刷新數(shù)據(jù)文件
指的是要刷的數(shù)據(jù)文件,支持HEX、S19和BIN。
3.基本參數(shù)的配置
對ECU基本參數(shù)進行配置,如:RequestID、ResponseID。
4.SA算法庫的導入
刷新前一般需要解鎖SA,解鎖算法由SA算法庫實現(xiàn)。在windows平臺的文件后綴為*.dll,DLL本身的制作方法見下文。
5.CRC配置
選擇相應的CRC類型及相關(guān)信息,并點擊按鈕計算CRC。
6.開始刷新。
如何制作SA算法庫?
本質(zhì)是制作一個特定接口的動態(tài)鏈接庫*.dll。
制作工具:Visual Studio 2015
開發(fā)語言:C++/C++
接口函數(shù):extern “C” __declspec(dllexport) UINT32 saturn_key_generate(UINT8* p_seed,
UINT32 seed_length,
UINT32 level,
UINT8* param,
UINT8* p_key,
UINT32 key_length,
UINT32& key_size)
參數(shù)說明:
P_seed:Seed
Seed_length:Seed長度,一般為4;
Level:SA level.以2701為例,應填01
Param:用戶自定義
P_key:Key Buffer,用于存儲函數(shù)返回的Key
Key_length:Key Buffer的指定長度,
Key_size:Key實際長度,一般跟Seed長度一致
兩種方式:源碼封裝方式、二次封裝方式。
源碼封裝方式:直接在圖示位置寫代碼實現(xiàn)SA算法。
二次封裝方式:在圖示位置調(diào)用外部算法庫。一般用于整車廠需要對算法保密的場景。
通過以上操作,可以實現(xiàn)適應不同場景、靈活和高效的刷新。