概述
AT32 CAN IAP快速使用方法
使用CAN進行IAP升級,此示例使用PC上位軟件(IAP_Programmer.exe)通過一個USB轉(zhuǎn)CAN的橋接設(shè)備和目標板進行通信,IAP Demo和橋接設(shè)備默認CAN波特率使用500K。如下是連接示意圖:
- PC通過USB連接USB to CAN Bridge(使用AT-START實現(xiàn)一個轉(zhuǎn)接設(shè)備,代碼參考usb_vcp_bridge_can源代碼)
- USB to CAN Bridge通過CAN Transceiver連接CAN目標板(注意使用CAN必須要使用CAN Transceiver,CANL連接CANL, CANH連接CANH)
圖1.連接示意圖
一、硬件資源
1. USB轉(zhuǎn)CAN橋接板(目前使用一塊AT-START-AT32F403A實現(xiàn)USB轉(zhuǎn)CAN)1) USB(PA11/PA12)2) CAN(PB8/PB9)3) 指示燈LED2/LED3/LED44) AT-START實驗板2. AT-START-AT32F403A CAN IAP目標板1) 指示燈LED2/LED3/LED42) CAN(PB8/PB9)3) AT-START實驗板3. CAN Transceiver轉(zhuǎn)接板1)CAN Transceiver轉(zhuǎn)接板用于USB to CAN Bridge和CAN目標板的連接注意:USB轉(zhuǎn)CAN橋接板的波特率和CAN IAP目標板波特率要配置一致另外要使用CAN通信,必須外接CAN轉(zhuǎn)換芯片。
二、軟件資源
1) ToolRelease
- IAP_Programmer.exe,PC機tool,用于演示IAP升級流程
- IAP_Programmer_V2.x.x, PC tool源代碼
2) SourceCode\utilities
- can_iap_demo,IAP源程序,運行LED2閃爍
- usb_vcp_bridge_can,USB轉(zhuǎn)CAN橋接源程序
- can_app_led3_toggle,app1源程序,運行時LED3閃爍
- can_app_led4_toggle,app2源程序,運行LED4閃爍
注:示例工程基于keilv5建立,若用戶需要在其他編譯環(huán)境上使用,請參考AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates中各種編譯環(huán)境(例如IAR6/7/8,keil 4/5, eclipse_gcc)進行對應(yīng)修改即可。
IAP demo使用
1) 打開can_iap_demo工程源程序,選擇對應(yīng)MCU型號的target編譯后下載到實驗板2) 打開usb_vcp_bridge_can工程源程序,下載到USB轉(zhuǎn)CAN轉(zhuǎn)接板3) 連接轉(zhuǎn)接板和目標板的CANH/CANL4) 將轉(zhuǎn)接板USB接入到PC,可以看到會有對應(yīng)的虛擬串口設(shè)備COMxx5) 打開IAP_Programmer.exe6) 選擇正確的串口、APP下載地址和bin文檔,點擊Download下載,如下圖7) 觀察LED2/3/4閃爍,LED2閃爍can IAP工作,LED3閃爍-app1工作,LED4閃爍-app2工作圖2. IAP demo上位機
AT32 CAN IAP程序設(shè)置
地址分布
表1. 地址分布注:bootloader區(qū)域最后一個扇區(qū),用于存放防止升級過程掉電的flag,用戶編譯修改bootloader時,要保證不覆蓋flag的地址。
執(zhí)行流程
IAP分為Bootloader和App兩部分,應(yīng)用在App中執(zhí)行,升級過程在bootloader中執(zhí)行。程序執(zhí)行整體流程框圖如下:圖3. 程序執(zhí)行流程
bootloader project設(shè)置
1) Keil設(shè)置圖4. bootloader project中address 1在Keil設(shè)置2) bootloader源程序修改Iap.h文件中圖5. bootloader project中address 2在程序中設(shè)置
app project設(shè)置
IAP demo提供了2個app程序供測試用,皆以address 2(0x800 4000)為起始地址。app1 LED3閃爍,app2 LED4閃爍。以app1為例,設(shè)計步驟如下:1) Keil工程設(shè)置圖6. app project中address 2在Keil設(shè)置2) app1源程序設(shè)置圖7. app project向量表偏移在程序中設(shè)置
3) 編譯生成bin文件通過User選項卡,設(shè)置編譯后調(diào)用fromelf.exe,根據(jù).axf文件生成.bin文件,用于IAP更新。通過以上3個步驟,我們就可以得到一個.bin的APP程序,通過bootloader程序即可實現(xiàn)更新。4) 開啟debug app code功能如果在設(shè)計app code過程中需要對app project進行單獨調(diào)試,請按照以下操作。a) 先下載bootloader工程b) 再調(diào)試app工程
Bootloader CAN通信協(xié)議
上位機升級流程
如下下圖是上位機升級流程:
- 獲取設(shè)備信息:包括app起始地址,app flash size大小,sector size大小
- 發(fā)送開始升級命令
- 寫存儲器
- 獲取CRC進行校驗
- 發(fā)送升級完成命令
- 跳轉(zhuǎn)到APP執(zhí)行
具體命令操作參考命令詳解圖8. 上位機升級流程
IAP端下位機通信處理流程
IAP下位機端會通過接收主機端發(fā)送的命令做數(shù)據(jù)處理,包括讀寫數(shù)據(jù),crc校驗等。圖9. IAP端下位機命令注: ACK: 0x79NACK: 0x1F
升級命令詳解
本節(jié)主要說明CAN IAP每條協(xié)議命令的作用和使用方法,包括主機端和設(shè)備端對命令解析的流程。所有命令通過CAN標準幀的ID來確定,CAN每一包數(shù)據(jù)最大8字節(jié),例如Get Info命令,此時CAN標準幀的ID為0。注意:所有命令都使用標準幀數(shù)據(jù)幀來傳遞如下是命令列表
一、Get Info命令
此命令用于獲取APP信息,包括APP起始地址,app flash size大小,sector size大小主機端協(xié)議發(fā)送流程:
二、Upgrade Start命令
獲取設(shè)備信息之后,可以發(fā)送此命令開始升級,設(shè)備端收到此命令之后會去刪除一個app的標志,標志在開始升級。主機端協(xié)議發(fā)送流程:
三、Read Mmeory命令
此命令用于讀取app flash數(shù)據(jù)主機端協(xié)議發(fā)送流程:
四、Write Memory命令
此命令用于寫APP數(shù)據(jù)到存儲器,注意每次寫入的地址必須sector對齊(sector大小可通過GetInfo獲取),數(shù)據(jù)的長度為1個sector大小或者小于1個sector。每個sector的數(shù)據(jù)最好是一次發(fā)完。主機端協(xié)議發(fā)送流程:
五、Get CRC命令
此命令用于獲取指定地址指定大小數(shù)據(jù)的CRC,地址和大小必須4字節(jié)對齊主機端協(xié)議發(fā)送流程:
六、JUMP命令
此命令用于跳轉(zhuǎn)到APP代碼執(zhí)行主機端協(xié)議發(fā)送流程:
七、Upgrade Finish命令
此命令用于設(shè)置升級完成標志。主機端協(xié)議發(fā)送流程:
USB轉(zhuǎn)CAN橋接
USB轉(zhuǎn)CAN橋接使用一塊AT32F403A的AT-START開發(fā)板實現(xiàn),USB端實現(xiàn)一個虛擬串口設(shè)備,轉(zhuǎn)接板通過USB與PC上位機通信,然后通過CAN與下位機進行通信,實現(xiàn)USB與CAN數(shù)據(jù)的透傳功能。注意轉(zhuǎn)接板的CAN波特率與下位機的CAN波特率要配置相同。
數(shù)據(jù)轉(zhuǎn)發(fā)流程
如下是數(shù)據(jù)轉(zhuǎn)發(fā)流程圖10.數(shù)據(jù)轉(zhuǎn)發(fā)流程
USB CAN數(shù)據(jù)轉(zhuǎn)發(fā)
USB轉(zhuǎn)CAN橋接按照CAN協(xié)議進行封裝,封裝格式:標準幀ID(1字節(jié))+幀長(1字節(jié))+數(shù)據(jù)(數(shù)據(jù)最大8字節(jié))
USB數(shù)據(jù)轉(zhuǎn)到CAN總線:
USB到CAN按照一包USB數(shù)據(jù)轉(zhuǎn)成一幀CAN數(shù)據(jù)。收到一包USB數(shù)據(jù)如:0x01 0x02 0x11 0x220x01:表示標準幀ID0x02:表示數(shù)據(jù)長度0x11,0x22:表示具體數(shù)據(jù)
轉(zhuǎn)換成CAN幀后:
ID=0x01DLC=0x02DATA0=0x11DATA1=0x22
CAN總線數(shù)據(jù)轉(zhuǎn)到USB:
CAN同樣按照一幀數(shù)據(jù)轉(zhuǎn)換成一包USB數(shù)據(jù):收到一幀CAN數(shù)據(jù):ID=0x02,DLC=0x03,DATA0=0x11,DATA0=0x22,DATA0=0x33
轉(zhuǎn)換成USB包之后:0x02 0x03 0x11,0x22,0x33
0x02:表示標準幀ID0x03:表示數(shù)據(jù)長度0x11,0x22,0x33:表示具體數(shù)據(jù)
以Write Memory為例寫32字節(jié)數(shù)據(jù)到0x08004000
主機端流程:發(fā)送1:0x31 0x6 0x08 0x00 0x40 0x00 0x00 0x20(ID+長度+6字節(jié)數(shù)據(jù))接收1:0x31 0x01 0x79(ID+長度+ACK)發(fā)送2:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+長度+8字節(jié)數(shù)據(jù))發(fā)送3:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+長度+8字節(jié)數(shù)據(jù))發(fā)送4:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+長度+8字節(jié)數(shù)據(jù))發(fā)送5:0x31 0x8 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA 0xAA(ID+長度+8字節(jié)數(shù)據(jù))
-
mcu
+關(guān)注
關(guān)注
146文章
17317瀏覽量
352631 -
IAP
+關(guān)注
關(guān)注
2文章
164瀏覽量
24388 -
雅特力
+關(guān)注
關(guān)注
0文章
168瀏覽量
8142 -
AT32
+關(guān)注
關(guān)注
1文章
118瀏覽量
2164
發(fā)布評論請先 登錄
相關(guān)推薦
通過Ymodem創(chuàng)建IAP應(yīng)用程序
在AT32微控制器上創(chuàng)建IAP by USB HID應(yīng)用程序的方法
在AT32微控制器上創(chuàng)建Multi MCU IAP應(yīng)用程序的方法
在AT32微控制器上創(chuàng)建IAP by Ymodem應(yīng)用程序的方法
在AT32微控制器上創(chuàng)建IAP by Kermit應(yīng)用程序的方法
雅特力攜高效能AT32 MCU“芯”動亮相ICCAD 2020
雅特力攜高性能AT32 MCU精彩亮相全球MCU生態(tài)發(fā)展大會

AN0001 AT32 IAP 使用 USART

評論