龙空技术网

小白的单片机之旅——sd卡驱动并基于其移植FATFS

fengge20 719

前言:

眼前姐妹们对“stm32移植fatfs”大致比较关怀,看官们都需要分析一些“stm32移植fatfs”的相关文章。那么小编在网络上汇集了一些对于“stm32移植fatfs””的相关知识,希望咱们能喜欢,咱们快快来学习一下吧!

前文简要梳理了从GPIO到串口的相关原理以及其简单实现。如果前面的内容全部都理解到位了,我认为后面其他各种复杂的外设的相关原理已经不必要进行详细描述,完全可以通过阅读芯片的datasheet、工程样例代码或者直接参考开源代码,硬件原理图等完成各式各样的外设驱动实现,并实现我们自己的意图。

实际工程中我们通常期望能够在设备上存储一些数据,或者能够从外部输入一些配置或者其他的数据,这时常见的移动存储介质SD卡是一个不错的选择。下面我们尝试基于STM32实现一个基本功能的sd卡驱动,并且基于此移植fatfs文件系统。

sd卡的驱动根据原理图是基于MCU的SDIO接口实现对sdcard的驱动。sdio是集成了相关总线物理层控制以及总线时序控制器的外设(可以简单比照uart控制器来理解),就是对其逻辑封装之后通过预留的寄存器进行状态控制、数据传输,这里所谓的驱动是和外设硬件强相关的一套软硬件操作接口,来配合实现完整的SDIO的总线逻辑,这就是SDIO的相关驱动的核心意图。而sdcard的驱动,在此就是基于sdio的功能基础之上,集合sd卡本身的协议要求,进行命令组帧,操作时序控制等,最终实现sdcard的管理和高效的数据读写。

dma加速sdio驱动sd卡

不同存储介质的读写访问方式有所区别,在此我们当然可以直接对sdcard裸操作,但是这样的话我们把sd卡拔下来之后,普通的pc机无法识别。所以更通常的处理方式是通过文件系统来管理、访问sd卡的资源。用什么文件系统呢?在此我们选择fatfs,该文件系统占用资源少,移植方便,功能强大。其中需要适配的是diskio文件,这里定义的是文件系统该如何操作实际的存储介质资源。

fatfs源码文件

为了让文件系统正常工作,我们通常还需要提供时间戳的接口给文件系统,这里我们也实现了rtc的简单驱动,来获取实时的日期和时间。具体的实现不赘述了,请直接参考源码。

rtc的主要API

上述所有的模块都借助之前的命令框架,注册了测试命令,便于对设计的正确性进行方便的测试。rtc模块提供当前时间的设置和显示接口;sdcard模块和fs模块挂接文件的创建和读写访问接口:cat\echo命令;

help查看支持的所有命令

rtc测试命令

echo写入文件和cat查看文件命令测试

为了验证我们的文件系统,将sdcard拔出来,插入pc,检查一下我们的文件。

sd卡插入pc查看文件

至此,我们在stm32上实现了sd卡的驱动、rtc、以及基于此的fatfs的移植。

为了便于分享,之前的部分代码进行了架构整改,详细实现参考源码。

源码路径:

标签: #stm32移植fatfs