打印
[STM32H7]

【STM32H7S78-DK测评】sdmmc外接SD卡并移植fatfs

[复制链接]
2268|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
板上有一SDMMC接口,此接口可以外接SD卡或者EMMC。说起SD卡,以前用STM32的时候,很多时候都是用SPI来接的,这种SDMMC接口以前只会出现在高端处理器上面,比如imx6这类SOC,现在MCU的外设也越来越强大了。
首先看原理图,sd卡槽的接线如下
程序里面使用MX_SDMMC1_SD_Init函数配置SDMMC接口,实现如下
这里面主要看
hsd1.Init.ClockEdge
参数的配置,这个值一般选择SDMMC_CLOCK_EDGE_FALLING
这个HAL_SD_Init会调用HAL_SD_MspInit,这里面实现时钟和引脚初始化
时钟需要打开SDMMC的,还有GPIOC GPIOD
然后就是要计算SDMMC的工作频率,默认使用200M
这个SDMMC时钟是向下兼容的,可以驱动比200M更慢的sd卡,但是最大只能到200M
然后执行强制复位
__HAL_RCC_SDMMC1_FORCE_RESET
__HAL_RCC_SDMMC1_RELEASE_RESET
如果SDMMC控制器挂死了,需要用这两个函数来使其恢复正常
如果外接的sd卡需要支持热插拔功能,则还需要配置热插拔引脚,从原理图上面可以看到热插拔引脚是PM14
这个就是用的普通GPIO中断来检测热插拔,中断处理函数里面会使用GPIO回调,
另外SDSDMMC库似乎有个BUG,这个SDMMC的初始化函数,如果没有插SD卡,会卡住。所以使用SDMMC初始化函数时必须上电插着SD
完成SDMMC和热插拔引脚初始化之后,需要初始化FATFS
fatfshardware相关api实现在sd_diskio.c里面,就是以下5个函数
STSDK已经实现了,主要就是通过SDMMC来发送命令和数据。
完成这些初始化之后,就需要在main函数里面循环调用MX_FATFS_Process,这个函数会进行相关读写操作,实现如下
这里的功能就是,如果识别到SD卡,则尝试挂在fat,挂载不上则执行mkfs操作
挂载之后进入APPLICATION_RUNNING状态,执行
FS_FileOperations
操作,此函数实现如下
主要功能是创建一个名为STM32.TXT的文件,并向其写入一串内容
另外这个MX_FATFS_Process,在卡被拔出后,会执行umount操作,这个卡被拔的检测实现在SD检测GPIO中断回调中完成,实现如下
下面来验证一下,编译此程序,并且插一个SD卡在卡槽里面,上电,烧录后
运行等待个几秒,然后拔出sd卡,放到PC上面,可以看到确实执行了文件的创建与写入操作

使用特权

评论回复
沙发
Stahan| | 2024-10-13 19:58 | 只看该作者
还只做过spi的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

777

帖子

2

粉丝