最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

RT_thread挂载W25Q文件系统

业界 admin 0浏览 0评论

文章目录

  • SPI开发流程
  • 一、新建一个RT_Thread工程
  • 二、配置组件和驱动
  • 三、原理图
  • 四、配置宏
    • 1.定义SPI总线相关的宏
    • 2.打开HAL库函数对SPI总线的支持
  • 五、用CubeMX生成SPI初始化函数
  • 六.添加SPI总线
    • 1.添加SPI初始化
    • 2.执行程序
  • 七、添加SPI从设备(W25Q)
    • 1.新建W25Q文件
    • 2.编写代码
    • 3.编译,下载
    • 4.测试
  • 八、挂载文件系统
    • 1.将W25Q抽象为块设备
    • 2.挂载文件系统
    • 3.编译,下载
  • 九、操作
    • 1.查看所有命令
    • 2.列出文件目录
    • 3.创建文件夹
    • 4.新建文件
    • 5.查看文件
    • 6.删除文件
  • 参考文档

官网文档
https://www.rtthread/document/site/rtthreadstudio/drivers/spi/rtthreadstudio-spi/

SPI开发流程

从官网中可以找到

一、新建一个RT_Thread工程

用RT_thread Studio工具创建一个工程,我这个使用的是ART_PI

然后在main函数中
修改为下面的代码,也就是注释掉 //LOG_D(“Hello RT-Thread!”);

二、配置组件和驱动

把下面这几个组件都开启

详细配置

三、原理图


分别对应的是

SPI1_NSS PA4
SPI1_MOSI PB5
SPI1_MISO PG9
SPI1_SCK PA5

四、配置宏

1.定义SPI总线相关的宏

2.打开HAL库函数对SPI总线的支持

五、用CubeMX生成SPI初始化函数




然后生成代码
找到SPI初始化部分

/**
* @brief SPI MSP Initialization
* This function configures the hardware resources used in this example
* @param hspi: SPI handle pointer
* @retval None
*/
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(hspi->Instance==SPI1)
  {
  /* USER CODE BEGIN SPI1_MspInit 0 */

  /* USER CODE END SPI1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI1_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOG_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**SPI1 GPIO Configuration
    PB5     ------> SPI1_MOSI
    PG9     ------> SPI1_MISO
    PA5     ------> SPI1_SCK
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI1_MspInit 1 */

  /* USER CODE END SPI1_MspInit 1 */
  }

}

六.添加SPI总线

1.添加SPI初始化

将上一步配置的SPI初始化代码添加到board.c下面

2.执行程序

编译,下载
此时SPI1添加成功

七、添加SPI从设备(W25Q)

1.新建W25Q文件

在工程下新建两个文件,别忘了添加头文件路径

2.编写代码

int rt_spi_opt_w25Q128_init(void)
{
  /* 向系统注册SPI1总线上spi10从设备 */
    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);   // W25Q64的片选连接在PA4上
    return 0;
  }

3.编译,下载


设备挂载成功

4.测试

可以执行下面的代码去测试设备是否挂载成功。

八、挂载文件系统

1.将W25Q抽象为块设备

int rt_spi_opt_w25Q128_init(void)
{
  /* 向系统注册SPI1总线上spi10从设备 */
    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);   // W25Q64的片选连接在PA4上
   // return 0;
    /* 将w25Q128抽象为块设备,以便后续挂载文件系统 */
    if(rt_sfud_flash_probe("w25Q128", "spi10"))
    {
        rt_kprintf("rt sfud flash probe success\r\n");
        return RT_EOK;
    }else {
        rt_kprintf("rt sfud flash probe fail\r\n");
        return -RT_ERROR;
    }

}

2.挂载文件系统

/* 挂载文件系统 */
int dfs_mount_init(void)
{
  /* 指定格式化的文件系统,即将w25Q128格式化为ELM文件系统 */
    dfs_mkfs("elm","w25Q128");
    /* 挂载文件系统 */
    if(dfs_mount("w25Q128","/","elm",0,0) == 0)
    {
        rt_kprintf("dfs_mount success\r\n");
                return RT_EOK;
    }
    else {
        rt_kprintf("dfs_mount fail\r\n");
        return -RT_ERROR;
    }
}
/* 系统启动时自动执行 */
INIT_ENV_EXPORT(dfs_mount_init);   // 初始化执行顺序在注册flash之后

注意
程序设置自启动的规则

详细文档:程序自启

3.编译,下载


挂载文件系统成功。

九、操作

1.查看所有命令

help

原来系统的命令

新增的文件系统的命令

2.列出文件目录

3.创建文件夹

4.新建文件

5.查看文件

6.删除文件

参考文档

挂载文件系统:https://wwwblogs/Raowz/p/13069061.html
操作文件系统:https://blog.csdn/ylzmm/article/details/103088146
官方挂载文档:https://www.rt-thread/document/site/rtthreadstudio/drivers/spi/rtthread-studio-spi/
官方操作文档:https://www.rt-thread/document/site/programmingmanual/filesystem/filesystem/
文件系统应用:https://www.rt-thread/document/site/applicationnote/components/dfs/an0012-dfs/

