rtthread spiflash (w25q64)
查询spi配置过程
文件路径: /drivers/board.h
/** if you want to use spi bus you can use the following instructions.** STEP 1, open spi driver framework support in the RT-Thread Settings file** STEP 2, define macro related to the spi bus* such as #define BSP_USING_SPI1** STEP 3, copy your spi init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file* such as void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)** STEP 4, modify your stm32xxxx_hal_config.h file to support spi peripherals. define macro related to the peripherals* such as #define HAL_SPI_MODULE_ENABLED*/
使能RTT SPI驱动
打开 RT-Thread Settings-->跟多配置 |组件 |---->RT-Thrad组件 | |---->设备驱动程序 | |---->使能SPI设备驱动程序 √
使能I2C总线
打开 /drivers/board.h#define BSP_USING_SPI1
初始化qspi硬件
通过 stm32cubemx工具使能spi硬件,在一下路径
\Core\Src\stm32f7xx_hal_msp.c中将HAL_SPI_MspInit --> /drivers/board.c中void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle){GPIO_InitTypeDef GPIO_InitStruct = {0};if(spiHandle->Instance==SPI1){/* SPI1 clock enable */__HAL_RCC_SPI1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**SPI1 GPIO ConfigurationPA5 ------> SPI1_SCKPA6 ------> SPI1_MISOPA7 ------> SPI1_MOSI*/GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}}```
打开相应的HAL库
打开 /drivers/ stm32f7xx_hal_conf.h使能 #define HAL_SPI_MODULE_ENABLED
编译验证
烧录,在串口终端输入**
/demo>list_device**
spi1 SPI Bus 0
uart1 Character Device 2
pin Miscellaneous Device 0
- 挂载W25q64设备
添加 spiflash挂载代码
/*** 总线上挂载设备 spi10* @return*/
static int bsp_spi_attach_init(void)
{__HAL_RCC_GPIOA_CLK_ENABLE();rt_err_t ret = rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);// spi10 表示挂载在 spi3 总线上的 0 号设备,PC0是片选,这一步就可以将从设备挂在到总线中。if(ret <0){LOG_E("flash attach spi1 failed");return -RT_ERROR;}return RT_EOK;
}
INIT_DEVICE_EXPORT(bsp_spi_attach_init);
- 编译验证
烧录,在串口终端输入
>list_device
device type ref count
-------- -------------------- ----------
spi10 SPI Device 0
qspi1 SPI Bus 0
uart1 Character Device 2
pin Miscellaneous Device 0
- 设备id读取测试
#define W25Q_SPI_DEVICE_NAME "spi10"static void bsp_spi_w25q_sample(int argc, char *argv[])
{struct rt_spi_device *spi_dev_w25q;char name[RT_NAME_MAX];rt_uint8_t w25x_read_id = 0x90;rt_uint8_t id[5] = {0};if (argc == 2){rt_strncpy(name, argv[1], RT_NAME_MAX);}else{rt_strncpy(name, W25Q_SPI_DEVICE_NAME, RT_NAME_MAX);}/* 查找 spi 设备获取设备句柄 */spi_dev_w25q = (struct rt_spi_device *)rt_device_find(name);//根据 SPI 设备名称查找设备获取设备句柄if (!spi_dev_w25q){rt_kprintf("spi sample run failed! can't find %s device!\n", name);}else{/* 方式1:使用 rt_spi_send_then_recv()发送命令读取ID */rt_spi_send_then_recv(spi_dev_w25q, &w25x_read_id, 1, id, 5);//先发送后接收数据idrt_kprintf("use rt_qspi_send_then_recv() read w25q ID is:%x%x\n", id[3], id[4]);}
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(bsp_spi_w25q_sample, spi w25q sample);
- 创建 快设备
- 使能RTT SFUD (串行 flash通用驱动)
打开 RT-Thread Settings-->跟多配置 |组件 |---->RT-Thrad组件 | |---->设备驱动程序 | |---->使能SPI设备驱动程序 √ | |---->使能串行 flash通用驱动程序(SFUD) √
添加创建快设备代码
/*** 注册为块设备* @return*/ static int bsp_spi_block_device_init(void) {if (RT_NULL == rt_sfud_flash_probe("W25Q64", "spi10")) //注册块设备,这一步可以将外部flash抽象为系统的块设备{LOG_E("flash sfud failed\n");return -RT_ERROR;};return RT_EOK; } /* 导出到自动初始化 */ INIT_DEVICE_EXPORT(bsp_spi_block_device_init);
- 编译验证
烧录,在串口终端输入
list_devicedevice type ref count
-------- -------------------- ----------
W25Q64 Block Device 0
qspi1 SPI Bus 0
uart1 Character Device 2
pin Miscellaneous Device 0
- 使能 fatfs
打开 RT-Thread Settings
选择fatfs功能后,右键详细配置:分别勾选
|
|---->设备虚拟文件系统
| |---->使能设备虚拟文件系统 √
| |---->使能elm chan FatFs √
| |---->elm chan 的FatFs,通用Fat 文件系统模块
| |---->设置要处理的最大扇区大小 4096(根据flash参数决定)
添加挂载文件系统代码
/*** 挂载文件系统* @return*/
static int bsp_spi_flash_mnt_init(void)
{dfs_mkfs("elm", "W25Q64");//格式化设备if(dfs_mount("W25Q64", "/", "elm", 0, 0)==0)//挂载文件{LOG_I("dfs mount success\r\n");return RT_EOK;}else {LOG_E("dfs mount failed\r\n");return -RT_ERROR;}
}
/* 组件自动初始化 */
INIT_COMPONENT_EXPORT(bsp_spi_flash_mnt_init);
- 编译验证
烧录,在串口终端输入
>ls
Directory /:
rtthread spiflash (w25q64)相关推荐
- 【RT-Thread】 TinyUSB挂载成U盘和文件系统,基于STM32F405RG
1.硬件型号\软件版本 MCU:STM32F405RGT6 RT-Thread:v4.1.0 2.CUBEMX配置SPI 既然要将我们的板子挂载成U盘,那么我们的板子必然要有一个片外内存,我的硬件板卡 ...
- 正点原子探索者stm32f407 rt-thread 文件系统使用
硬件说明:正点原子探索者stm32f407,板载SPI-FLASH W25Q128 系统说明:RT-Thread 3.1.2(以上的其他版本也可以) 在rt-thread-v3.1.2\rt-thre ...
- rt-thread ------fal移植
系列文章目录 rt-thread 之 生成工程模板 文章目录 系列文章目录 前言 一.fal是什么? 二.移植 1.片内flash fal移植 step1:使能`RT-Thread Component ...
- RT-Thread FAL 组件使用
RT-Thread FAL 组件使用 FAL 组件开源项目地址:https://gitee.com/RT-Thread-Mirror/fal/tree/master FAL 组件是 RT-Thread ...
- RT-Thread—FAL与EasyFlash组件移植
一.FAL管理与示例 FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理.操作的抽象层,对上层统一了 Flash 及 ...
- 玩转RT-Thread之荔枝派Nano(全志F1C100S) 新手上路
玩转RT-Thread之荔枝派Nano(全志F1C100S) 一.新手上路 --作者:燕十三(flyingcys) blog:http://blog.csdn.net/flyingcys --荔枝派n ...
- RT-Thread Studio驱动SD卡
RT-Thread Studio驱动SD卡 前言 一.创建基本工程 1.创建Bootloader 2.创建项目工程 二.配置RT-Thread Settings 三.代码分析 四.效果验证 总结 前言 ...
- w25q16 SPI RTthread 驱动
参考文档(stm32 w25q128裸机驱动)https://blog.csdn.net/weixin_42108484/article/details/91474489 经测试能够正常读写flash ...
- RT-thread内核之进程间通信
一.进程间通信机制 rt-thread操作系统的IPC(Inter-Process Communication,进程间同步与通信)包含有中断锁.调度器锁.信号量.互斥锁.事件.邮箱.消息队列.其中前5 ...
- .net thread操作串口_听说你不知道 RT-Thread 有个 ringbuffer
在嵌入式开发中,我们经常需要用到 FIFO 数据结构来存储数据,比如任务间的通信.串口数据收发等场合.很多小伙伴不知道 RT-Thread 为我们提供了一个 ringbuffer 数据结构,代码位于: ...
最新文章
- C++多线程简单入门(二)(Windows版)
- linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
- jdk7 linux 32位 安装包 微云网盘下载
- VMware Pro16 安装MacOS 11/12教程
- 前端实现在浏览器网页中录音
- 扫描枪取消回车二维码_如何使条码扫描枪录入完不自动回车呢-百度经验
- 步履蹒跚的中国移动再现用户流失,中国电信成为最大受益者
- Ubuntu下pycharm设定任务栏图标后打开出现问号图标
- 符号检验和置信区间R代码
- IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
- 14.Java- Spring
- 如何将PDF文件转换成PPT
- 编译librtmp for Android
- BWAPP靶场-HTML injection-Reflected(GET)
- HDD深圳站:全生命周期赋能开发者,华为引领应用生态升级
- 使用技巧-Z平台为第三方系统开放接口过程
- 介电常数常用测量方法综述
- 出No core dump will be written. Minidumps are not enabled by default on client versions of Windows
- 爬取招聘数据 | scrapy 前程无忧51job
- 存储备份一体机mysql代理_天融信备份存储一体机
热门文章
- 网络安全实验室—脚本关
- html页面整体隐藏,三种隐藏 HTML 元素的方式
- linux调整逻辑卷大小,调整Linux逻辑卷大小
- matlab中fic算法,基于MatLab的三种群Volterra模型数值求解.pdf
- oom killer java_Linux应用进程消失之谜--Java进程与OOM Killer
- scikit-learn回归类库使用
- STM32 之 HAL库
- java guardedby_java 多线程并发设计模式之三:Guarded suspension 模式
- JAVA多线程设计模式篇 4、Guarded Suspension 模式——等我准备好了再来
- 多模态信息用于推荐系统问题(MMDIN,hyperCTR)