#申请原创# #技术资源# @21ic小管家
本SD卡升级示例的逻辑框图如下
实例分为两个工程程序,一个是bootloader程序,一个是application程序,两个程序的核心功能是基本一致的,仅在部分节点的执行操作上有所不同,原本想使用一个工程来实现的,但对MounRiver Studio的一些设置不太熟悉,暂时使用两个功能来实现。
下面我来介绍一下真个例程的实现过程。
1移植SD SPI驱动(bootloader和application实现方式相同)
将SD SPI驱动添加到工程目录中
MounRiver Studio会自动添加文件路径到工程内(需要刷新目录)
我这里使用的是硬件SPI,因为X035只有一个SPI接口,我使用的是PA4 PA5 PA6 PA7,sdspi_port.c是SD卡SPI驱动的接口文件,里面是有SPI的相关接口函数。
这里重点介绍一下CS管脚的使用,CS有两种控制模式。一种是软件控制。另一种是硬件控制,一般例程中使用软件模式的情况比较多,硬件模式使用的比较少,我的例程中使用的是硬件模式,经过实际测试,控制时序和描述有点差异,实际情况是,当SPI一旦使能,CS脚就会拉低,不会自动拉高,需要禁用SPI才能使CS恢复为高电平,因此CS的控制是通过使能和禁用SPI来实现的。
在初始化配置时,使用硬件模式也是要注意的
其他接口函数如下
至此,SD卡SPI驱动就移植完了,接下来需要一致fatfs文件系统
fatfs 的官方网站:http://elm-chan.org/fsw/ff/00index_e.html
我这里使用的是最新的R0.15 (November 6, 2022)版本
将fatfs文件系统源码添加到工程目录内
刷新IDE目录,查看到添加的文件内容
Documents内是说明文档和例程文件,这里需要排除构建
diskio.c文件是移植的接口文件,里面需要根据实际使用情况实现接口函数
disk_status、disk_initialize、disk_read、disk_write、disk_ioctl等函数
这些函数的具体操作需要调用SD_SPI中的相关API,所有需要添加头文件路径
再将接口函数实现,board_sdspi_if内关联了SD卡SPI驱动
至此,fatfs文件系统的移植就完成,下面就是具体的操作逻辑了
我们先来看一下芯片启动后的升级标志检查
Bootloader部分判断升级标志是否正常,正常就跳转至APP,不正常则停留在Bootloader等待进行升级操作
APP部分对升级标志的检查是判断是否第一次进行入APP,第一次进入APP则写升级标志位正常,否则正常执行APP
升级标志的存放我做了两个地址的示例,为了不占用程序存储区,标志都是存放在用户选择字存储区,这部分的用法厂家的用户手册写的不是很清楚,我经过测试发确认到底怎么用的,具体可以看一下我的另外一篇帖子
厂家用户手册只描述了8个字节(实际使用了4个字(16个字节))的用法,其他地址就没介绍。
当JUMP_FLAG_MODE 1标志存放在用户选择字 Data1
因为USER 和 RDPRT 在系统复位后从用户选择字区域加载。所以使用FLASH_GetUserOptionByte函数可以读取Data1的值
在调试时发现一处错误,
uint32_tFLASH_GetUserOptionByte(void)函数描述错误
返回值已经进行了右移两位,但返回值描述存在错误。
正确的描述应为
The FLASH User Option Bytes values:IWDG_SW(Bit0), RST_STOP(Bit1),RST_STDBY(Bit2) ,RST_MOD(bit[4:3]) ,DATA0(bit[15:8]) and DATA1(bit[23:16]).
当JUMP_FLAG_MODE2 标志存放在APP_UPDATE_FLAG_ADDR地址
整个 用户选择字 存储区的操作函数如下,可以对整个区域地址进行单字写操作
接下来是部分的操作bootloader和APP的一样的
检测到升级文件会有打印信息提示,才会进入到等待升级命令逻辑
启动升级操作时通过串口2下发命令实现的(0xaa 0x01 0x55)
在bootloader中收到升级命令的操作如下
在APP中收到升级命令的操作是清除升级标志,然后跳转至bootloader区,再执行bootloader区升级操作即可。
第一次使用沁恒的risc-v芯片,他们的IAP跳转是由软复位去执行的
先是开启软复位中断
在软复位中断函数内完成起始地址的设定
除了上述代码上的操作为,bootloader和APP工程的.ld文件也需要分别修改
Bootloader的配置如下(起始地址为0大小为20K)
APP的配置如下(起始地址为0x00005000大小为42K)
至此,SD卡进行IAP升级的整个流程就介绍完了
SPI_SD_IAP.zip
(5.67 MB)
|