瞭解更多關於bootloader 的C語言實現,請加我QQ: 1273623966 (驗證信息請填 bootloader)
歡迎諮詢或定製bootloader(在線升級程序)。
上一篇博文介紹的NXP S32K116 serial bootloader, 由於上位機不是專門的bootloader上位機,沒有通信協議,沒有應答機制,所以嚴格意義上講,只能用於學習或研發階段使用,是不可以用於量產產品上。一些客戶看到我的博文,聯繫上我,說他們也有產品用到NXP 這款芯片,讓我做一個可靠性高的,可以用於量產產品上的S32K116 bootloader。爲了響應客戶的要求,我重寫Bootloader程序並命名爲S32Boot_S32K116, 並用C#寫了專門的上位機。上位機和S32Boot之間交互有了通信協議。上位機按照通信協議發送指令和數據,S32Boot接收到數據後,解析數據,完成燒寫,成功則返回ACK (0x15), 出錯則返回NACK (0x51)。通信協議的指令如下:
0x6F: HAND_SHAKE (握手,或叫更新請求)
0x02: WR_MEM (Flash 燒寫)
0x03: ER_MEM (Flash 擦除)
0x04: VF_MEM (Flash 驗證)
0x1F: RUN_APP (跳轉到application)
S32K116板子啓動後運行在S32Boot模式,S32Boot初始化完成後,開始數秒,1秒內收到更新請求就停留在S32Boot, ACK 應答。 超時就檢查Appilcation的有效性,成功就跳轉到Application,出錯就重啓。接收擦除指令,完成擦除,成功就ACK應答,否則NACK應答。接收燒寫指令,完成燒寫,成功就ACK應答,否則NACK應答。最後是跳轉指令,成功就跳轉到Application,否則就重啓。
S32Boot和Application的Memory map 和上一篇博文《自己用C語言寫NXP S32K116 serial bootloader》介紹的memory map 是一樣,這裏就不重複介紹。但是由於有專門上位機的原因,S32Boot_S32K116的實現方式和HyperBoot_S32K116有很大的不同。它的實現邏輯如上面所講,就是接收指令及指令後面的數據,包括地址數據和BIN數據。然後執行指令。
今天主要想介紹我用C#寫的專門的上位機,我爲其取名爲s32Loader,整個用戶界面雖然不是很漂亮,但是很簡潔。如下
s32Loader可以自動識別所有可用的串口端口,點擊下拉框選擇要用的端口,baud rate默認是19200,因爲這是我面前寫的Bootloader使用頻率最高的baud rate, 也可以從下拉框中選擇9600,38400, 115200等其他baud rate. 前提是要和Bootloader的baud rate保持一致。點擊“瀏覽”選好要燒寫的application hex 文件。最後點擊“Start” 後,立馬reset 硬件板,即可完成Application 的升級。有進度顯示。100%完成後Log窗口會出現“Programming done"文字。