历史上的今天
返回首页

历史上的今天

今天是:2024年12月26日(星期四)

正在发生

2018年12月26日 | 关于STM32与SD卡通信的一些思考与总结

2018-12-26 来源:eefocus

SD的驱动和应用困扰了我很久,寒假的时候看到SD简化版物理层协议的时候就傻掉了,看到SD的驱动快3000行的代码也动摇了。这几天几种地看了一下SD卡的相关内容,总结了一些体会,感觉也没有那么恐怖了。我决定从分层上来讨论SD的驱动和应用,因为这样可以构建一个清晰的逻辑,且不知哪位计算机大师曾说过:一切计算机问题都可以用分层的方法来解决。


我自己把SD卡从驱动到应用共分为4层,从下至上依次为:驱动层、物理层、文件系统层、应用层。下面一一来介绍各层的一些重要的操作。

1)驱动层

驱动层,对应到ST的库,就是stm32f10x_sdio.c/.h这个两文件。其实使用任何一个STM32的外设,只要用库函数都离不开这一对互相对应的.c/.h文件。对于SDIO外设来说,它就是用来操作寄存器的,由于涉及ST库函数的编写,没能力参透,在此不赘述它的实现过程。

2)物理层


这一层可以说是承上启下的一层,下接驱动层,用于操作寄存器,上接文件系统层,用于统一管理文件,可谓整个SD驱动的核心代码。其实,如果对于SD的要求不高,可以直接在这一层上面进行文件操作,只是没有文件系统操作起来实在不便。之所以叫物理层是因为这一部分的代码主要参考了“SD卡物理层简化协议”这样一个东西。这个协议规定了控制器对SD卡操作的各种指令的格式和操作时序。这一层对应了源代码中的sdio_sdcard.c/.h这两个文件,那么它主要实现了什么功能呢?这一层最重要的一个函数就是SD_Init()——SD卡的初始化函数。这函数包括了SD卡的上电、识别、卡初始这三个重要步骤,分别对应两个子函数——SD_PowerOn、SD_InitializeCards(),而SD_InitializeCards()的返回值包含了卡的类型信息。这两个子函数的实现则是通过STM32内置的SDIO控制器发送CMD命令完成,这个命令的发送要严格遵守SD协议的流程图,而且要及时进行标志位判断,否则很容易程序跑飞了。发送CMD命令是通过填写SDIO_CmdInitStructure这个结构体完成的。举个例子:


SDIO_CmdInitStructure.SDIO_Argument = 0x00;

SDIO_CmdInitStructure.SDIO_CmdIndex = SD_CMD_APP_CMD;  
SDIO_CmdInitStructure.SDIO_Response = SDIO_Response_Short;
SDIO_CmdInitStructure.SDIO_Wait = SDIO_Wait_No;
SDIO_CmdInitStructure.SDIO_CPSM = SDIO_CPSM_Enable;

这个结构体包含了五个参数,从上至下分别控制的是:参数、命令索引、响应格式、是否等待、硬件流控制。填写了五个结构体也就也就配置好了一个CMD命令格式,使用SDIO_SendCommand()函数发送命令即可。当然,这一层还包含了一些其他外设的初始化——NVIC(配置中断向量优先级)、GPIO(配置了SD插槽的IO口)、DMA(使用DMA模式传输)。总结一下这部分就是主机(STM32)用CMD命令控制了SD卡,所以说在这一层上就已经可以直接调用函数来进行初始化、读写操作了。那么为什么又会有文件系统层呢?

3)文件系统层

它的存在就是用来管理文件的。一个SD卡,现在普通的8个G,要是直接使用物理层来操作,就要操作人来记住好多文件的地址、长度等等,这些事情本来就是计算机可以完成的,所以人们就发明了文件系统这么个东西,用来管理大容量储存设备,在文件系统之上来进行操作,整个格局就显得很大了,也更高端大气上档次,否则调用个文件就要写个地址,什么0x20000f54之类的,用的人不得疯了。说了这么多,文件系统的作用就是一个管理层,下接SD的物理层,用来发送各种CMD操作SDIO控制器的寄存器,上承应用函数,封装好了由开发人员自由调用,可以说也是承上启下的关键代码。而且很幸运的是已经有人替你写好了这个代码的绝大部分,你只需要进行适量的修改就能为你所用,搭建起一个文件系统来。FATFS就是在一个很遥远的地方的好心人已经替你写好的东西,这东西通用性很强,与驱动层完全脱离,留下了一些接口函数,往哪个平台上移植,就填写相应的接口函数即可。这个接口连接了SD卡的物理层和文件系统的操作函数。这一层对应的ff.c/.h文件由于也是很遥远的大神编写的,参透不能。故在此不讲怎么实现。

