iot-fan

联系: iotfan123#163.com
注意:
1,本博客之内容来源于网上收集以及相关技术人员提供,如果有侵犯到您的权益,请电邮我沟通;
2,本博客之内容乃分享,交流,学习,研究之目的,作者不对内容的真实性,有效性,及时性负责,也不对因本博客的任何内容导致的任何后果负责;
3,本博客之内容禁止转发到CSDN网站,转到别的网站请保留出处.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

本文目的

  • 本文将记录如何在沁恒的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工具进行烧录即可

注意事项

  • wchisptool 对于hex文件处理方式:不连续的hex 填充0x00,而不是0xff,如果涉及到不连续的固件在自己实现的bootloader里进行校验,可能需要烧录时候用户自己进行hex转成bin文件烧录.

工程源码

https://gitee.com/iot-fan/iot-fan_at_cnblogs/tree/master/CH571_CH573/AN/CH573_CH571_user_bootloader_and_app/

扩展资料

实现自定义的BLE OTA

根据blog:CH573/CH571/CH57x 应用与协议栈分离方式实现,在本bootloader中启动蓝牙协议栈,实现蓝牙传输,即可实现蓝牙的DFU.

posted on 2021-07-06 12:06  iot-fan  阅读(1276)  评论(1编辑  收藏  举报