【STM32F412-DISCO 开发板试用体验】+TF卡的使用

  • 黄莨元
  • LV5工程师
  • |      2017-05-10 14:10:25
  • 浏览量 5139
  • 回复:5
本帖最后由 黄莨元 于 2017-7-18 22:56 编辑 :D今天介绍一下TF卡的使用、开发板上主控芯片SDIO接口以及FatFs文件系统的基本内容,实验上用的是官方提供的应用程序,通过文件系统读取TF卡上的照片,并在1.54LCD显示屏上显示图片。 SDIO介绍:SDIO全称安全数字输入/输出接口,SDIO是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPECSDIO接口支持的设备总类有蓝牙,网卡,电视卡等。SDIO总线协议:SDIO采用HOST-DEVICE模式,所有通信都由HOST端发命令,DEVICE设备只要解析HOST命令就可与HOST进行通信。SDIO总线的几根线: 1. CLK信号:HOSTDEVICE的时钟信号. 2. CMD信号:双向的信号,用于传送命令和反应。 3. DAT0-DAT3 信号:四条用于传送的数据线。 4. VDD信号:电源信号。 5. VSS1VSS2:电源地信号。SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求。其中请求和回应中会数据信息。 1. Command:用于开始传输的命令,是由HOST端发往DEVICE端的。其中命令是通过CMD信号线传送的。 2. Response:回应是DEVICE返回的HOST的命令,作为Command的回应。也是通过CMD线传送的。 3. Data:数据是双向的传送的。可以设置为1线模式,也可以设置为4线模式。数据是通过DAT0-DAT3信号线传输的。SDIO的每次操作都是由HOSTCMD线上发起一个CMD,对于有的CMDDEVICE需要返回Response,有的则不需要。读命令首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个读传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。 写命令首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个写传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应总线协议介绍引用自http://www.cnblogs.com/coole/p/4810901.html 硬件:STM32F4XX芯片的SDIO接口介绍 STM32F412G-DISCO开发板中芯片的SDIO接口与SD卡的接口如下所示,其中:D0~D3:为数据线CLK:时钟线CMD:命令信号线 软件:1.SDIO的配置uSdHandleSD_HandleTypeDef结构体类型,用于设置SDIO的初始化参数 BSP_SD_MspInit(&uSdHandle, NULL);底层硬件的初始化函数,包括SDIODMA的时钟开启以及配置,接下来分析一下首先是时钟的开启以及相应IO口的配置 然后是DMA传输的配置,在传输中运用到DMA2通道4的两个数据流,数据流3和数据流6 数据流的关系如下所示 接下来要做的是进行SDIO的初始化,调用HAL_SD_Init(&uSdHandle, &uSdCardInfo);这个函数,其中uSdCardInfo属于HAL_SD_CardInfoTypedef类型,用来保存SD卡的一些信息,调用函数后会返回SD卡的信息。 配置总线的宽度,可以设置为1位、4位、8位,在这里,要设置成4 到这里,SDIO的配置就基本完成了。 2.文件系统的操作① FatFs的介绍:FatFs Module 是一种完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准 C 语言编写,且完全独立于 I/O 层,可以移植到 8051PICAVRSHZ80H8 ARM 等系列单片机上且只需做简单的修改。它支持 FATl2FATl6 FAT32支持多个存储媒介,有独立的缓冲区,可以对多个文件进行读/写。② FatFs 模块层次结构图: 最顶层是应用层,使用者无需理会 FatFs Module 的内部结构和复杂的 FAT 协议,只需要调用 FatFs Module 提供给用户的一系列应用接口函数,如 f_openf_readf_write f_close等,就可以像在 PC 上读/写文件那样简单。 中间层FatFs Module实现了FAT文件读/写协议。FatFs Module的完全版提供的是ff.cff.h,简化版 Tiny-FatFs 提供的是 tff.ctff.h 需要使用者编写移植代码的是 FatFs Module 提供的底层接口,它包括存储媒介读/写接口 Disk I/O 和供给文件创建修改时间的实时时钟。③ FatFs软件包中的相关文件: 开发板提供的文件系统: 接口层的文件,官方也提供了: 由此可见,这款板子的资料是挺多的,非常适合开发者把玩。接下来看看模块接口层文件:首先是模块的结构体,里面的成员有SD卡的初始化函数,SD卡的状态检查函数以及SD卡的读写操作函数等 调用FATFS_LinkDriver(&SD_Driver, SD_Path);这个函数将SD卡底层驱动和文件系统进行连接起来。初始化SD磁盘驱动器:DSTATUS SD_initialize(BYTE lun) 返回磁盘驱动的状态:DSTATUS SD_status(BYTE lun) 从磁盘中读取扇区:DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count) 向磁盘中写入一个或多个扇区:DRESULT SD_write(BYTE lun, const BYTE *buff, DWORD sector, UINT count) 控制设备指定特性和除了读/写外的杂项功能:DRESULT SD_ioctl(BYTE lun, BYTE cmd, void *buff) 内容比较多,在这里就大概讲一下吧。3.实验效果在这次实验中,我直接使用的程序是官方提供的应用程序,具体的内容是找一张SD卡,(官方没有提供卡),在根目录下新建一个Media文件夹,将官方提供的240*240bmp照片复制到这个文件夹上即可,照片路径如下所示 主函数如下,在前面我添加了一个打印SD卡的信息函数,串口打印,通过按键可以显示多张图片。 来看看效果吧: 哈哈,效果不错吧,很清晰,下面是串口打印TF卡的信息 最后,感谢云汉电子社区和ST给予了我这次试用的机会。:D
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
野蛮人 2017-05-10
加油加油
1   回复
举报
发布
黄莨元 回复 2017-05-12
:lol谢谢
0   回复
举报
chen0000009 回复 2017-05-14
这个工程能分享看看吗?
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子