查询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*/
  1. 使能RTT SPI驱动

    打开 RT-Thread Settings-->跟多配置
    |组件
    |---->RT-Thrad组件
    |       |---->设备驱动程序
    |           |---->使能SPI设备驱动程序                    √
    
  2. 使能I2C总线
    打开 /drivers/board.h

    #define BSP_USING_SPI1
    
  3. 初始化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);}}```
    
  4. 打开相应的HAL库
    打开 /drivers/ stm32f7xx_hal_conf.h

    使能 #define HAL_SPI_MODULE_ENABLED
    
  5. 编译验证
    烧录,在串口终端输入**

/demo>list_device**
spi1    SPI Bus              0
uart1    Character Device     2
pin      Miscellaneous Device 0
  1. 挂载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);
  1. 编译验证
    烧录,在串口终端输入
>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);
  1. 创建 快设备
  2. 使能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);
    
  3. 编译验证
    烧录,在串口终端输入
list_devicedevice           type         ref count
-------- -------------------- ----------
W25Q64   Block Device         0
qspi1    SPI Bus              0
uart1    Character Device     2
pin      Miscellaneous Device 0
  1. 使能 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);
  1. 编译验证
    烧录,在串口终端输入
>ls
Directory /:

rtthread spiflash (w25q64)相关推荐

  1. 【RT-Thread】 TinyUSB挂载成U盘和文件系统,基于STM32F405RG

    1.硬件型号\软件版本 MCU:STM32F405RGT6 RT-Thread:v4.1.0 2.CUBEMX配置SPI 既然要将我们的板子挂载成U盘,那么我们的板子必然要有一个片外内存,我的硬件板卡 ...

  2. 正点原子探索者stm32f407 rt-thread 文件系统使用

    硬件说明:正点原子探索者stm32f407,板载SPI-FLASH W25Q128 系统说明:RT-Thread 3.1.2(以上的其他版本也可以) 在rt-thread-v3.1.2\rt-thre ...

  3. rt-thread ------fal移植

    系列文章目录 rt-thread 之 生成工程模板 文章目录 系列文章目录 前言 一.fal是什么? 二.移植 1.片内flash fal移植 step1:使能`RT-Thread Component ...

  4. RT-Thread FAL 组件使用

    RT-Thread FAL 组件使用 FAL 组件开源项目地址:https://gitee.com/RT-Thread-Mirror/fal/tree/master FAL 组件是 RT-Thread ...

  5. RT-Thread—FAL与EasyFlash组件移植

    一.FAL管理与示例 FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理.操作的抽象层,对上层统一了 Flash 及 ...

  6. 玩转RT-Thread之荔枝派Nano(全志F1C100S) 新手上路

    玩转RT-Thread之荔枝派Nano(全志F1C100S) 一.新手上路 --作者:燕十三(flyingcys) blog:http://blog.csdn.net/flyingcys --荔枝派n ...

  7. RT-Thread Studio驱动SD卡

    RT-Thread Studio驱动SD卡 前言 一.创建基本工程 1.创建Bootloader 2.创建项目工程 二.配置RT-Thread Settings 三.代码分析 四.效果验证 总结 前言 ...

  8. w25q16 SPI RTthread 驱动

    参考文档(stm32 w25q128裸机驱动)https://blog.csdn.net/weixin_42108484/article/details/91474489 经测试能够正常读写flash ...

  9. RT-thread内核之进程间通信

    一.进程间通信机制 rt-thread操作系统的IPC(Inter-Process Communication,进程间同步与通信)包含有中断锁.调度器锁.信号量.互斥锁.事件.邮箱.消息队列.其中前5 ...

  10. .net thread操作串口_听说你不知道 RT-Thread 有个 ringbuffer

    在嵌入式开发中,我们经常需要用到 FIFO 数据结构来存储数据,比如任务间的通信.串口数据收发等场合.很多小伙伴不知道 RT-Thread 为我们提供了一个 ringbuffer 数据结构,代码位于: ...

最新文章

  1. C++多线程简单入门(二)(Windows版)
  2. linux中快捷脚本,Linux下Shell编程快捷键大全(日常整理)
  3. jdk7 linux 32位 安装包 微云网盘下载
  4. VMware Pro16 安装MacOS 11/12教程
  5. 前端实现在浏览器网页中录音
  6. 扫描枪取消回车二维码_如何使条码扫描枪录入完不自动回车呢-百度经验
  7. 步履蹒跚的中国移动再现用户流失,中国电信成为最大受益者
  8. Ubuntu下pycharm设定任务栏图标后打开出现问号图标
  9. 符号检验和置信区间R代码
  10. IM群聊消息的已读未读功能在存储空间方面的实现思路探讨
  11. 14.Java- Spring
  12. 如何将PDF文件转换成PPT
  13. 编译librtmp for Android
  14. BWAPP靶场-HTML injection-Reflected(GET)
  15. HDD深圳站:全生命周期赋能开发者,华为引领应用生态升级
  16. 使用技巧-Z平台为第三方系统开放接口过程
  17. 介电常数常用测量方法综述
  18. 出No core dump will be written. Minidumps are not enabled by default on client versions of Windows
  19. 爬取招聘数据 | scrapy 前程无忧51job
  20. 存储备份一体机mysql代理_天融信备份存储一体机

热门文章

  1. 网络安全实验室—脚本关
  2. html页面整体隐藏,三种隐藏 HTML 元素的方式
  3. linux调整逻辑卷大小,调整Linux逻辑卷大小
  4. matlab中fic算法,基于MatLab的三种群Volterra模型数值求解.pdf
  5. oom killer java_Linux应用进程消失之谜--Java进程与OOM Killer
  6. scikit-learn回归类库使用
  7. STM32 之 HAL库
  8. java guardedby_java 多线程并发设计模式之三:Guarded suspension 模式
  9. JAVA多线程设计模式篇 4、Guarded Suspension 模式——等我准备好了再来
  10. 多模态信息用于推荐系统问题(MMDIN,hyperCTR)