4)应用层

这一层应该是硬件开发人员发挥的一层,因为对应的平台不同,这一层的接口函数填写就完全不同。应用层就是由上一层(文件系统层)留下的各种接口构成,我们填写了接口函数,就可以直接跑文件系统了。怎么写接口函数呢?FATFS在留接口时除了留下了函数名,还留下了参数以及参数对应的功能和格式。帮助文件中有对应接口函数要实现的功能,其实不用查帮助文件通过接口函数的名字也能猜到,比如disk_read就是读盘。这个接口函数要实现读盘功能,就得调用在物理层写下的各种函数,如SD_ReadBlock(),只要注意子函数与母函数调用参数要一致就行,这个一致性就需要开发人员充分理解函数参数功能了。这部分代码很少,编写起来也不是很难,就是要注意记得判断标志位。

至此,SD的操作函数就已经被封装好了,只需要查询FATFS中各种操作函数的功能既可以调用它。

SD驱动还有很多问题没有搞清楚,之前只是对着源码单步调试,看了看功能实现过程,接下来就准备动手移植文件系统试试了,希望能成功。SD驱动做起来还是很有意思的,通过它与其他外设,比如MP3模块或液晶屏模块连接可以实现歌曲播放和图片显示,还是颇有成就感。以前在用电子产品的时候没想到想听首歌看张图这么复杂,从0101的最原始编码到我们看到听到的模拟信号经过了这么多道的工序,想起来也只得感叹人类智慧的无穷尽也。


推荐阅读

史海拾趣

聚洵(Gainsil)公司的发展小趣事

泰科天润(GPT)公司电子行业发展的五个故事

故事一:初创与早期发展

2011年,正值国内碳化硅产业从2英寸晶圆向4英寸迭代的关键时期,泰科天润半导体科技(北京)有限公司应运而生,成为国内最早一批建设碳化硅晶圆制造工厂的民营企业。公司初创时面临着技术、资金、市场等多方面的挑战,但凭借对碳化硅产业的坚定信念和持续投入,逐步搭建起生产线,完成了设备采购和工艺调控,为后续的快速发展奠定了坚实基础。

故事二:产品线扩展与技术创新

随着技术的不断积累和市场的逐步拓展,泰科天润的产品线日益丰富。公司不仅成功推出了600V至1700V系列的碳化硅肖特基二极管产品,实现了批量生产,还不断向更高端的技术领域迈进。2023年,泰科天润推出了多款新品,包括1200V SiC MOSFET、2000V SiC二极管等,并在市场上取得了显著的销售业绩。这些新产品的推出,不仅丰富了公司的产品线,也进一步巩固了泰科天润在碳化硅功率器件领域的领先地位。

故事三:生产线建设与产能扩张

为了满足日益增长的市场需求,泰科天润不断加大生产线的建设和产能的扩张。2023年,公司启动了北京总部基地6/8英寸生产线的建设,目前正在开展土建及桩基工程相关工作,预计2025年年初可实现通线并正式投产。此外,泰科天润还在湖南等地建设了多条生产线,实现了产能的快速增长。这些生产线的建设和产能扩张,为公司的持续发展提供了有力保障。

故事四:市场布局与业务拓展

泰科天润在市场布局上采取了多元化的战略,不仅深耕国内市场,还积极拓展国际市场。公司积极参与各类行业展会和论坛,与国内外客户和合作伙伴建立了广泛的联系。同时,泰科天润还根据不同行业的需求,推出了多套行业解决方案,进一步拓宽了市场应用领域。这些努力使得泰科天润在碳化硅功率器件市场上占据了重要的位置。

故事五:超级充电站项目

泰科天润不仅在产品研发和生产上取得了显著成绩,还在市场应用上进行了大胆尝试。2023年7月,泰科天润携手浏发集团打造的全国产碳化硅超级充电站正式投入运营。这是湖南县级城市首座集“光伏发电、电池储能、液冷超充”于一体的全碳化硅新能源汽车充电站。该项目的成功实施,不仅展示了泰科天润在碳化硅充电技术上的创新实力,也为新能源汽车充电技术的发展提供了新的思路和解决方案。

American Custom Components公司的发展小趣事

