日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

rtthread qspi w25q256 sfud

發(fā)布時間:2023/12/19 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 rtthread qspi w25q256 sfud 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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狀態(tài)寄存器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);//讀取狀態(tài)寄存器
    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);//發(fā)送數(shù)據(jù)
}
/**
  *   使能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);//讀取狀態(tài)寄存器2
    if (!(status & 0x02))//判讀當前flash通信模式
    {
        status |= 1 << 1;
        w25qxx_write_enable(device);              //w25q寫使能
        write_status2_buf[1] = status;              //寫狀態(tài)寄存器
        rt_qspi_send(device, &write_status2_buf, 2);//
        rt_qspi_send(device, &instruction, 1);//設置qspi模式
        rt_kprintf("flash already enter qspi mode
");
        rt_thread_mdelay(10);
    }
}

/**
 *掛在設備到qspi總線上
 * @return 掛載狀態(tài)
 */
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
");
        return -RT_ERROR;
    }
    rt_kprintf("qspi attach device success
");
    return RT_EOK;
}

/*設備自動初始化 */
INIT_DEVICE_EXPORT(rt_hw_qspi_flash_with_sfud_init);

static int rt_hw_qspi_block_device_init(void)
{
    /*   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_EXPORT(rt_hw_qspi_block_device_init);

#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);//根據(jù) SPI 設備名稱查找設備獲取設備句柄
    if (!qspi_dev_w25q)
    {
        rt_kprintf("qspi sample run failed! can't find %s device!
", name);
    }
    else
    {
        /* 方式1:使用 rt_spi_send_then_recv()發(fā)送命令讀取ID */
        rt_qspi_send_then_recv(qspi_dev_w25q, &w25x_read_id, 1, id, 5);//先發(fā)送后接收數(shù)據(jù)id
        rt_kprintf("use rt_qspi_send_then_recv() read w25q ID is:%x%x
", id[3], id[4]);
    }
}
/* 導出到 msh 命令列表中 */
MSH_CMD_EXPORT(qspi_w25q_sample, qspi w25q sample);

   

8.創(chuàng)建 快設備

  

9.掛載文件系統(tǒng)

  使能 fatfs
  打開RT-Thread Settings
  選擇fatfs功能后,右鍵詳細配置:分別勾選

  

static int mnt_init(void)
{
    dfs_mkfs("elm", "W25Q256");//格式化設備
    if(dfs_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_EXPORT(mnt_init);

10.編譯驗證
  燒錄,在串口終端輸入 ls
  

總結

以上是生活随笔為你收集整理的rtthread qspi w25q256 sfud的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。