历史上的今天
返回首页

历史上的今天

今天是:2025年01月31日(星期五)

2020年01月31日 | STM32——SD卡和FATFS文件系统

2020-01-31 来源:eefocus

最近看了32的sd卡和FATFS文件系统,现在就自己的理解总结一下。


一、SD卡模块

SD 卡:安全数码卡, 它是在 MMC 的基础上发展而来, 是一种基于半导体快闪记忆器的新一代记忆设备。按容量分类,可以将SD 卡分为 3 类: SD 卡、 SDHC 卡、 SDXC 卡。SD卡(SDSC):0~2G    SDHC卡:2~32G  SDXC卡:32G~2T。


SD 卡一般支持 2 种操作模式:

SD 卡模式(通过 SDIO 通信):允许 4 线的高速数据传输,只能使用 3.3V 的 IO 电平,所以, MCU 一定要能够支持 3.3V 的 IO 端口输出。


SPI 模式:同 SD 卡模式相比就是丧失了速度,在 SPI 模式下, CS/MOSI/MISO/CLK 都需要加 10~100K 左右的上拉电阻。


SD卡引脚功能表:

image.png?imageView2/2/w/550

3.SD卡的5个寄存器:

image.png?imageView2/2/w/550

4.SD卡初始化过程(知道 SD 卡的类型V1、 V2、 V2HC 或者 MMC):

初始化与 SD 卡连接的硬件条件(MCU 的 SPI 配置, IO 口配置);

上电延时(>74 个 CLK)(因为 SD 卡内部有个供电电压上升时间,大概为 64 个 CLK,剩下的 10 个 CLK 用于 SD 卡同步,之后才能开始 CMD0 的操作);

复位卡(CMD0),进入 IDLE 状态;

发送 CMD8,检查是否支持 2.0 协议;

根据不同协议检查 SD 卡(命令包括: CMD55、 CMD41、 CMD58 和 CMD1 等);

取消片选,发多 8 个 CLK(提供 SD 卡额外的时钟,完成某些操作),结束初始化;


5、SD卡读取数据(CMD17):

发送 CMD17;

接收卡响应 R1;

接收数据起始令牌 0XFE;

接收数据;

接收 2 个字节的 CRC,如果不使用 CRC,这两个字节在读取后可以丢掉。

禁止片选之后,发多 8 个 CLK;


6、SD卡写数据(CMD24):

发送 CMD24;

接收卡响应 R1;

发送写数据起始令牌 0XFE;

发送数据;

发送 2 字节的伪 CRC;

禁止片选之后,发多 8 个 CLK;


7、硬件设计:(mini板)

SD卡通过4根信号线与STM32连接, SD卡的片选(SD_CS)连接PA3,SD卡的SPI接口,连接在STM32的SPI1上面。


要注意的是SPI1被3个外设共用了: SD卡、 W25Q64和NRF24L01,在使用SD卡的时候,必须禁止其他外设的片选,以防干扰。

 

二、FATFS文件系统

FATFS 是一个完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。可以移植到 8051、 PIC、 AVR、 SH、Z80、 H8、 ARM 等系列单片机上而只需做简单的修改。它支持 FATl2、 FATl6 和 FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对 8 位单片机和 16 位单片机做了优化。


FATFS 的特点有:

    Windows 兼容的 FAT 文件系统(支持 FAT12/FAT16/FAT32)

    与平台无关,移植简单

    代码量少、效率高

    多种配置选项

      支持多卷(物理驱动器或分区,最多 10 个卷)

      多个 ANSI/OEM 代码页包括 DBCS

      支持长文件名、 ANSI/OEM 或 Unicode

      支持 RTOS

      支持多种扇区大小

      只读、最小化的 API 和 I/O 缓冲区等


3.与平台无关的是:

image.png?imageView2/2/w/550

与平台相关的代码(需要用户提供)是:

image.png?imageView2/2/w/550

FATFS 模块在移植的时候,我们一般只需要修改 2 个文件,即 ffconf.h 和 diskio.c。


4. diskio.c和diskio.h是硬件层,需要根据存储介质来修改

ff.c和ff.h是FATFS的文件系统层和文件系统的API层


5 .移植步骤:  

1、数据类型:在integer.h 里面去定义好数据的类型。这里需要了解你用的编译器的数据类型,并根据编译器定义好数据类型。

                              

2、配置:通过ffconf.h配置FATFS的相关功能,以满足你的需要。

                              

3、函数编写:打开diskio.c,进行底层驱动编写,一般需要编写6 个接口函数


6.FATFS给用户提供了大量的API函数,可以满足我们对文件的各种操作。

      

        

      

    

7.几个重要结构体:

文件对象结构体(FIL类型):存放文件的相关信息,打开关闭读写文件等操作时需要使用其指针


目录对象结构体(DIR类型):存放目录的相关信息,对目录操作时需要其指针


文件状态结构体(FILINFO类型):存放文件的大小属性文件名等信息


文件系统对象结构体(FATFS类型)

推荐阅读

史海拾趣

