本文目的
- 本文將記錄如何在沁恆的risc-v平的藍牙芯片上實現用戶bootloader引導用戶app的方式
- 用戶app包括一般的工程,和藍牙工程
- 本bootloader跟wch芯片內置的bootloader不同,並不燒錄到芯片自帶的bootloader區域.
- 在本例程的基礎上經過簡單的修改,既可以實現各種方式的DFU功能,諸如串口/BLE/USB方式等,只要實現傳輸,校驗,跳轉即可
適用芯片
- CH573/CH571
實現過程
存儲配置
| flash地址 | 備注 | |
|---|---|---|
| user_bootloader | 0x0 - 0x3FFF | |
| user_app | 0x4000 - |
跳轉處理
中斷向量表處理
CH571/CH573 wch 給的例程,中斷向量都是在RAM里面的,一般情況下不用處理中斷向量表的問題.
跳轉方法:
wch 的rsic-v 提供了兩種特權模式:
- 機器模式
- 用戶模式
沁恆的例程提供的代碼默認都是跑在用戶模式下,而這種模式下,直接是不能跳轉成功的
方法1. 修改啟動文件,使代碼運行在機器模式下,然后再跳轉
沁恆的例程的.s文件中,有下面兩行
li t0, 0x88
csrs mstatus, t0
修改成
li t0, 0x1888
csrs mstatus, t0
方法2.在中斷服務程序里面跳轉(本例程使用的方法)
燒錄
使用hex合並工具把hex合並后然后用WCH 的isp工具進行燒錄即可
- 合並工具 https://gitee.com/iot-fan/iot-fan_at_cnblogs/tree/master/Tools/hex_tools
- 燒錄參考 https://www.cnblogs.com/iot-fan/p/13498088.html
注意事項
- wchisptool 對於hex文件處理方式:不連續的hex 填充0x00,而不是0xff,如果涉及到不連續的固件在自己實現的bootloader里進行校驗,可能需要燒錄時候用戶自己進行hex轉成bin文件燒錄.
工程源碼
擴展資料
實現自定義的BLE OTA
根據blog:CH573/CH571/CH57x 應用與協議棧分離方式實現,在本bootloader中啟動藍牙協議棧,實現藍牙傳輸,即可實現藍牙的DFU.
