IAP概述
在應(yīng)用中編程(IAP)是一種在現(xiàn)場(chǎng)通過(guò)MCU通信接口(例如USART、USB、CAN和以太網(wǎng))進(jìn)行固件升級(jí)的方式。
啟動(dòng)微控制器時(shí),可以選擇讓其在以下任一模式運(yùn)行:
- IAP模式,用于執(zhí)行IAP代碼
- 正常模式,用于執(zhí)行應(yīng)用程序代碼
無(wú)論是IAP代碼還是應(yīng)用程序代碼都位于微控制器的內(nèi)置FLASH中,IAP代碼通常存儲(chǔ)在MCU FLASH的第一頁(yè),而用戶應(yīng)用程序代碼則占據(jù)剩余的FLASH區(qū)域。
圖1介紹了IAP操作流程
圖1 IAP操作流程
使用MCU以太網(wǎng)接口實(shí)現(xiàn)IAP
如果有以太網(wǎng)可用,則它通常是嵌入式系統(tǒng)中實(shí)現(xiàn)IAP功能的首選接口,其優(yōu)勢(shì)包含:
高速通信接口(10/100 Mbps)
通過(guò)網(wǎng)絡(luò)(LAN或WAN)進(jìn)行遠(yuǎn)程編程
可以使用FTP、TFTP、HTTP等基于TCP/IP棧的標(biāo)準(zhǔn)應(yīng)用協(xié)議實(shí)現(xiàn)IAP
通過(guò)以太網(wǎng)在AT32F437上實(shí)現(xiàn)IAP
本應(yīng)用筆記將介紹兩種使用以太網(wǎng)通信外設(shè)在AT32F437上實(shí)現(xiàn)IAP的解決方案:
- 使用TFTP(簡(jiǎn)單文件傳輸協(xié)議)的IAP
- 使用HTTP(超文本傳輸協(xié)議)的IAP
這兩種解決方案均基于LwIP棧(2.1.2),它是輕量級(jí)的TCP/IP協(xié)議棧
使用TFTP實(shí)現(xiàn)IAP方法使用TFTP實(shí)現(xiàn)IAP的方法廣泛應(yīng)用于需要具有固件升級(jí)功能的嵌入式系統(tǒng)應(yīng)用中(例如,嵌入式Linux bootloader中)。
TFTP是一種在UDP傳輸層上執(zhí)行的簡(jiǎn)單文件傳輸協(xié)議。此協(xié)議非常適合在局域網(wǎng)環(huán)境中使用。它基于客戶端/服務(wù)器架構(gòu),在這種架構(gòu)中,客戶端會(huì)向服務(wù)器發(fā)出文件傳輸請(qǐng)求(讀取或?qū)懭氩僮鳎?/p>
為實(shí)現(xiàn)IAP,需要在LwIP協(xié)議棧上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的TFTP服務(wù)器,服務(wù)器只須處理來(lái)自PC的TFTP客戶端的寫(xiě)入請(qǐng)求即可。
使用HTTP實(shí)現(xiàn)IAP方法使用HTTP協(xié)議進(jìn)行固件升級(jí)沒(méi)有使用TFTP常見(jiàn),但是在需要通過(guò)Internet進(jìn)行遠(yuǎn)程編程時(shí),這種解決方案就顯得極為有用。這時(shí),需要使用TCP傳輸協(xié)議來(lái)實(shí)現(xiàn)HTTP服務(wù)。
HTTP基于TCP協(xié)議運(yùn)行,它提供了一個(gè)一種以HTML表單形式從Web客戶端(Mozilla Firefox或Microsoft Internet Explorer)發(fā)送一個(gè)二進(jìn)制文件的方式。這稱為HTTP文件上傳(RFC1867)。
本文檔中的后續(xù)章節(jié)將詳細(xì)介紹這兩種IAP方法的實(shí)現(xiàn),并會(huì)對(duì)如何使用軟件進(jìn)行說(shuō)明。
使用TFTP實(shí)現(xiàn)IAP
TFTP概述
TFTP是一種基于UDP的簡(jiǎn)單文件傳輸協(xié)議。文件傳輸由TFTP客戶端發(fā)起,會(huì)向TFTP服務(wù)器發(fā)送讀取或?qū)懭胝?qǐng)求。服務(wù)器確認(rèn)請(qǐng)求后,即開(kāi)始進(jìn)行文件數(shù)據(jù)傳輸。數(shù)據(jù)將以固定大小的塊盡情發(fā)送(例如每塊含512個(gè)字節(jié))。
必須在每個(gè)發(fā)出的數(shù)據(jù)塊都得到接收方確認(rèn)后,才可以發(fā)送下一個(gè)數(shù)據(jù)塊。這種確認(rèn)機(jī)制通過(guò)隨各個(gè)數(shù)據(jù)塊一同發(fā)送的編塊號(hào)來(lái)實(shí)現(xiàn)。數(shù)據(jù)塊小于固定塊大小表示文件傳輸?shù)慕Y(jié)束。
圖2描述了各種TFTP數(shù)據(jù)包的格式:圖2 TFTP數(shù)據(jù)包表1列出了TFTP操作碼。表1 TFTP操作碼
使用TFTP為AT32F437實(shí)現(xiàn)IAP
此IAP實(shí)現(xiàn)由基于LwIP TCP/IP棧的TFTP服務(wù)器組成。此服務(wù)器會(huì)對(duì)遠(yuǎn)程TFTP客戶端(PC)發(fā)來(lái)的寫(xiě)請(qǐng)求做出響應(yīng)。TFTP讀請(qǐng)求會(huì)被忽略。TFTP通常會(huì)將接收到的文件寫(xiě)入到文件系統(tǒng),但是該服務(wù)器卻并非如此,它會(huì)將接受到的數(shù)據(jù)塊寫(xiě)入到MCU FLASH(用戶FLASH區(qū)域中)。注:在這個(gè)實(shí)現(xiàn)過(guò)程中,數(shù)據(jù)塊大小固定為512個(gè)字節(jié)。
圖3 概述了使用TFTP實(shí)現(xiàn)IAP操作的過(guò)程。
圖3 使用TFTP實(shí)現(xiàn)IAP流程圖
使用軟件
要通過(guò)TFTP對(duì)IAP進(jìn)行測(cè)試,需執(zhí)行以下步驟:1. 在iap.h文件中,取消USE_IAP_TFTP選項(xiàng)的注釋。2. 重新編譯軟件。使用生成的映射文件,確保IAP代碼區(qū)域之間沒(méi)有重疊(從地址0x0開(kāi)始),而且用戶FLASH區(qū)域從以下地址開(kāi)始:APP_START_SECTOR_ADDR(在iap.h中定義)。3. 在AT32 FLASH中編寫(xiě)并運(yùn)行軟件程序。4. 要進(jìn)入IAP模式,需要在按住開(kāi)發(fā)版上的USER Key。5. 分配完IP后(可以是靜態(tài)或動(dòng)態(tài)地址),用戶即可啟動(dòng)IAP流程。6. 在PC側(cè),打開(kāi)TFTP客戶端(例如Tftpd64),然后配置TFTP服務(wù)器地址(Tftpd64中的主機(jī)地址)7. 單擊Tftpd64實(shí)用程序中的Put(寫(xiě)入)按鈕,啟動(dòng)文件寫(xiě)請(qǐng)求8. 在IAP操作結(jié)束時(shí),可以復(fù)位開(kāi)發(fā)板并在AT32 FLASH中運(yùn)行剛剛編寫(xiě)的應(yīng)用程序圖4 TFTP64對(duì)話框
使用HTTP實(shí)現(xiàn)IAP
HTTP文件上傳概述
RFC1867中定義了使用HTTP進(jìn)行文件上傳。此文件上傳方法是基于HTTP表單。發(fā)送原始二進(jìn)制數(shù)據(jù)時(shí),要使用HTTP POST方法而不是GET方法。
以下是一個(gè)HTML代碼示例,用于實(shí)現(xiàn)基于表單的文件上傳:
圖5 文件上傳HTML表單的瀏覽器畫(huà)面注:在發(fā)送文件數(shù)據(jù)前,Web客戶端會(huì)首先發(fā)送HTTP頭文件數(shù)據(jù),其中包含諸如文件名稱和內(nèi)容長(zhǎng)度等信息,Web服務(wù)器必須對(duì)其中的一些信息進(jìn)行解析。Web客戶端使用的HTTP頭文件格式并不總是相同。圖6顯示的是Internet Explorer在POST請(qǐng)求中的HTTP頭文件格式。圖7顯示的是Mozilla Firefox的HTTP頭文件格式。HTTP Web服務(wù)器必須能夠處理這些不同的格式。
圖6 IE11 HTTP頭文件格式
圖7 Mozilla Firefox HTTP頭文件格式
使用HTTP在AT32F437上實(shí)現(xiàn)IAP
此IAP實(shí)現(xiàn)由基于LwIP棧的HTTP Web服務(wù)器組成。
在瀏覽器中輸入的AT32的IP地址后,將顯示登錄Web頁(yè)面(圖8)。此登錄Web頁(yè)面只有已獲授權(quán)的用戶才能使用IAP文件上傳功能。
圖8 登錄web頁(yè)面注:1. 默認(rèn)的User ID(用戶ID)為user, Password(密碼)為at322. 如果User ID(用戶ID)或Password(密碼)不正確,登錄Web頁(yè)面會(huì)重新加載。登錄成功后,瀏覽并選擇要上傳到AT32 FLASH的二進(jìn)制文件注:確保二進(jìn)制文件大小不超過(guò)AT32用戶FLASH區(qū)域的總?cè)萘?。單擊Upload(上傳)按鈕后(參見(jiàn)圖x),將向服務(wù)器發(fā)出POST請(qǐng)求。這時(shí),服務(wù)器開(kāi)始擦除用戶FLASH區(qū)域的全部?jī)?nèi)容,等待接受二進(jìn)制文件原始數(shù)據(jù)。然后將街收到的數(shù)據(jù)寫(xiě)入用戶FLASH區(qū)域。注意,要接收的數(shù)據(jù)總長(zhǎng)度信息將從傳輸開(kāi)始時(shí)發(fā)出的HTTP頭文件數(shù)據(jù)中提取。在IAP操作結(jié)束后,Web頁(yè)面將只是IAP操作成功,同時(shí)顯示一個(gè)可用于復(fù)位MCU的按鈕。圖9 文件上傳完成web頁(yè)面
圖10對(duì)使用HTTP實(shí)現(xiàn)IAP方法進(jìn)行了總結(jié)
圖10 使用HTTP實(shí)現(xiàn)IAP的流程圖
使用軟件
要使用HTTP對(duì)IAP進(jìn)行測(cè)試,需執(zhí)行以下步驟:1. 在iap.h文件中,取消選項(xiàng)USE_IAP_HTTP的注釋。2. 重新編譯軟件,使用生成的映射文件,確保IAP區(qū)域代碼之間沒(méi)有重疊(從地址0x0開(kāi)始),而且用戶FLASH區(qū)域從以下地址開(kāi)始:APP_START_SECTOR_ADDR(在iap.h中定義)。3. 在AT32 FLASH中編寫(xiě)并運(yùn)行軟件程序。4. 要進(jìn)入IAP模式,需要再按住開(kāi)發(fā)板上的USER Key。5. 分配完IP地址后(可以是靜態(tài)或動(dòng)態(tài)地址),用戶即可啟動(dòng)IAP流程6. 打開(kāi)Web客戶端(Mozilla Firefox或Internet Explorer),輸入AT32 IP地址7. 會(huì)顯示登錄Web頁(yè)面。在User ID(用戶ID)字段中輸入”user”,在Password(密碼)字段中輸入”at32”,然后按下Login(登錄)按鈕。8. IP操作結(jié)束后,將加載新的Web頁(yè)面,只是文件上傳操作已經(jīng)成功完成。9. 可以按下Reset MCU(復(fù)位MCU)按鈕復(fù)位MCU,然后在AT32 FLASH中運(yùn)行剛剛編寫(xiě)的應(yīng)用程序。注:使用以下Web客戶端對(duì)軟件進(jìn)行測(cè)試:Microsoft Internet Explorer11和Mozilla Firefox 80.0
已知限制
二進(jìn)制文件中添加的額外字節(jié)Internet瀏覽器(Microsoft Internet Explorere或Mozilla Firefox)會(huì)在上傳的二進(jìn)制文件的末尾添加一個(gè)隨機(jī)邊界標(biāo)記(根據(jù)RFC1521規(guī)定,此標(biāo)記不得超過(guò)72個(gè)字節(jié))。在最新的IAP軟件版本中,并沒(méi)有刪除此邊界標(biāo)記,而是在空間足夠的情況下將其存儲(chǔ)在FLASH中。如果沒(méi)有足夠空間,則不會(huì)在FLASH中寫(xiě)入額外字節(jié),也不會(huì)返回錯(cuò)誤。
環(huán)境
硬件配置
1. DM9162以太網(wǎng)模塊2. AT-START-F407開(kāi)發(fā)板3. 以太網(wǎng)線
軟件源碼
MAC地址和IP地址設(shè)置
在netconf.h文件中對(duì)MAC地址進(jìn)行了定義。默認(rèn)的MAC地址固定為:004456:01。在netconf.h文件中對(duì)IP地址進(jìn)行了定義。IP地址可以設(shè)置為靜態(tài)地址,也可以設(shè)置為由DHCP服務(wù)器分配的動(dòng)態(tài)地址。默認(rèn)的靜態(tài)地址為:192.168.81.37??梢酝ㄟ^(guò)在lwipopts.h文件中使能LWIP_DHCP來(lái)選擇DHCP模式。
軟件文件組成
表2 介紹了項(xiàng)目源文件注:表格中沒(méi)有列出標(biāo)準(zhǔn)固件庫(kù)和 LwIP 棧中所使用的文件。
構(gòu)建IAP映像
、為了構(gòu)建IAP映像(將會(huì)使用IAP軟件加載),應(yīng)確保以下幾點(diǎn):1. 編譯/鏈接的軟件必須從用戶FLASH區(qū)域的起始地址開(kāi)始運(yùn)行(此地址應(yīng)與iap.h的APP_START_SECTOR_ADDR中所定義的地址相同)。2. 將向量表的起始地址配置為用戶FLASH區(qū)域的起始地址:A. 在應(yīng)用程序代碼中,使用misc.h/.c驅(qū)動(dòng)程序的NVIC_SetVectorTable函數(shù)來(lái)重新定位應(yīng)用程序加載地址的向量表。例如,將向量表基本位置設(shè)置為0x08010000:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x10000);B. 通過(guò)修改system_at32f4xx.c文件中定義的VECT_TAB_OFFSET常量的值。例如,將向量表基本位置設(shè)置為0x08010000:#define VECT_TAB_OFFSET 0x100003. 編譯后的軟件大小不超過(guò)用戶FLASH區(qū)域的總?cè)萘?。關(guān)于雅特力雅特力科技于2016年成立,是一家致力于推動(dòng)全球市場(chǎng)32位微控制器(MCU)創(chuàng)新趨勢(shì)的芯片設(shè)計(jì)公司,專(zhuān)注于ARM Cortex-M4/M0+的32位微控制器研發(fā)與創(chuàng)新,全系列采用55nm先進(jìn)工藝及ARM Cortex-M4高效能或M0+低功耗內(nèi)核,締造M4業(yè)界最高主頻288MHz運(yùn)算效能,并支持工業(yè)級(jí)別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當(dāng)多元的終端產(chǎn)品成功案例:如微型打印機(jī)、掃地機(jī)、光流無(wú)人機(jī)、熱成像儀、激光雷達(dá)、工業(yè)縫紉機(jī)、伺服驅(qū)控、電競(jìng)周邊市場(chǎng)、斷路器、ADAS、T-BOX、數(shù)字電源、電動(dòng)工具等終端設(shè)備應(yīng)用,廣泛地覆蓋5G、物聯(lián)網(wǎng)、消費(fèi)、商務(wù)及工控等領(lǐng)域。
-
mcu
+關(guān)注
關(guān)注
146文章
17002瀏覽量
350332 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5380瀏覽量
171132
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論