电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

STM32与SD卡通讯疑问详解

2017-04-25 15:01分类:电子技术 阅读:

 

STM32与SD卡通讯疑问详解

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的开端始编码到咱们看到听到的仿照信号经过了这么多道的工序,想起来也只得感叹人类才智的无量尽也。

上一篇:传输媒体包含哪些

下一篇:沟通机端口标明办法

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部