STM32F103 spi flash w25q128挂载文件系统fatfs

一笑奈何 提交于 2019-12-18 10:58:41

前言:
本系列博客我们围绕SDIO Wi-Fi模块Marvell8801来揭开SDIO Wi-Fi的神秘面纱,开发MCU选用STM32F103RET6,外设包括SPI FLASH(W25Q128),摄像头(OV7670 FIFO),OLED(SSD1306),USB device,如下图所示:
在这里插入图片描述
一共分两个测试例程:1.硬件测试例程 2.Wi-Fi测试例程,分别搭配上位机来测试,上位机测试视频链接如下:

  • TODO:视频教程

我们的目的是引领对无线感兴趣的工程师或者学生快速入门,会通过以下几方面来切入:
在这里插入图片描述
分别是:
1)整体介绍篇,主要对开发板做整体介绍
2)硬件篇,主要对板子外设驱动做说明
3)Linux Wi-Fi篇,主要通过Linux来驱动Wi-Fi模组来了解Linux kernel的无线架构
4)自己实现Marvell8801驱动,主要是根据编程手册来自己实现一个SDIO Wi-Fi的驱动
5)LWIP篇,通过移植LWIP来实现驱动的应用
通过以上系列的文章,相信你对Wi-Fi就会有一个深刻的认知,起到举一反三的作用,以后不管是哪个平台(裸奔,RTOS,Linux,Android)说起驱动Wi-Fi你都不会慌张。
我们的优势:
1)代码全部自主研发,会提供更加专业的售后服务
2)上位机测试程序,让你测试起来程序会更加灵活
3)Marvell官方NDA资料(全网独家)
4)自主研发RTOS,名字叫做IoT_lwos,如果你对RTOS有兴趣,可以通过我们的RTOS学习,整个代码2000多行,非常小巧
5)例程丰富性,除了硬件测试例程外,板子中Wi-FI例程包括裸奔,freeRTOS,rtthread,ucosii,ucosiii,IoT_lwos,让你们的应用直接用起来
6)主流的云操作,通过云服务器来来控制开发板
7)所有代码均开源
8)提供开发应用手册,写代码文档历时8个月,有深厚的技术累计
我们的淘宝连接为:https://shop220811498.taobao.com


开始本文章内容,本篇我们来介绍STM32F103 SPI FLASH挂在文件系统fatfs
整个第五章介绍如下:
在这里插入图片描述
1)Fatfs介绍,让你们对Fatfs有一个大体的了解
2)Fatfs源码目录介绍,针对当时做的最新的版本做一个目录介绍
3)Fatfs移植介绍,对移植做一个简短的介绍,是配合上一章写好的SPI FLASH驱动,把Fatfs挂载都SPI FLASH
4)Fatfs配置介绍,Fatfs配置文件中有大量的配置选项,我们只是做一个简单的介绍
5)Fatfs上位机介绍,其实上一章已经对上位机做一个介绍了,本章我们只是简单提醒一下

1. FATFS介绍

FatFs是一个用于小型嵌入式系统的通用FAT/exFAT文件系统模块。FatFs模块是按照ANSI C (C89)编写的,与磁盘I/O层完全分离。因此它是独立于平台的。它可以集成到资源有限的小型微控制器中,如8051、PIC、AVR、ARM、Z80、RX等。这里还提供了用于微型微控制器的小FatFs模块。FATFS 的特点有:
1)DOS/Windows兼容的FAT/exFAT文件系统。
2)与平台无关,移植简单
3)非常小的程序代码和工作区占用空间。
4)多种配置选项
 支持长文件名、ANSI/OEM 或 Unicode
exFAT文件系统。
 对于RTOS线程安全
多个卷(物理驱动器和分区)。
 支持多种扇区大小
多个 ANSI/OEM 代码页包括 DBCS
 只读、最小化的 API 和 I/O 缓冲区等
整个示意图如下:
在这里插入图片描述
更多的介绍请访问:http://elm-chan.org/fsw/ff/00index_e.html
目前我们移植的版本是R0.13C,截止到现在是最新版本

2. FATFS源码结构介绍

下载的源码,解压出来又如下目录
在这里插入图片描述

2.1. Document

这里面有几个重要的信息
1)00index_e.html 这个是整个document的索引页,对于API使用以及demo不懂的可以浏览下这个网页
2)res下面有
5个app.c,是一些简单入门的demo
mkfatimg.zip 是一个window工程,是建立在memory上的文件系统,对于想研究文件系统源码的人是一个好的工程。

2.2 Source

在这里插入图片描述
其中除了diskio.c是需要移植外,除了配置其他的文件都不需要动

3. FATFS 移植介绍

对于diskio.c的移植,我们只修改这几个函数即可,其中spi flash相关的函数从上一章查看
在这里插入图片描述
1)disk_status介绍
在这里插入图片描述
在这里插入图片描述
此函数是通过硬件介质编号来获取这个硬件介质的状态,错误分别是没有初始化,没有这个硬件介绍,和硬件介质处于写保护状态,而我们只有一个硬件介质(W25QXX SPI flash),所以我们不需要判断硬件介质编号,直接默认返回没有错误,代码如下
在这里插入图片描述

2)disk_initialize介绍
在这里插入图片描述
在这里插入图片描述
此函数名字就很直观了,就是通过硬件介质编号机型初始化,一样我们只有SPI flash,所以代码也固定化,同时获取flash total size,sector size,sector per block
在这里插入图片描述
3)disk_read介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4)disk_write介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
移植代码如下:
在这里插入图片描述
5)disk_ioctl
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此函数需要实现的功能比较多,依照功能而定,我们只是实现了部分功能,如下
在这里插入图片描述
6)get_fattime
在这里插入图片描述
在这里插入图片描述
此函数主要是用来确定建立文件时间,修改文件时间,访问文件实现,就像windows系统的文件一样
在这里插入图片描述
但是我们此部分不需要这个功能,所以我们移植的函数只是返回0,如图
在这里插入图片描述

4. Fatfs配置介绍

fatfs的配置在文件ffconf.h中,注释已经非常明了,我们整个贴出,注释已经很明了,我们不做一一介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. FATFS API使用一览

API的使用在http://elm-chan.org/fsw/ff/00index_e.html都有详细,部分函数也有demo,所以我们不做一一介绍
在这里插入图片描述

6. Fatfs验证

上一章SPI flash我们已经介绍上位机测试程序,直接参照上一章SPI FLASH部分的上位机使用说明。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!