文章目录

  • SPI开发流程
  • 一、新建一个RT_Thread工程
  • 二、配置组件和驱动
  • 三、原理图
  • 四、配置宏
    • 1.定义SPI总线相关的宏
    • 2.打开HAL库函数对SPI总线的支持
  • 五、用CubeMX生成SPI初始化函数
  • 六.添加SPI总线
    • 1.添加SPI初始化
    • 2.执行程序
  • 七、添加SPI从设备(W25Q)
    • 1.新建W25Q文件
    • 2.编写代码
    • 3.编译,下载
    • 4.测试
  • 八、挂载文件系统
    • 1.将W25Q抽象为块设备
    • 2.挂载文件系统
    • 3.编译,下载
  • 九、操作
    • 1.查看所有命令
    • 2.列出文件目录
    • 3.创建文件夹
    • 4.新建文件
    • 5.查看文件
    • 6.删除文件
  • 参考文档

官网文档
https://www.rtthread/document/site/rtthreadstudio/drivers/spi/rtthreadstudio-spi/

SPI开发流程

从官网中可以找到

一、新建一个RT_Thread工程

用RT_thread Studio工具创建一个工程,我这个使用的是ART_PI

然后在main函数中
修改为下面的代码,也就是注释掉 //LOG_D(“Hello RT-Thread!”);

二、配置组件和驱动

把下面这几个组件都开启

详细配置

三、原理图


分别对应的是

SPI1_NSS PA4
SPI1_MOSI PB5
SPI1_MISO PG9
SPI1_SCK PA5

四、配置宏

1.定义SPI总线相关的宏

2.打开HAL库函数对SPI总线的支持

五、用CubeMX生成SPI初始化函数




然后生成代码
找到SPI初始化部分

/**
* @brief SPI MSP Initialization
* This function configures the hardware resources used in this example
* @param hspi: SPI handle pointer
* @retval None
*/
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(hspi->Instance==SPI1)
  {
  /* USER CODE BEGIN SPI1_MspInit 0 */

  /* USER CODE END SPI1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_SPI1_CLK_ENABLE();

    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOG_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**SPI1 GPIO Configuration
    PB5     ------> SPI1_MOSI
    PG9     ------> SPI1_MISO
    PA5     ------> SPI1_SCK
    */
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN SPI1_MspInit 1 */

  /* USER CODE END SPI1_MspInit 1 */
  }

}

六.添加SPI总线

1.添加SPI初始化

将上一步配置的SPI初始化代码添加到board.c下面

2.执行程序

编译,下载
此时SPI1添加成功

七、添加SPI从设备(W25Q)

1.新建W25Q文件

在工程下新建两个文件,别忘了添加头文件路径

2.编写代码

int rt_spi_opt_w25Q128_init(void)
{
  /* 向系统注册SPI1总线上spi10从设备 */
    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);   // W25Q64的片选连接在PA4上
    return 0;
  }

3.编译,下载


设备挂载成功

4.测试

可以执行下面的代码去测试设备是否挂载成功。

八、挂载文件系统

1.将W25Q抽象为块设备

int rt_spi_opt_w25Q128_init(void)
{
  /* 向系统注册SPI1总线上spi10从设备 */
    rt_hw_spi_device_attach("spi1", "spi10", GPIOA, GPIO_PIN_4);   // W25Q64的片选连接在PA4上
   // return 0;
    /* 将w25Q128抽象为块设备,以便后续挂载文件系统 */
    if(rt_sfud_flash_probe("w25Q128", "spi10"))
    {
        rt_kprintf("rt sfud flash probe success\r\n");
        return RT_EOK;
    }else {
        rt_kprintf("rt sfud flash probe fail\r\n");
        return -RT_ERROR;
    }

}

2.挂载文件系统

/* 挂载文件系统 */
int dfs_mount_init(void)
{
  /* 指定格式化的文件系统,即将w25Q128格式化为ELM文件系统 */
    dfs_mkfs("elm","w25Q128");
    /* 挂载文件系统 */
    if(dfs_mount("w25Q128","/","elm",0,0) == 0)
    {
        rt_kprintf("dfs_mount success\r\n");
                return RT_EOK;
    }
    else {
        rt_kprintf("dfs_mount fail\r\n");
        return -RT_ERROR;
    }
}
/* 系统启动时自动执行 */
INIT_ENV_EXPORT(dfs_mount_init);   // 初始化执行顺序在注册flash之后

注意
程序设置自启动的规则

详细文档:程序自启

3.编译,下载


挂载文件系统成功。

九、操作

1.查看所有命令

help

原来系统的命令

新增的文件系统的命令

2.列出文件目录

3.创建文件夹

4.新建文件

5.查看文件

6.删除文件

参考文档

挂载文件系统:https://wwwblogs/Raowz/p/13069061.html
操作文件系统:https://blog.csdn/ylzmm/article/details/103088146
官方挂载文档:https://www.rt-thread/document/site/rtthreadstudio/drivers/spi/rtthread-studio-spi/
官方操作文档:https://www.rt-thread/document/site/programmingmanual/filesystem/filesystem/
文件系统应用:https://www.rt-thread/document/site/applicationnote/components/dfs/an0012-dfs/

发布评论

评论列表 (0)

  1. 暂无评论