战舰V3系列04:添加spiflash驱动及文件系统

本文档详细介绍了如何在STM32F103ZE的战舰V3开发板上添加SPIFlash驱动,并挂载文件系统。首先,基于CubeMX配置SPI2中断和参数,接着在menuconfig中启用SPI和SFLASH驱动。在确认SPIFlash型号后,创建并挂载块设备,通过mount/unmount命令管理文件系统。最后,实现了同时挂载SD卡和SPIFlash,允许在两者之间进行文件操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

战舰V3系列04:添加spi flash驱动及文件系统

本系列以 oneos2.3.0 提供的 STM32F103ZE 模板为基础,将 oneos 在战舰 V3 上运行起来,并逐步适配相关外设,计划周更

本系列相关代码将上传 gitee 供测试体验,仓库: https://gitee.com/dreamfly233/OneOS/tree/projects_OneOS-v2.3.0/

这是本系列的第4期,添加spi flash驱动,并进行挂载文件系统的实验,同时实现与SD卡同时挂载使用

参考文档:

准备项:

复制上个教程的sstm32f103zet6-atk-warship_v3-sdcard文件夹,并重命名为stm32f103zet6-atk-warship_v3-sdcard-spiflash

cubemx配置:

下面是战舰V3 spi flash部分的原理图:
F_CS片选引脚为PB12

打开projects\stm32f103zet6-atk-warship_v3-sdcard-spiflash\board\CubeMX_Config 下 的 cubemx 工程文件(CubeMX_Config.ioc),参照原理图进行配置:

勾选使能SPI2的中断:


检查spi的配置参数,一般默认即可

完成以上配置后点击GENERATE CODE生成代码

menuconfig配置及生成工程

在stm32f103zet6-atk-warship_v3-sdcard-spiflash文件夹打开oneos-cube并进入menuconfig

定位到 Drivers→ SPI下,勾选Using SPI Bus/Device device drivers


定位到Drivers→ SFLASH,勾选support sflash drivers项

  • spiflash的日志同样依赖dlog输出,若上一步勾选了sflash debug information项,确保dlog已勾选即可

定位到Drivers→ SFLASH→ support sflash drivers → sflash supporte pre-defined chip info项,勾选上自己的spi flash型号,多余的型号可不勾选:

  • 注意:战舰开发板前期为W25Q128,后期可能为NM25Q128,根据板上丝印自行确定

确保这里的文件系统已使能:

按esc退出保存配置,并使用scons --ide=mdk5生成mdk工程

打开project.uvprojx工程

分区表在board\ports\fal_cfg.c文件,参考下图修改(注意,该文件在fal_part.c通过include被包含,该.c文件无需也不能手动加入工程编译)
w25q128:128Mb(16兆字节)的分区表参考

编译下载,可在shell看到启动信息和分区表

如下图:这里识别到了flash型号W25Q128

在shell中使用device查看生成的设备:


这里不太明白sfbus.spi2被注册为字符设备的作用

spi挂载文件系统测试

  • 注意:spi flash需要在挂载前通过分区名创建块设备,使用fal_blk_device_create函数

由于需要同时挂载2个设备,将sdmmc_test.c从工程移除,新建一个fs_mount_manage.c并加入工程
创建一个mount函数和对应的unmount函数管理设备挂载,简单参考Linux的mount命令实现:


使用方式:在shell使用mount/unmount命令实现挂载/卸载文件系统
我们先简单测试一下将spi flash挂载到根目录,使用 “mount filesystem /” 命令将filesystem块设备挂载到根目录:

  • 注意:首次使用spi flash前需要在filesystem块设备上创建文件系统,若挂载失败,尝试调用mkfs命令创建文件系统再次挂载:“mkfs -t fat filesystem
  • mkfs命令将格式化该块设备,确保没有重要文件(若操作sd0将对SD卡进行格式化)

若要挂载SD卡,可以卸载spi flash,然后挂载sd0:

若要同时挂载,需要先将一个设备挂载到根目录,若挂载路径不存在,则需要创建另一个设备的挂载路径(即创建文件夹),然后将另一设备挂载到该路径:


此时SD卡和spi flash均已挂载,可以正常操作SD卡和spi flash内的文件,或互相拷贝、移动文件

