查询qspi配置过程

文件路径: /drivers/board.h

/*-------------------------- QSPI CONFIG BEGIN --------------------------*//** if you want to use qspi you can use the following instructions.** STEP 1, open qspi driver framework support in the RT-Thread Settings file** STEP 2, define macro related to the qspi*                 such as     #define BSP_USING_QSPI** STEP 3, copy your qspi init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file*                 such as     void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)** STEP 4, modify your stm32xxxx_hal_config.h file to support qspi peripherals. define macro related to the peripherals*                 such as     #define HAL_QSPI_MODULE_ENABLED**/
#define BSP_USING_QSPI

注释中详细描述了qspi配置过程,

1使能rtt qspi驱动

  • 打开 RT-Thread Settings
    选择SPI功能后,右键详细配置:分别勾选
|
|---->设备驱动程序
|       |---->使能SPI总线/设备驱动程序     √
|               |---->使能QSPI模式           √

2 使能使用 qspi bsp

  • 打开 /drivers/board.h
    使能 #define BSP_USING_QSPI

3 初始化qspi硬件

通过 stm32cubemx工具使能qspi硬件,在一下路径

\Core\Src\stm32f7xx_hal_msp.c中将HAL_QSPI_MspInit拷贝到 /drivers/board.c中


void HAL_QSPI_MspInit(QSPI_HandleTypeDef* qspiHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(qspiHandle->Instance==QUADSPI){/* QUADSPI clock enable */__HAL_RCC_QSPI_CLK_ENABLE();__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();__HAL_RCC_GPIOD_CLK_ENABLE();/**QUADSPI GPIO ConfigurationPE2     ------> QUADSPI_BK1_IO2PB2     ------> QUADSPI_CLKPB10     ------> QUADSPI_BK1_NCSPD11     ------> QUADSPI_BK1_IO0PD12     ------> QUADSPI_BK1_IO1PD13     ------> QUADSPI_BK1_IO3*/GPIO_InitStruct.Pin = GPIO_PIN_2;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI;HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_10;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF9_QUADSPI;HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);}
}

4 打开相应的HAL库

  • 打开 /drivers/ stm32f7xx_hal_conf.h
    使能 #define HAL_QSPI_MODULE_ENABLED
    使能 #define HAL_SPI_MODULE_ENABLED

5 编译验证

烧录,在串口终端输入**/demo>list_device**

qspi1    SPI Bus              0
uart1    Character Device     2
pin      Miscellaneous Device 0

可以看到spi总线

挂载W25qspi设备

  • 添加 qspiflash挂载代码
/***  读取qspi状态寄存器2* @param device : qspi设备* @return*/
char w25qxx_read_status_register2(struct rt_qspi_device *device)
{/* 0x35 read status register2 */char instruction = 0x35, status;rt_qspi_send_then_recv(device, &instruction, 1, &status, 1);//读取状态寄存器return status;
}
/*** qspi写使能* @param device : qspi设备*/
void w25qxx_write_enable(struct rt_qspi_device *device)
{/* 0x06 write enable */char instruction = 0x06;rt_qspi_send(device, &instruction, 1);//发送数据
}
/***   使能qspi模式* @param device : qspi设备*/
void w25qxx_enter_qspi_mode(struct rt_qspi_device *device)
{char status = 0;/* 0x38 enter qspi mode */char instruction = 0x38;char write_status2_buf[2] = {0};/* 0x31 write status register2 */write_status2_buf[0] = 0x31;status = w25qxx_read_status_register2(device);//读取状态寄存器2if (!(status & 0x02))//判读当前flash通信模式{status |= 1 << 1;w25qxx_write_enable(device);              //w25q写使能write_status2_buf[1] = status;              //写状态寄存器rt_qspi_send(device, &write_status2_buf, 2);//rt_qspi_send(device, &instruction, 1);//设置qspi模式rt_kprintf("flash already enter qspi mode\n");rt_thread_mdelay(10);}
}/***挂在设备到qspi总线上* @return 挂载状态*/
static rt_err_t rt_hw_qspi_flash_with_sfud_init(void)
{/*W25Q256挂在qspi总线上*/rt_err_t ret = stm32_qspi_bus_attach_device("qspi1", "qspi10", RT_NULL, 4, w25qxx_enter_qspi_mode, RT_NULL);if (ret != RT_EOK){rt_kprintf("qspi attach device failed\n");return -RT_ERROR;}rt_kprintf("qspi attach device success\n");return RT_EOK;
}/*设备自动初始化 */
INIT_DEVICE_EXPORT(rt_hw_qspi_flash_with_sfud_init);
  • 编译验证
    烧录,在串口终端输入
    list_device