CONEXANT公司的发展小趣事

在无线通信技术快速发展的时代,Conexant公司积极寻求与业界领先企业的合作机会。2001年,Conexant宣布将其无线业务部门与Alpha Industries合并,共同创建一个价值约30亿美元的新企业。这一合并不仅扩大了Conexant在无线通信领域的市场份额,也为其带来了更多的技术资源和市场机会。合并后的新企业以Conexant为主导,通过整合双方的优势资源,实现了无线业务的快速发展和市场份额的稳步提升。

Calmos Systems Inc公司的发展小趣事

Calmos Systems Inc公司创立之初,面临着资金短缺、市场竞争激烈的挑战。公司创始人凭借对电子技术的深厚理解和对市场需求的敏锐洞察,带领团队研发出了一款具有创新性的电子产品。然而,由于品牌知名度低,市场推广困难,产品销量一度不佳。为了打开市场,创始人亲自拜访潜在客户,了解他们的需求,不断优化产品功能。经过不懈的努力,产品逐渐赢得了客户的认可,为公司的发展奠定了基础。

德欣(COV)公司的发展小趣事

面对电子行业的快速发展和市场竞争的加剧,德欣公司始终将技术创新作为发展的核心动力。公司不断加大研发投入,引进先进的生产设备和技术人才,加强与高校和科研机构的合作。通过不断的技术创新和产品升级,德欣公司在保持传统产品优势的同时,也成功拓展了新的业务领域,实现了产业升级和可持续发展。

Gauthier Connectique公司的发展小趣事
确保替代产品具有与原电路相同或更优的功能兼容性,以满足设备需求。
Chip Quik公司的发展小趣事

随着国内市场的稳定发展,Chip Quik公司开始将目光投向国际市场。公司通过分析不同国家和地区的电子维修市场需求,制定针对性的市场策略。通过参加国际电子展会、建立海外销售渠道等方式,公司逐渐在国际市场上取得了一席之地。

Deutsch公司的发展小趣事

人才是企业发展的核心驱动力。Deutsch公司非常重视人才引进和培养工作。公司积极招聘具有丰富经验和专业技能的人才,并为他们提供广阔的发展空间和良好的职业前景。同时,公司还注重内部人才的培养和晋升,通过培训、交流等方式提升员工的综合素质和业务能力。这些措施使得Deutsch公司拥有一支高素质、高效率的团队,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

正在学DSP,但发觉DSP却用处不大!前途也~~

发觉DSP的用处真不大,而且价格有高。 做音视频的编解码,用专用的ASC电路成本更低廉,性能更高。应为这种方案的厂家提供的选择更多,成本更低廉。 至于控制领域,用 ARM7, STM32等CORTEX-M3性能价格更低廉. 例如用ARM7: LPC系列,AT91SAM7 ...…

查看全部问答>

有谁用过网络变压器

有谁有用过网络变压器的老前辈,请问他的正负是不是可以调着接呀,下面这图,我看晕了!…

查看全部问答>

我也来秀一下我们的LPC11XX的板子

  本来拍的很清楚的,怎么到了这里就不清楚了。 …

查看全部问答>

计算机软硬件的发展趋势及应用

计算机软硬件的发展趋势及应用…

查看全部问答>

在WINXP下用cygwin编译ACE5.5 for vxworks5.5 出错,谁能帮帮我

我的环境 winxp(sp2), tornador2.2.1 cygwin perl ace5.5 我在编译时出现如下错误 Thread_Manager.cpp:In method \'int ACE_Thread_Manager::kill_grp(int, int)\': Thread_Manager.cpp:1636: Internal compiler error in \'verify_local ...…

查看全部问答>

应急灯原理图重新修改提交

由于以前选用电池管理芯片,MAX1924V, 美信半导体不提供免费的芯片。所以修改设计,重新选用MAX17005B做为电池管理芯片,修改原理图,并已经到美信网站申请了芯片MAX17005B和MAX8790A LED驱动芯片。最新原理图如下: …

查看全部问答>

使用IAR软件仿真STM32程序,如何知道每条指令运行的时间呢?

                                 在哪个选项里面可以得到答案?我使用的是IAR for ARM 4.42版本的。…

查看全部问答>

求帮忙,各位神侠,帮帮小女子吧

我们要求设计基于单片机的交流参数测试仪,我虽然有一点思路,但是还是很模糊,求求各位帮忙讲解下原理,采集、参数好像有电压、电流、功率…

查看全部问答>

武林学习LM3S811(六)触摸芯片XPT2046驱动

触摸控制器芯片介绍: XPT2046内部有 2.5V的参考电压源,可以作为辅助输入、电池电压测量和片内温度测量的参考电压。当不使用时,参考电压源可以处于省电模式。内部参考电压源在电源电压低至2.7V时仍可正常工作。当不使用时,参考电压还可以处于省 ...…

查看全部问答>

好用的Verilog串口UART程序

==========================================================================//-----------------------------------------------------// Design Name : uart // File Name   : uart.v//     : Simple UART// Coder&nb ...…

查看全部问答>