OTA目的
由於STPMS的演算法運作相當複雜且由純軟體實現,為能將STPMS維持在最佳狀態或解決問題且能以最有效的遠程做軟件FW更新,並利用STPMS處於車子有無線連網的環境,因此用OTA來達成此目的,條列於下:
- 使用OTA以遠端更新方式自動化更新已解決問題的軟體,避免損失。
- 使用OTA新增功能。
- 以OTA更新做問題檢修及解決問題。
本篇文章是針對STPMS置於TBox內的狀況來闡述STPMS OTA運作技術,同理可用於STPMS置於IVI、行車記錄器的狀況。
OTA整體架構
STPMS OTA是將要更新的軟體 Bin檔以加密的方式打包成要更新FW檔,放置於雲端供TBox以無線網路(如4G)下載置在車子內部的TBox內儲存為Flash檔案。然後依時程安排將此FW檔案以定義好的協議寫入STPMS的Bin檔 Flash內,更新完成後重啟生效即為新軟體運行。詳細如以下說明
- 如上圖所示,主要參與STPMS FW更新的單位包含TBox Server,TBox MCU,STPMS模組。
- TBox MCU與TBox Server間以4G無線網路連結,TBox MCU與STPMS則以NMEA UART連結。
- 提交更新版本的 STPMS FW先置於TBox Server,準備下載至TBox Flash。
- TBox Server依更新STPMS FW的計畫,選定要更新的TBox/STPMS,以4G無線傳輸方式與TBox MCU協作,OTA至TBox Flash以快閃記憶體空間儲存,此程式可採用SFTP(SSH FTP)協議進行或依現有TBox協議執行。
- 當TBox MCU完成STPMS FW儲存至TBox Flash並檢查內容通過後,即以NMEA UART通知STPMS,執行STPMS FW更新。
- STPMS收到通知後即設置為STPMS FW更新模式,然後重啟進入STPMS FW更新運作模式,依訂定的操作協議執行FW更新。
- STPMS程式將新版本STPMS FW寫入Code Flash完成FW更新後,立即做自啟動(Self Reset/Reboot)重啟。重啟成功則恢復新版本STPMS正常功能運作,重啟執行新版本FW。若不成功則STPMS通知TBox MCU此狀況,由TBox MCU重新執行STPMS FW更新程式。
- 詳細程式運作於操作協定一節訂定。
OTA數據包格式
OTA由固定的數據包內容組成,整個軟體Bin檔組成單位即依此數據包格式打包,詳細說明如下:
- 提交更新版本的STPMS FW以做成Binary File(二進位檔案)的方式形成,但檔案內容則是以特定格式的包堆疊起來。
- 此特定格式的包格式定義如圖2所示(未做7E Exception之前),分別說明如下:
- 7E (Byte 1):為此包的Leading Pattern,作為包頭識別用。
- Len (Byte 2~3): 包的長度,包長度依ICD訂定Bytes (不含包頭7E及Len)。
- ID (Byte 4): 此包的特定 ID,依不同包特性訂定。
- SQ (Byte 5~6): 此包的順序號,由1開始依序增加1。
- Payload (Byte 7~Byte M):此包的資料內容,第一個包定義此Image File的Information(資訊)作為更新操作之依據,之後的包都裝FW的資料。
- Padding (Byte M ~ Byte 1040):作為Security Check用,防止被盜用及竄改。M值大小依加密方式隨機調整。
- XOR (Byte 1041): 此包以Byte為單位的XOR校驗碼,不含7E。
- CRC32 (Byte 1042~ Byte 1045): 此包以32Bits為單位的CRC32校驗碼,不含7E,但含XOR。
- 以上均在未做7E, 7D Exception的資料值,之後再做7E, 7D Exception再加上包頭7E。
- 此Binary File可由TBox Server以檔案的方式或特定協定傳送至TBox MCU儲存至TBox Flash,再透過與STPMS的操作協定以包為單位透過UART送給STPMS,最後由STPMS程式轉換為Image Code寫入STPMS Flash,即為在STPMS可執行的映射檔。
- 第一個包為資訊包(SN=0),包長約215 Bytes(依ICD訂定),內容為此更新FW固件的資訊,第二包之後均為固件資料,包長約1045Bytes(依ICD訂定),最後一個包以特定的ID標示,詳細於ICD訂定。
- TBox及STPMS在界定包的起始及終結時均以7E為依據,每一包的頭Byte均為7E,直至下一個7E之前的Byte即為此包的尾Byte。包內容在形成時都會將資料為7E的值轉換為7D 02, 然後7D的值轉換為7D 01,因此7E之後的包內容都不會出現7E直至包尾。
OTA標頭包
要注意的是每一打包好的FW下載檔案的第一個包為特定包(Header Packet),作為更新FW檔案的內容資訊,以能安全無誤地完成更新,詳細如下圖說明。
OTA操作協議
OTA更新協議及流程如下圖所示,TBox於下載好FW更新檔後即可依時程安排啟動更新。啟動方式是先向STPMS送Set Factory Mode進入更新模式,然後再送Upgrade Request後即正式進行更新,詳細如下所述。
- 協議分成兩大部分:一、由TBox Server將STPMS FW檔案或資料方式下載至TBox Flash操作。二、由TBox MCU將STPMS FW檔案或資料內容傳送給STPMS做FW刷新。
- 第一部分操作方法:TBox Server與TBox MCU透過4G無線網路先建立檔案傳輸所需的Socket (如SSH),然後透過檔案傳輸通訊協定(FTP)或特定協定將STPMS FW檔案資料完整下載至TBox Flash快閃記憶體空間。至於用何種Socket及協議可自行做決定,只要能保證STPMS FW檔案能完整無誤下載至TBox Flash即可,但不保證檔案資料內容被劫取或竄改(此Security問題由華大自行做驗證保護防犯)。下載完成後再針對每一包的XOR及CRC32 checksum做檢查是否下載完整無誤。
- 第二部分操作方法及協定如下:
- TBox MCU讀取已下載完成的STPMS FW檔資料內容,讀取方式以包為單位,即7E開頭至下一個7E頭的前一Byte資料內容。
- 先讀取第一個包:內含版本資訊、更新資訊及保全使用(Security Usage),如圖4所示,可依據此資訊檢查下載的檔內容是否正確及判斷是否進行此次更新等,詳細於ICD訂定。
- 確認要進行更新後,把此第一個包透過NMEA UART於開始更新固件程式時先完整發給STPMS做更新內容確認。進入FW Upgrade Mode後執行更新程式,方法及協定如下所述。
- TBox MCU先發進入FW Upgrade Mode的要求給STPMS。
- STPMS確認此請求後,回復TBox MCU可進入FW Upgrade Mode,否則無法進入FW Upgrade Mode則TBox MCU可做Retry。
- 收到進入FW Upgrade Mode並確認執行後,STPMS會先回復要做STPMS自重啟,TBox MCU要等約5秒內讓STPMS完成重啟執行FW Upgrade程式。
- 重啟後,會回復TBox MCU,STPMS已正式進入FW Upgrade Mode,
- TBox即可發第一個Header Packet資訊包給STPMS做確認。
- STPMS確認資訊包後,要先擦除Flash固件更新空間,會通知TBox開始執行擦除及所需擦除時間(約10秒)。
- TBox等待此擦除時間後,STPMS完成擦除再通知TBox已經完成擦除。
- 確認後,TBox即可開始送要更新的STPMS FW包。
- TBox MCU依序由第一個包開始一個一個讀出以7E開頭的特定固件包,以每一包為單位透過NMEA UART發給STPMS。
- STPMS收到後會回(ACK)給TBox MCU:STPMS是否成功接收此包(由校驗碼及相關資訊核對),內含該包的SQ值。
- STPMS於接收完此特定包後也會做Security Check,以確認內容是否遭竄改或錯誤,若有錯誤則回失敗碼給TBox MCU做相應動作,詳細於ICD訂定。
- 若STPMS ACK成功,則TBox MCU繼續送下一個包,若ACK失敗,則TBox MCU要重送到成功(至少Retry三次)。
- 如此依序送完每一個包直至最後一個包送完,STPMS會先回復已經收完整,並含是否接收成功,若接收失敗則回失敗碼。
- 接收完成並成功後,STPMS將執行FW完整更新,更新完成後會通知TBox MCU已完成更新,隨後自行重啟STPMS。約五秒後TBox MCU將開始收到STPMS發出的正常NMEA包,表示更新好的FW運作正常。
- 若STPMS回更新失敗消息,則依據所回的失效碼做相應的後續動作,詳細於ICD訂定。
- 若STPMS FW更新完成並回成功重啟後TBox MCU收到不正常發出的NMEA資訊,TBox MCU則要通知STPMS此異常狀況,並依據STPMS回的碼做相應的後續動作,或自行決定,重新由TBox Server下載FW File再重頭做以上FW更新程式,詳細於ICD訂定。
- 以上若發生更新失敗狀況則TBox MCU須以硬體方式重啟MCU後再嘗試再做一次更新操作,最多重做更新三次。
OTA更新運作
- STPMS 內部更新示意如上圖所示,STPMS Reset後先進入Boot Loader (ROM)程式,然後Boot Loader啟動Boot Run (Flash)程式,Boot Run依據Flash Table決定是要跳轉到(Jump)哪一個版本的FW Image執行程式。在HD8089晶片模組,則只能跳轉至一個FW Image執行程式,若該Image無法正常執行則只能要求TBox MCU再做更新FW程式以恢復正常。在下一代晶片模組的OTA作法,若該Image無法正常執行則可跳轉回原來可以執行的FW Image,此為備份(Redundancy)更新FW Image之效用所在。
- Boot Run在跳轉之前要在Flash Table寫一特定值,標示要跳轉到所要的FW Image執行程式, 並啟動Watchdog Timer運轉,跳轉到的FW程式于執行成功後要到Flash Table寫回執行成功確認值並正常更新Watchdog Timer以不發生重啟。若跳轉的FW程式執行不成功則無法更新Watchdog Timer,於Time Out後就會發生重啟至Boot Run程式執行,這樣Boot Run就會知道剛才的跳轉FW Image執行不成功,並與TBox溝通做後續處理。
- 以上協議操作考慮最差狀況:TBox MCU須重新向TBox Server要求下載可用的FW File再依協定程式做FW更新以恢復STPMS正常運作,則TBox方面要考慮此最差狀況的整體操作流程如何執行。
OTA特色
- STPMS的OTA更新機制具有高可靠特性,能保證不因OTA更新失敗而導致STPMS無法使用的狀況。
- STPMS的OTA FW下載檔案具有錯誤內容偵測及防內容竄改功能。
- STPMS的OTA與TBox間的運作協議簡單可靠,且有重更新功能,大幅降低TBox實現此OTA時的資源投入。
- 弘和科技並提供於TBox運行的程式代碼Source Code,TBox方可以稍做修改即可整合完成,可快速完成STPMS OTA整合功能。
- STPMS同時內建三種checksum檢驗碼,包含CRC32、XOR32及ADD32,更新數據錯誤的機率小於十億分之一。