本文目的
- 本文将记录如何在沁恒的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.