device           type         ref count
-------- -------------------- ----------
qspi10   SPI Device           0
qspi1    SPI Bus              0
uart1    Character Device     2
pin      Miscellaneous Device 0
- 设备id读取测试
```c#define W25Q_SPI_DEVICE_NAME     "qspi10"static void qspi_w25q_sample(int argc, char *argv[])
{struct rt_spi_device *qspi_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 设备获取设备句柄 */qspi_dev_w25q = (struct rt_spi_device *)rt_device_find(name);//根据 SPI 设备名称查找设备获取设备句柄if (!qspi_dev_w25q){rt_kprintf("qspi sample run failed! can't find %s device!\n", name);}else{/* 方式1:使用 rt_spi_send_then_recv()发送命令读取ID */rt_qspi_send_then_recv(qspi_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(qspi_w25q_sample, qspi w25q sample);

可以看到spi总线 和 QSPI设备

创建 快设备

  • 使能 SFUD
    打开 RT-Thread Settings
    选择SPI功能后,右键详细配置:分别勾选
|
|---->设备驱动程序
|       |---->使能SPI总线/设备驱动程序     √
|               |---->使能QSPI模式           √
|               |---->使能串行Flash通用驱动程序(SFUD)              √
|                   |---->使能QSPI模式                               √
|                   |---->使能自动探针探测Flsh JEDEC SFDP            √
|                   |---->使能Flash 芯片信息表                      √
  • 添加创建快设备代码
/*** 创建块设备* @return*/
static int rt_hw_qspi_block_device_init(void)
{/*   W25Q256 注册为快设备*/if (RT_NULL == rt_sfud_flash_probe("W25Q256", "qspi10")){rt_kprintf("flash sfud failed\n");return -RT_ERROR;}rt_kprintf("flash sfud success\n");return RT_EOK;
}/*设备自动初始化 */
INIT_DEVICE_EXPORT(rt_hw_qspi_block_device_init);
  • 编译验证
    烧录,在串口终端输入
    list_device

device           type         ref count
-------- -------------------- ----------
W25Q256  Block Device         0
qspi10   SPI Device           0
qspi1    SPI Bus              0
uart1    Character Device     2
pin      Miscellaneous Device 0

可以看到spi总线 和 QSPI设备 快设备

挂载文件系统

  • 使能 fatfs
    打开 RT-Thread Settings
    选择fatfs功能后,右键详细配置:分别勾选
|
|---->设备虚拟文件系统
|       |---->使能设备虚拟文件系统     √
|               |---->使能elm chan FatFs       √
|                       |---->elm chan 的FatFs,通用Fat 文件系统模块
|                               |---->设置要处理的最大扇区大小               4096(根据flash参数决定)
  • 添加挂载文件系统代码
static int mnt_init(void)
{dfs_mkfs("elm", "W25Q256");//格式化设备if(dfs_mount("W25Q256", "/", "elm", 0, 0)==0)//挂载文件{rt_kprintf("dfs mount success\r\n");return RT_EOK;}else {rt_kprintf("dfs mount failed\r\n");return -RT_ERROR;}
}
/* 组件自动初始化 */
INIT_COMPONENT_EXPORT(mnt_init);

注意:
挂载文件系统过程中可能出现
[E/DFS] File system (elm) was not found.
是由于程序先执行了挂载文件系统,但是文件系统并未准备完成
INIT_COMPONENT_EXPORT(elm_init);
可以可能到elm的初始化也是在组件层,,因此挂载文件系统可以将其改为应用自动初始化
INIT_APP_EXPORT(mnt_init);

  • 编译验证
    烧录,在串口终端输入
    ls
Directory /:

rtthread qspi w25q256相关推荐

  1. 1.25 Cubemx_STM32H743II—QSPI

    文章目录 1.QSPI--W25Q256介绍 1.1 地址分配 1.2 特征 1.3 硬件框图 1.4 时序图 1.3 QSPI 的 1 线,2 线,4 线,SDR 和 DDR 模式 1.3.1 1线 ...

  2. 教程:AT32F435 QSPI 读写W25Q256

    本文使用的是雅特力 AT32F435VGT7作为测试QSPI接口的单片机主要参数如下: 封装:LQFP100 Flash:1024KB RAM:384KB 最大主频:288MHz QSPI接口Flas ...

  3. RT-Thread 基于QSPI驱动LY68L6400-SRAM

    前言 使用的是RTThread 标准版,主控是STM32H743,SRAM是LY68L6400,使用QSPI QSPI和SPI的区别 个人理解最大的区别就是SPI是串行,数据输出,而QSPI跟像并行输 ...

  4. stm32qspi内存映射_stm32 QSPI内存映射模式

    使用Stm32 F767,需要使用内存映射模式,参考STM32F769_DISCO开发板的源码,使用了内存映射模式.用来驱动W25Q256,参数如下: //---------------------- ...

  5. STM32F7xx —— QSPI

    STM32F7xx -- QSPI 目录 STM32F7xx -- QSPI 一.QSPI 二.几个重要的函数 三.几个重要的结构 四.QSPI接口设计(仅供参考) 五.QSPI驱动W25Q256 一 ...

  6. rt-thread通过spi连接W25Q32后无法读取ID

    注意,cs引脚必须由rtt控制,但是我这个cs引脚用的是PA15,它默认是jlink的引脚,所以首先要将jlink禁用,如下: rcu_periph_clock_enable(RCU_AF);rcu_ ...

  7. 【RT-Thread Smart】ART-Pi Smart 开发板开箱及爱之初次体验

    ART-Pi Smart 开发板开箱及爱之初次体验 首先, 感谢RT=Thread给的试用机会, 感谢熊大的指导. 本文ART-Pi Smart开箱及初次体验内置应用 标题开箱 收到有几天了.我们一步 ...

  8. STM32H7外设配置速查【QSPI部分】

    QSPI协议 QSPI是Queued SPI(队列串行外围接口)的缩写,是由摩托罗拉公司推出的SPI协议的一个扩展,比SPI应用更加广泛,现在的FLASH.SRAM等存储器大多支持QSPI协议--QS ...

  9. IOT-OS之RT-Thread(十一)--- FAL分区管理与easyflash变量管理

    文章目录 一.FAL管理与示例 1.1 FAL软件包源码获取 1.2 FAL管理 1.3 FAL移植 1.4 FAL使用示例 二.DFS挂载到FAL分区示例 三.Easyflash移植到FAL分区示例 ...

  10. 【RT-Thread】nxp rt10xx SFUD和FAL组件搭建与使用

    开发前准备 硬件平台:nxp rt10xx单片机 IDE: Keil spi设备驱动框架已经搭建完毕(本章使用spi2,flash挂载在该位置) SFUD 简介 SFUD 全称 Serial Flas ...

最新文章

  1. WinSock五种I/O模型的性能分析
  2. 修改unity变量名但不丢失序列化值
  3. layui 自定义request_layui中使用自定义数据格式对数据表格进行渲染
  4. 每日一句:We are a happy crew in our office.
  5. openstack版本历史
  6. RHEL7.0手动安装
  7. asp.net获取ip地址的方法
  8. 单播、多播(组播)和广播的区别
  9. firebug尺寸标尺消失不显示问题
  10. 摩尔庄园一直显示服务器,《摩尔庄园手游》一直显示获取远端资源号介绍 进不去怎么办...
  11. 朴实无华,25个常用Matplotlib图的Python模板代码
  12. TiDB 的现在和未来
  13. 2-2日期时间类型基础
  14. 通俗易懂理解几何光学(六)光学系统的像质评价
  15. 基于51单片机的智能汽车雨刮器的程序设计proteus仿真
  16. spring简单教程
  17. 数学对于人类意味着什么
  18. 表单验证 手机号输入框
  19. 存储器的整体概述(内存、外存、ROM、RAM)
  20. 在fluent计算时如何设置非稳态时的时间步长

热门文章

  1. sklearn——一元线性回归
  2. 微信支付:不支持虚拟货币交易 如发现违规行为将予以清退处理
  3. 鬼谷八荒steam修改器|鬼谷八荒多功能修改器
  4. SAAS-HRM-day4
  5. cf 684D - Traps
  6. 惯性导航系统--百科笔记
  7. Bex5文档服务器,不通过登录直接打开BeX5的首页和功能页的url是什么?
  8. js html导出表格数据格式文件格式,js导出excel表格文件带格式
  9. MySQL数据库卸载手册
  10. 差分进化算法_差分进化变体-JADE