0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CubeMx之SD卡驱动

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-05-31 09:21 次阅读

1.SD卡简介

SD存储卡(Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备。SD存储卡的技术是从MMC卡(MultiMedia Card)格式上发展而来,在兼容SD存储卡基础上发展了SDIO(SD Input/ Output)卡,此兼容性包括机械电子,电力,信号和软件,通常将SD、SDIO卡俗称SD存储卡。
SD卡具有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性,它被广泛地应用于便携式装置上,例如数码相机、平板电脑和多媒体播放器等。
SD卡支持两种总线方式:SD方式与SPI方式。其中 SD 方式采用 6 线制,使用 CLK、 CMD、 DAT0~DAT3进行数据通信。而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut 进行数据通信。
SD 方式时的数据传输速度与SPI方式要快,STM32F103ZE自带SDIO接口驱动,4位模式最高速度可达24MHZ,8位总线模式下可达48MHZ,本章节将介绍如何使用HAL库完成对SD卡驱动。

poYBAGKUkkOAUvPKAAdF1sfJl-s520.png

2.SDIO简介

SD/SDIO MMC卡主机模块(SDIO)在AHB外设总线和多媒体卡(MMC)、 SD存储卡、 SDIO卡和CE-ATA设备间提供了操作接口。
SDIO的主要功能如下:

  • 与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、 4位和8位。
  • 与较早的多媒体卡系统规格版本全兼容(向前兼容)。
  • 与较早的多媒体卡系统规格版本全兼容(向前兼容)。
  • 与SD存储卡规格版本2.0全兼容。
  • 与SD I/O卡规格版本2.0全兼容,支持良种不同的数据总线模式:1位(默认)和4位。
  • 完全支持CE-ATA功能(与CE-ATA数字协议版本1.1 全兼容)。
  • 8位总线模式下数据传输速率可达48MHz。

3.硬件接口

poYBAGKUkreAAZPmAADMCPgiZv4597.png
引脚 SDIO SPI
SDIO_D2(PC10) 数据线
SDIO_D3(PC11) 数据线 SPI_CS 片选
SDIO_CMD(PD2) 控制线 SPI_MOSI主机输出
SDIO_SCK(PC12) 时钟 SPI_SCK时钟线
SDIO_D0(PC8) 数据线 SPI_MISO主机输入
SDIO_D1(PC9) 数据线

4 软件设置

pYYBAGKUk2GADFAKAAOxr3Nvv8A330.pngpYYBAGKUk3aAMuoaAACGotghO_k103.pngpYYBAGKUk4eAULqwAAG3UZDYe-4451.pngpYYBAGKUk5aAfRGeAAGC7es0Omw405.png

5 代码生成

  1.SD初始化

相关配置可参考STM32中文参考手册_V1.0第20.9.2时钟控制寄存器SDIO_CLKCR。

pYYBAGKUlAeAUdLdAAD5zhx1dpA160.pngpYYBAGKUlBSAGM-pAASjbdVzaks545.png

2.SD读写扇区函数

为了方便后续FATFS文件系统移植,我们这里封装两个函数SD卡写扇区和读扇区。

void SD_WriteDisk(uint8_t *buf,uint32_t sector_add,uint32_t cnt)
{
	HAL_SD_WriteBlocks(&hsd,buf,sector_add,cnt,5000);//SD卡写块
	while(HAL_SD_GetCardState(&hsd)!=HAL_SD_CARD_TRANSFER);//等待数据传输完成

}
void SD_ReadDisk(uint8_t *buf,uint32_t sector_add,uint32_t cnt)
{
	HAL_SD_ReadBlocks(&hsd,buf,sector_add,cnt,5000);//SD卡读块
	while(HAL_SD_GetCardState(&hsd)!=HAL_SD_CARD_TRANSFER);//等待数据传输完成
}

3.主函数

uint8_t buf_tx[4096]="SD卡SDIO驱动HAL库配置测试数据STM32F103ZET6  -- Ver1.0";
uint8_t buf_rx[4096];  
MX_GPIO_Init();
  MX_FSMC_Init();
  MX_SDIO_SD_Init();
  MX_USART1_UART_Init();
  MX_SPI2_Init();
  /* USER CODE BEGIN 2 */
	char buff[200];
	NT35310_Init();//LCD初始化
	LCD_Display_Str(LCD_WIDTH/2-strlen("SD卡初始化")/2*8,20,16,(u8 *)"SD卡初始化",BLACK);
	if(hsd.State!=HAL_SD_STATE_READY)
	{
		LCD_Display_Str(20,40,16,(u8 *)"SD Init  ERR",RED);
	}
	else
	{
		LCD_Display_Str(20,40,16,(u8 *)"SD Init  OK",RED);
		LCD_Display_Str(20,60,16,(u8 *)"卡类型:",RED);
		if(hsd.SdCard.CardType==CARD_SDHC_SDXC)//2.0告诉卡
		{
			LCD_Display_Str(20+8+strlen("卡类型:")*8,60,16,(u8 *)"SDHC",RED);
		}
		else if(hsd.SdCard.CardType==CARD_SDSC)//2.0普通卡
		{
			LCD_Display_Str(20+8+strlen("卡类型:")*8,60,16,(u8 *)"SDSC",RED);
		}
		snprintf(buff,sizeof(buff),"块大小: %d byte\n",hsd.SdCard.BlockSize);
		LCD_Display_Str(20,80,16,(u8 *)buff,RED);
		snprintf(buff,sizeof(buff),"卡容量大小: %.2f GB\n",(hsd.SdCard.BlockNbr>>11)/1024.0);
		LCD_Display_Str(20,100,16,(u8 *)buff,RED);
	}
	LCD_Display_Str(LCD_WIDTH/2-strlen("SD数据读写测试")/2*8,130,16,(u8 *)"SD数据读写测试",BLACK);
	SD_WriteDisk(buf_tx,100,2);
	LCD_Display_Str(20,150,16,(u8 *)"SD写数据: OK",RED);
	SD_ReadDisk(buf_rx,100,3);
	LCD_Display_Str(20,170,16,(u8 *)"SD读数据: OK",RED);
	LCD_Display_Str(20,190,16,(u8 *)"数据内容:",RED);
	LCD_Display_Str(20,210,16,(u8 *)buf_rx,BLUE);
poYBAGKUlFeAKyj0AANc1ge4mgQ884.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10895

    浏览量

    355740
  • SD卡
    +关注

    关注

    2

    文章

    564

    浏览量

    63889
  • SDIO
    +关注

    关注

    2

    文章

    73

    浏览量

    19317
  • HAL库
    +关注

    关注

    1

    文章

    121

    浏览量

    6217
收藏 人收藏

    评论

    相关推荐

    怎样利用STM32cubemx去搭建SD

    怎样利用STM32cubemx去搭建SD?如何去使用其程序?
    发表于 10-08 06:38

    如何使用STM32CubeMX生成MSC与SDIO模版实现以SD为载体的U盘?

    如何使用STM32CubeMX生成MSC与SDIO模版实现以SD为载体的U盘?
    发表于 02-22 06:05

    【技术精选】嵌入式STM32原创征文活动精选文章

    网络协议栈移植步骤与方案STM32CubeMX定时器PWM输出STM32CubeMxSD
    发表于 07-27 18:26

    stm32cubemx教程

    stm32cubemx教程,需要学习的看看,免积分
    发表于 11-02 10:16 0次下载

    STM32CubeMX生成一个SD读写程序

    本文档内容介绍了一个STM32CubeMX生成一个SD读写程序,由于本程序是直接操作SD的物理扇区,而直接写物理扇区可能会破坏
    发表于 01-08 11:23 57次下载

    STM32CubeMX新建工程的过程及方法解析

    关于STM32CubeMX新建工程的过程。最终通过STM32CubeMX工具配置完成一个驱动IO(点亮LED)的软件工程,也就是通过STM32CubeMX配置完成之后,打开工程直接下载
    发表于 11-27 16:43 7124次阅读

    浅谈stm32cubemx安装教程

    STM32CubeMX介绍、下载与安装
    的头像 发表于 03-25 10:57 1.8w次阅读
    浅谈<b class='flag-5'>stm32cubemx</b>安装教程

    STM32CubeMX第三篇串口实验

    STM32CubeMX第三篇串口实验
    发表于 12-05 11:21 6次下载
    <b class='flag-5'>STM32CubeMX</b>第三篇<b class='flag-5'>之</b>串口实验

    STM32CubeMx学习——创建LED灯工程(基于STM32L071KBU)

    STM32CubeMx学习——创建LED灯工程(基于STM32L071KBU)本文介绍利用STM32CubeMx来创建工程代码,并且将代码下载到开发板加以验证。本次实验芯片为
    发表于 12-06 20:06 17次下载
    <b class='flag-5'>STM32CubeMx</b>学习<b class='flag-5'>之</b>——创建LED灯工程(基于<b class='flag-5'>STM32</b>L071KBU)

    STM32学习STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1下载地址)

    STM32学习STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1下载地址)
    发表于 12-07 11:51 28次下载
    <b class='flag-5'>STM32</b>学习<b class='flag-5'>之</b><b class='flag-5'>STM32cubeMX</b>软件安装与使用(附<b class='flag-5'>STM32cubeMX</b>5.2.1下载地址)

    STM32CubeMX 窗口及工具介绍

    STM32CubeMX 系列教程之 STM32CubeMX 窗口及 STM32PackCreator 工具介绍,内附详细图文介绍。
    发表于 12-14 18:51 27次下载
    <b class='flag-5'>STM32CubeMX</b> 窗口及工具介绍

    STM32CubeMX系列|SD

    SD1.SD简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 12-31 19:22 20次下载
    <b class='flag-5'>STM32CubeMX</b>系列|<b class='flag-5'>SD</b><b class='flag-5'>卡</b>

    stm32 CubeMx 实现SD/sd nand FATFS读写测试

    文章目录stm32CubeMx实现SD/SDnandFATFS读写测试1.前言2.环境介绍2.1软硬件说明2.2外设原理图3.工程搭建3.1CubeMx配置3.2SDIO时钟配置说明
    的头像 发表于 06-03 09:20 1986次阅读
    <b class='flag-5'>stm32</b> <b class='flag-5'>CubeMx</b> 实现<b class='flag-5'>SD</b><b class='flag-5'>卡</b>/<b class='flag-5'>sd</b> nand FATFS读写测试

    浅谈STM32SD

    STM32SD
    的头像 发表于 10-19 18:28 1866次阅读
    浅谈<b class='flag-5'>STM32</b><b class='flag-5'>之</b><b class='flag-5'>SD</b><b class='flag-5'>卡</b>

    STM8CubeMXSTM32CubeMX功能一样吗?

    STM8CubeMXSTM32CubeMX功能一样吗?
    的头像 发表于 10-31 16:59 1798次阅读
    STM8<b class='flag-5'>CubeMX</b>和<b class='flag-5'>STM32CubeMX</b>功能一样吗?