Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
easyflash
SPI
STM32H750VB
关于在H750VBT6开发板上使用片外SPI_FLASH的总结
发布于 2021-03-04 10:15:47 浏览:3244
订阅该版
开发板: STM32H750VBT6通用开发板 开发环境: RT-Thread Studio + Cubemx 参考SDK: Art-Pi 首先是在board.h修改配置,使能SPI1 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/f5e38e3de1b187833fd599a5ca20206e.png) 然后在cubemx中配置好使用的IO口,然后复制HAL初始化代码到board.c文件中 包括两个函数 一个是:void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) 另一个是:void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) ![image.png](https://oss-club.rt-thread.org/uploads/20210304/6a85c71de46431de90b8ed8622aace52.png) ![image.png](https://oss-club.rt-thread.org/uploads/20210304/962f6bf73c3768d5612221bb6aae7b86.png) 然后到stm32h7xx_hal_conf.h文件中修改宏定义,使能spi模块 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/634ced5570c872f7d3c5c2dd676937e1.png) 完成后,保存所有修改,然后编译一次。看看有没有错误。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/58a219fb5161e7d9625a3b29e4939b6f.png) 好极了,没有错误。可以下载到板子上,通过终端查看设备list_device,并没有发现SPI设备 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/42841bc49bfced1c60d8fbe8d12dbdb4.png) 这里缺少了一步,需要到rtthread settings中选中“spi组件”,这里使用“sfud”来驱动SPI_FLASH ![image.png](https://oss-club.rt-thread.org/uploads/20210304/432b4f4ca5b7c8871bf8f375c4211cbf.png) ![image.png](https://oss-club.rt-thread.org/uploads/20210304/4f72d5260ec839811fc1924caddba597.png) 保存退出,然后再编译一次,没有错误 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/b8b21772753d31521b63a08ea366c9bb.png) 下载到开发板,然后再次查看设备,list_device可以看到spi1已经正常注册到设备列表中了 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/7f0284099460e4402842212940a71b7b.png) 接下来要写一个spi_flash_sample.c来驱动spi_flash,通过注册一个终端调试命令来注册spi_flash。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/ce5a0c7da2d3b4fd379ee108a6f1753a.png) 编译通过,下载到开发板上,并执行一次刚才注册的终端调试命令。看到成功驱动。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/4490097371bf6d27b69e3fb69c4f04b7.png) 再次打印设备列表,可以看到添加了spi10和W25Q64 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/bb08ffd2a86e3f7808f51d3fbeedff9a.png) 至此完成基本的驱动,并且验证了板子上的SPI_FLASH状态是正常的,那么接下来就要看看如何来实现更高级的控制。 接下来使用fal软件包,来实现对SPI_FLASH的逻辑分区,方便管理存储空间。 打开rtthread settings,配置使用fal软件包,如下图所示: ![image.png](https://oss-club.rt-thread.org/uploads/20210304/2fb5b7e57499b0f181548f656257d41e.png) 保存退出,并编译,会出错,提示找不到文件fal_cfg.h文件,不要急,我们在app目录下新建一个fal_cfg.h文件即可,文件内容如下: ![image.png](https://oss-club.rt-thread.org/uploads/20210304/dee2280fd500eed6fae00218466278fb.png) 有了这个文件之后再次编译通过。那么接下来就是如何来使用这个软件包了。 需要在app目录下,新建一个drv_spi_flash.c的文件,用来初始化spi_flash硬件,并注册到设备上,然后调用fal的初始化函数来初始化逻辑空间。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/4c1336b26fa092c0c0bb735363527c1c.png) 保存退出,然后编译通过,下载到板子上,然后查看终端打印口的打印信息 可以看到fal初始化成功的打印信息 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/e94dc934fd445c9e066291180386ffe0.png) 上述分区表对应于前面fal_cfg.h文件中规划的分区表。 完成了fal分区之后,我们将使用easyflash软件包,因为在fal的逻辑分区中划定了一个逻辑分区名字为easyflash,这个分区就是给这个软件包使用的,这个软件包的功能在于让我们可以方便的存储和读取一些环境变量。 打开rtthread settings,勾选easyflash软件包并进行配置,如下图所示 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/0a350c393cf1be38d00341e8eabe23f7.png) 保存退出,然后编译一次,看看有没有错误。看到很多错误信息,不用紧张,这里面又是缺少了必要的文件。Easyflash有两种驱动方式,一种是基于sfud,一种是基于fal。Sfud是直接在flash使用easyflash,fal是在某个逻辑分区上使用easyflash。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/63069778a8cf76939189ad61c4e58161.png) 这里我们使用的是基于fal的驱动,所以要添加文件ef_fal_port.c。该文件位于软件包的目录下,ports目录内。我们将文件拷贝到软件包目录下的src目录内即可。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/9934e9156e2f589a1b964d313216d50c.png) 再次编译就可以通过了 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/5bf0b975777b3106d58e64ae7973a059.png) 这里还需要修改一个地方,就是el_fal_port,c文件中,宏定义了逻辑分区的名称为“ef”,这里要修改成“easyflash”,对应于前面的fal初始化中的分区表。 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/8f99603f3cffd6f060bda6b7aa1fad21.png) 至此,就完成了fal和easyflash的移植。接下来验证一下easyflash功能是否正常。 我们先在ef_fal_port.c文件中创建一个新的环境变量boot_times,如下图所示: ![image.png](https://oss-club.rt-thread.org/uploads/20210304/16d8bfaf8325178e00fb0b79d59bdd97.png) 然后在app目录下创建一个文件,名为easyflash_sample.c的文件来编写测试代码 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/c58aafa5bd13eea761c15998f7e2c546.png) 然后在终端中敲入调试命令,就可以得到结果 ![image.png](https://oss-club.rt-thread.org/uploads/20210304/b3659510c0084fa75c8d68dd8993c796.png) 至此,关于spi_flash的移植就算是完成了。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
adaphoto
这家伙很懒,什么也没写!
文章
25
回答
44
被采纳
5
关注TA
发私信
相关文章
1
BBB的SPI驱动
2
求个SPI上挂两个或多个设备的使用例子
3
SPI设备有个bug
4
spi flash 的fatfs使用一段时间后读写文件出现故障
5
SPI驱动
6
请教rt_spi_configure函数理解
7
SPI FLASH挂载的问题
8
SPI-FLASH 文件系统 SPIFFS
9
求助一个完整的 spi flash 驱动
10
关于同时使用文件系统与SPI FLASH的问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部