<think>好的,用户需要查找关于STM32F1战舰V3开发板和W25Q128闪存芯片的资料,包括数据手册、示例代码和配置教程。首先,我需要回顾已有的引用内容,看看哪些信息可以直接使用。 根据引用[4],开发板使用了W25Q128作为SPI Flash,连接在SPI1上,用于存储字库。这说明开发板与W25Q128的硬件连接已经确定,SPI1接口对应的引脚可能需要参考原理图。此外,引用[5]提到使用STM32 Cube IDE和HAL库驱动W25Q128,包括读写擦除操作,并附有测试结果,这可能包含示例代码的部分。 接下来,用户需要数据手册。通常,W25Q128的数据手册可以在制造商如Winbond的官网上找到,或者通过第三方资料库获取。需要建议用户搜索具体型号的数据手册,并注意版本。 关于示例代码,引用[4]和[5]都涉及到了W25Q128的使用。引用[5]尤其提到了HAL库的驱动代码,用户可以参考这部分内容。正点原子通常会在他们的资料中提供示例代码,可能需要到他们的官网或资料包中查找,比如SPI Flash操作的相关例程。 配置教程方面,需要指导用户如何配置SPI外设,包括引脚初始化和SPI参数设置。引用[4]中的硬件连接信息(SPI1)和引用[5]的HAL库驱动部分可以作为基础。同时,正点原子的教程可能详细说明了这些步骤,因此建议用户查阅他们提供的文档或BSP说明,如引用[3]提到的RT-Thread BSP说明,可能包含外设配置的指导。 还需要注意用户可能的误区,比如SPI模式设置、时钟频率等,这些在数据手册中有详细说明,必须确保配置匹配。此外,在代码实现时,需处理片选信号、读写时序等,确保操作正确。 最后,生成相关问题时要覆盖硬件连接、驱动开发、调试方法和应用场景,帮助用户全面了解开发板和闪存芯片的使用。</think>### STM32F1战舰V3开发板与W25Q128闪存芯片资料整理 #### 1. **硬件连接与数据手册** - **W25Q128硬件连接** 根据引用[4],W25Q128 SPI FLASH芯片连接在STM32F1的SPI1接口上,具体引脚需参考开发板原理图。 **数据手册**:建议通过以下途径获取: - 官方渠道:访问[Winbond官网](https://www.winbond.com/)搜索“W25Q128JV”型号[^4]。 - 第三方平台:在立创商城、ALLDATASHEET等网站下载。 - **开发板原理图** 正点原子战舰V3开发板原理图通常随附在开发板资料包中,需从官方提供的网盘或技术支持渠道获取[^3]。 --- #### 2. **示例代码与驱动开发** - **HAL库驱动示例** 引用[5]提供了基于STM32 Cube IDE的HAL库驱动代码,包含以下功能: ```c // W25Q128初始化与测试函数示例 void read_W25Q128_ID(); // 读取芯片ID void W25Q128_test(); // 读写擦除测试 ``` 完整代码需结合SPI配置和片选信号控制(如GPIO操作)[^5]。 - **正点原子标准例程** 开发板资料包中通常包含SPI Flash操作例程,路径类似`标准例程-HAL库版本/实验XX SPI FLASH读写实验`。 核心代码逻辑包括: ```c // SPI初始化配置(以SPI1为例) hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Direction = SPI_DIRECTION_2LINES; hspi1.Init.DataSize = SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // 根据数据手册配置 hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // 模式0或3 HAL_SPI_Init(&hspi1); ``` --- #### 3. **配置教程与关键步骤** 1. **SPI外设配置** - 在STM32 CubeMX中使能SPI1,配置为全双工主模式,时钟频率≤W25Q128支持的最大值(通常为80MHz)。 - 设置片选引脚(如PA4)为GPIO输出模式,手动控制电平。 2. **Flash操作流程** - **擦除**:先执行扇区擦除(`0x20`)或整片擦除(`0xC7`)。 - **写入**:按页写入(每页256字节),需注意写入前必须擦除。 - **读取**:直接通过SPI发送读指令(`0x03`)并读取数据。 3. **调试建议** - 使用逻辑分析仪捕获SPI时序,验证CLK极性、相位和数据对齐。 - 检查芯片ID(指令`0x9F`)是否匹配`0xEF4018`(W25Q128的ID)[^5]。 --- #### 4. **参考资料整合** - **开发板资料**:引用[3]提到RT-Thread BSP说明文档,包含外设驱动配置示例,可联系维护人获取源码。 - **硬件连线**:引用[2]和[4]提供了其他外设(如ESP8266、指纹模块)的接线参考,需注意避免SPI引脚冲突[^2][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值