概述
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文章
17123瀏覽量
350975 -
IAP
+關(guān)注
關(guān)注
2文章
163瀏覽量
24279 -
雅特力
+關(guān)注
關(guān)注
0文章
157瀏覽量
8004 -
AT32
+關(guān)注
關(guān)注
1文章
113瀏覽量
2090
發(fā)布評論請先 登錄
相關(guān)推薦
評論