關於車用軟體,什麼是A2L檔案?
A2L是一份描述汽車控制器ECU裡面重要參數的一份重要文件(file_name.a2l)。想想看,例如我們在一般 microcontroller 上面宣告並定義一個常數 constant(C 語言),當程式在運行的時候,constant 都不會被程式給改變,但是我們有時候需要調整這些 constant 到達一些“理想”的數值,而這些數值是在程式開發的時候並不知道,而在原始碼 compile 之後,且燒錄到 microcontroller 之後,在測試實際硬體階段時,才會需要去校正那些需要調整的 constant。如果每次調好之後,再回頭去改 source code,然後compile,再燒錄一次到 microcontroller,就會花費很多時間。有時候沒有source code,我們豈不是無法調整參數?如果能夠不用改 source code 、不用 compile 以及燒錄,直接透過外部傳輸去調整那些參數,而且馬上能看到程式執行那些剛調整的的參數並馬上能看到輸出結果,是不是就很方便呢?
為了能夠讓已經燒錄在ECU的程式透過外部通訊傳輸(例如:CAN)去更改這些 constant,這時候我們就必須把這些 constant 安排到記憶體的一塊區域,我們稱為 calibration area(校正區域),並且紀錄那些constant的memory address、data type、data length、conversion rule,有時候還會需要知道該 constant 能調整的最大和最小範圍。為什麼要記錄這些資訊呢?想想看,在沒有source code的情況下,光憑記憶體儲存的“資料”(可能是code,也可能是data)我們是無法解讀出來的。比如說在記憶題位置 0xa0000000 的資料是 0xff,我們要如何解讀它呢?就算有MAP檔的幫助,我們只能知道在哪些位置上是code,哪些是data,但還是無法知道在 data 地址上的資料要如何解讀(不知道是32bit signed integer還是32bit floating point,還是32bit unsigned integer),不同的 data type,解讀出來的數值可能會天差地遠。為了能解決這些困擾,A2L 檔案負責記錄這些資訊,並在外部通訊傳輸上發揮作用。例如:因為在外部通訊傳輸上(例如:CAN),回傳 0xa0000000 地址的資料就是0xff,我們需要額外資訊(也就是 data type)去解讀這個資料。畢竟,我們不能憑空猜測,0xff 這個資料就是 8bit unsigned integer(也就是 255),對吧?
而為了能夠做測量(Measurement)和校正(Calibration)參數,XCP 通訊協定是一個重要的通訊協定,而 XCP 的 driver 必須連同應用程式一起燒錄到ECU 上。如此一來,ECU 和外部 Tester 才有共同溝通的橋樑。否則 ECU 會不知道,從 CAN 收到的資訊代表什麼。 因此 XCP通訊協定和 A2L 檔案可說是息息相關,除了上述的資料描述資訊之外(memory address、data type、data length、conversion rule等等),A2L還記錄了 XCP 傳輸的資訊,像是CAN ID、CAN 傳輸速度、Seed&Key加密鎖、XCP支援指令等等,A2L的這些資訊也會隨著不同的 ECU軟體的不同而有所改變。可見,A2L扮演非常重要的角色,如果 VW 或是 BMW 把一台車的A2L文件外流到別的競爭對手,這可說是嚴重的機密外洩呢!
常見的一般商用軟體如 Vector 的 CANape 就是應用在測量和校正的應用上。