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,更新数据错误的机率小于十亿分之一。