rtthread qspi w25q256 sfud

1.查询qspi配置过程

  文件路径: /drivers/board.h

  

    #define BSP_USING_QSPI     //注释中详细描述了qspi配置过程

2.使能rtt qspi驱动

    打开 RT-Thread Settings
    选择SPI功能后,右键详细配置:分别勾

  

3.使能使用 qspi bsp

  打开 /drivers/board.h

  #define BSP_USING_QSPI  

4.初始化qspi硬件

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

  CoreSrcstm32f7xx_hal_msp.c中将HAL_QSPI_MspInit拷贝到 /drivers/board.c中

  

 5.打开相应的HAL库

  打开 /drivers/ stm32f7xx_hal_conf.h

  使能 #define HAL_QSPI_MODULE_ENABLED
  使能 #define HAL_SPI_MODULE_ENABLED

 6.编译验证

  烧录,在串口终端输入**>list_device   可以看到spi总线

  

7.挂载W25qspi设备

   

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
/**
  *  读取qspi状态寄存器2
 * @param device : qspi设备
 * @return
 */
char w25qxx_read_status_register2struct rt_qspi_device *device)
{
    /* 0x35 read status register2 */
    char instruction = 0x35, status;
    rt_qspi_send_then_recvdevice, &instruction, 1, &status, 1);//读取状态寄存器
    return status;
}
/**
 * qspi写使能
 * @param device : qspi设备
 */
void w25qxx_write_enablestruct rt_qspi_device *device)
{
    /* 0x06 write enable */
    char instruction = 0x06;
    rt_qspi_senddevice, &instruction, 1);//发送数据
}
/**
  *   使能qspi模式
 * @param device : qspi设备
 */
void w25qxx_enter_qspi_modestruct 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_register2device);//读取状态寄存器2
    if !status & 0x02))//判读当前flash通信模式
    {
        status |= 1 << 1;
        w25qxx_write_enabledevice);              //w25q写使能
        write_status2_buf[1] = status;              //写状态寄存器
        rt_qspi_senddevice, &write_status2_buf, 2);//
        rt_qspi_senddevice, &instruction, 1);//设置qspi模式
        rt_kprintf"flash already enter qspi mode
");
        rt_thread_mdelay10);
    }
}

/**
 *挂在设备到qspi总线上
 * @return 挂载状态
 */
static rt_err_t rt_hw_qspi_flash_with_sfud_initvoid)
{
    /*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
");
        return -RT_ERROR;
    }
    rt_kprintf"qspi attach device success
");
    return RT_EOK;
}

/*设备自动初始化 */
INIT_DEVICE_EXPORTrt_hw_qspi_flash_with_sfud_init);

static int rt_hw_qspi_block_device_initvoid)
{
    /*   W25Q256 注册为快设备*/
    if RT_NULL == rt_sfud_flash_probe"W25Q256", "qspi10"))
    {
        rt_kprintf"flash sfud failed
");
        return -RT_ERROR;
    }
    rt_kprintf"flash sfud success
");
    return RT_EOK;
}

/*设备自动初始化 */
INIT_DEVICE_EXPORTrt_hw_qspi_block_device_init);

#define W25Q_SPI_DEVICE_NAME     "qspi10"
static void qspi_w25q_sampleint 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_strncpyname, argv[1], RT_NAME_MAX);
    }
    else
    {
        rt_strncpyname, W25Q_SPI_DEVICE_NAME, RT_NAME_MAX);
    }

    /* 查找 spi 设备获取设备句柄 */
    qspi_dev_w25q = struct rt_spi_device *)rt_device_findname);//根据 SPI 设备名称查找设备获取设备句柄
    if !qspi_dev_w25q)
    {
        rt_kprintf"qspi sample run failed! can't find %s device!
", name);
    }
    else
    {
        /* 方式1:使用 rt_spi_send_then_recv)发送命令读取ID */
        rt_qspi_send_then_recvqspi_dev_w25q, &w25x_read_id, 1, id, 5);//先发送后接收数据id
        rt_kprintf"use rt_qspi_send_then_recv) read w25q ID is:%x%x
", id[3], id[4]);
    }
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORTqspi_w25q_sample, qspi w25q sample);

   

8.创建 快设备

  

9.挂载文件系统

  使能 fatfs
  打开 RT-Thread Settings
  选择fatfs功能后,右键详细配置:分别勾选

  

static int mnt_initvoid)
{
    dfs_mkfs"elm", "W25Q256");//格式化设备
    ifdfs_mount"W25Q256", "/", "elm", 0, 0)==0)//挂载文件
    {
        rt_kprintf"dfs mount success
");
        return RT_EOK;
    }else {
        rt_kprintf"dfs mount failed
");
        return -RT_ERROR;
    }
}
/* 组件自动初始化 */
INIT_COMPONENT_EXPORTmnt_init);

10.编译验证
  烧录,在串口终端输入 ls
  

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注