Stm32 Bootloader整理
一.基本概念
1.IAP
IAP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運(yùn)行過程中對(duì)User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。
通常在用戶需要實(shí)現(xiàn)IAP功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫兩個(gè)項(xiàng)目代碼,第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,而只是通過某種通信管道(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對(duì)第二部分代碼的更新;第二個(gè)項(xiàng)目代碼才是真正的功能代碼。
2.Bootloader
在上述IAP的概念中,bootloader就是其第一個(gè)項(xiàng)目程序。bootloader主要實(shí)現(xiàn)的功能:從串口、USB等媒介接收數(shù)據(jù);存儲(chǔ)和搬運(yùn)數(shù)據(jù);程序跳轉(zhuǎn)等功能。
3.App程序
對(duì)IAP概念中,對(duì)第二個(gè)項(xiàng)目代碼的一種稱呼。
4.Ymodem
YModem協(xié)議是由XModem協(xié)議演變而來的,每包數(shù)據(jù)可以達(dá)到1024字節(jié),是一個(gè)非常高效的文件傳輸協(xié)議。
Ymodem一幀數(shù)據(jù)的結(jié)構(gòu)
第一字節(jié)
第二字節(jié)
第三字節(jié)
Data[0..128]/
Data[0..1027]
倒數(shù)第二字節(jié)
最后一個(gè)字節(jié)
SOH/STX
編號(hào)
編號(hào)反碼
有效數(shù)據(jù)區(qū)
CRC校驗(yàn)高位
CRC校驗(yàn)低位
圖1. Ymodem一幀數(shù)據(jù)的結(jié)構(gòu)
解釋:
第一字節(jié):1.為SOH,有效數(shù)據(jù)包大小為128字節(jié);
2.為STX,有效數(shù)據(jù)包大小為1024字節(jié)。
第二字節(jié):數(shù)據(jù)包的編號(hào),第一幀數(shù)據(jù),編號(hào)為00。
第三字節(jié):數(shù)據(jù)包編號(hào)的反碼,第一幀數(shù)據(jù),為FF。
有效數(shù)據(jù)區(qū):根據(jù)第一個(gè)字節(jié)的內(nèi)容,有效數(shù)據(jù)區(qū)大小為128字節(jié)或1024字節(jié)。
倒數(shù)第二個(gè)字節(jié):CRC校驗(yàn)高位。
最后一個(gè)字節(jié):CRC校驗(yàn)低位。
注:參加CRC校驗(yàn)的只有有效數(shù)據(jù)區(qū)。
第一幀數(shù)據(jù)結(jié)構(gòu):
SOH 00 FF Foo.cNUL[123] CRC(high) CRC(low)
其中:Foo.c為傳輸文件的文件名;有效數(shù)據(jù)區(qū)的剩余字節(jié)用0補(bǔ)足。(就是’