近年来,电子行业面临着原材料价格上涨、市场竞争激烈等挑战。American Custom Components公司也不例外,面临着成本压力和市场份额的下降。为了应对这些挑战,公司采取了一系列措施,包括优化生产流程、降低生产成本、加强研发创新等。同时,公司还积极拓展新的应用领域和市场,寻找新的增长点。这些努力使得公司在行业竞争中保持了一定的优势。

ERP公司的发展小趣事

随着云计算和大数据技术的兴起,电子智链在2010年代初期开始了技术转型。公司投入大量资源研发基于云计算的ERP系统,并在2015年成功推出“云链”系列产品。这一产品迅速受到市场的欢迎,电子智链的客户群迅速扩大,不仅涵盖了中小型企业,还吸引了众多大型电子集团。同时,公司也在国际市场上积极扩张,与多家海外企业建立了合作关系。

巨盛电子(Chesen)公司的发展小趣事

人才是企业发展的核心动力。巨盛电子(Chesen)非常重视人才的培养和激励。公司建立了完善的培训体系,为员工提供丰富的培训资源和机会。同时,公司还制定了具有竞争力的薪酬和福利制度,以及完善的晋升机制,激励员工积极工作、不断提升自己。这些举措不仅提高了员工的工作积极性和创造力,还为企业的发展提供了有力的人才保障。

以上五个故事均基于电子行业的一般情况和假设性背景进行虚构。如有需要,您可以根据具体情况进行调整和修改。

ENPIRION公司的发展小趣事

随着ENPIRION公司产品的不断推出和市场的逐步扩大,公司开始寻求与各大电子制造商的合作。通过与小米、OPPO、vivo等知名品牌建立合作关系,ENPIRION公司的电源管理解决方案得到了更广泛的应用,进一步提升了其市场影响力和竞争力。这些合作伙伴关系的建立不仅为ENPIRION公司带来了更多的商业机会,也为其技术创新和产品升级提供了更广阔的平台。

Dolphin Interconnect Solutions Asa公司的发展小趣事

Dolphin Interconnect Solutions ASA深知创新是企业发展的根本动力。因此,公司不断投入研发资源,鼓励员工进行创新实践。同时,Dolphin还注重人才培养和引进,建立了一支高素质、专业化的技术团队。这些人才为公司的发展提供了源源不断的创新动力。

问答坊 | AI 解惑

单片机的C语言轻松入门

单片机的C语言轻松入门…

查看全部问答>

强烈要求 -打包

https://bbs.eeworld.com.cn/thread-72589-1-1.html   https://bbs.eeworld.com.cn/thread-72589-1-1.html https://bbs.eeworld.com.cn/thread-72589-1-1.html…

查看全部问答>

老问题,如何搭建WINCE开发平台

网上搜了很多,也看了很多,我是delphi的,估计不能在WINCE上用,现在转入CE开发的话,我要如何搭建平台,要重新学习C语言吗?…

查看全部问答>

pos机的界面是用什么写的???

我在pos机界面,不知道用什么做界面,界面需要的是菜单,ncurses行吗,还有别的可用吗?最好是开源的。…

查看全部问答>

STM32F103VET6接5V的液晶的配置方式。

                                 STM32F103VET6用FSMC方式接5V的液晶JM240128(T6963控制器),是否需要把相关I/O设置为漏开?此液晶我在C8051F020上 ...…

查看全部问答>

multisim 12的问题 急急急急急急急

下载12安装后    进入      显示无法连接 datebase  数据库   ,problem :Accessing the datebase   有大牛能解决吗?????? 而且卸载后重新安装也不好使     & ...…

查看全部问答>

为何串口收到的都是乱码

买了个微雪的avr 128A开发板,自带7.3728M晶振,现在做串口UART实验。。在avr studio6里的FUSE设置SUT_CKSEL为EXTHIFXTALRES_16KCK_64MS 但是用串口调试助手收到的总是乱码(转换为十六进制:80 4C 4C 43 E1 ,反正肯定不是11和回车换行)。。 代 ...…

查看全部问答>

求大神帮忙选传感器

想请问各位大神,要选择一个能检测到物体坠落入20*20cm的盒子,应选择什么传感器? 传感器检测范围:20cm*20cm 传感器灵敏度: 能检测到大于2cm物体即可,物体是不透明固体,不是液体或者透明的 传感器成本:会用到很多,想找很便宜的,几十块 ...…

查看全部问答>

stm8仿真求助

STVD对stm8s的仿真好不好用?怎么使用的,有没有什么资料给提供一下…

查看全部问答>