STM32之SD卡

一、SD卡概述

1、定义

  SD卡(安全数码卡),是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(外语缩写PDA)和多媒体播放器等。

2、容量等级


















容量等级

容量范围

磁盘格式

SD

上限至2GB

FAT 12, 16

SDHC

2GB至 32GB

FAT 32

SDXC

32GB至2TB

exFAT

3、SD卡结构

  (摘自SanDisk Secure Digital Card Product Manual Version 1.9)

① SD卡

   由SD卡控制器和存储阵列组成,SD卡与外界的通讯接口是SD Bus或者SPI Bus。

② 存储阵列结构图

Block:    

  最小的读写单元,它的单位是“字节”。

Sector:     

  如果CSD寄存器ERASE_BLK_EN =
0时,Sector是最小的擦除单元,它的单位是“块”。Sector的值等于CSD寄存器中的SECTOR_SIZE的值+1。

WP Group:   

  最小的写保护单元,它的单位是“扇区”。

二、SD卡物理层

1、SD卡写数据块 

  执行写数据块命令(CMD24-27)
时,主机把一个或多个数据块从主机传送到卡中,同时在每个数据块的末尾传送一个CRC码,数据块的长度定义在CSD中的WRITE_BL_LEN。主机传送数据,SD卡接收数据并将数据保存在Buffer中,累计接收数据达到WRITE_BL_LEN长度的时候,SD卡把接下来的数据当做CRC校验码,并且开始数据校验。如果CRC校验错误,卡通过SDIO_D
线指示错误,传送的数据被丢弃而不被写入,所有后续(在多块写模式下)传送的数据块将被忽略。

如果主机传送部分数据而累计的数据长度未与数据块对齐,当不允许块错位(
未设置CSD的参数WRITE_BLK_MISALIGN),卡将在第一个错位的块之前检测到块错位错误( 设置状态寄存器中的ADDRESS_ERROR 错误位)
。当主机试图写一个写保护区域时,写操作也会被中止,此时卡会设置WP_VIOLATION位。 

2、SD卡读数据块

  在读数据块模式下,数据传输的基本单元是数据块,它的大小在CSD中(READ_BL_LEN)
定义。如果设置了READ_BL_PARTIAL,同样可以传送的较小数据块,较小数据块是指开始和结束地址完全包含在一个物理块中,READ_BL_LEN定义了物理块的大小。为保证数据传输的正确,每个数据块后都有一个CRC校验码。笔者认为主机在累计接收到READ_BL_LEN数据后,软件可以把接下来的数据当做CRC校验码,并且进行校验。

  CMD17 (READ_SINGLE_BLOCK)启动一次读数据块操作,在传输结束后卡返回到发送状态。

3、擦除SD卡

  CSD寄存器ERASE_BLK_EN决定了SD卡的最小擦除单位。

  当ERASE_BLK_EN等于0的时候,主机擦除的最小单位是扇区。比如一个Sector包含32个Block,擦除时的起始地址是5,而结束地址是40,那么实际擦除的块是从0到63。

  当ERASE_BLK_EN等于1的时候,主机擦除的最小单位是512
Byetes。比如擦除时的起始地址是5,而结束地址是40,那么实际擦除的块就是从5到40。

三、STM32与SD卡相配的外设--SDIO

四、SD卡编程

二、SD卡疑惑

1、SD卡擦除后,其中的内容是0,还是1 ?

  The data at the card after an erase operation is either ‘0‘ or ‘1‘, depends
on the card vendor.The SCR register bit DATA_STAT_AFTER_ERASE (bit 55) defines
whether it is ‘0‘ or ‘1‘.(摘自《SD
Specifications_Part_1_Physical_Layer_Specification_Ver3.00_Final_090416.pdf》)

时间: 2024-12-19 16:07:32

STM32之SD卡的相关文章

stm32和sd卡

SD卡从容量上讲分两种:标准容量和大容量,最小的是标准容量,小于等于2G 其中的访问关系如下: SD卡分为两种模式:认证模式和传输模式,每一个模式包含着不同的状态,如下 以下主要讲其初始化过程: SD卡初始化主要包含5条命令:CMD0,CMD8,ACMD41,CMD2,CMD3,初始化在认证模式下进行,此模式只用到CMDLine. 上电之后,所有卡均处于空闲状态,此时主机并不知道卡的适用电压是多少,所以,主机先假定一个电压并用其发送CMD0. CMD0:reset指令,处于inactive状态的

野火STM32 Flash&sd卡模拟U盘

在USB库文件mass_mal.c中添加对flash和sd读写的函数,USB库调用这些函数从而实现模拟U盘的功能 1 //mass_mal.c 2 /* Includes ------------------------------------------------------------------*/ 3 #include "..\User\sdcard\bsp_sdio_sdcard.h" 4 #include "..\User\spi_flash\fatfs_fla

STM32把SD卡内极速快三平台出租搬运到内部FLASH

STM32操极速快三平台出租haozbbs.comQ1446595067 作访问flash,包括写入数据到flash和从flash读取数据 :https://blog.csdn.net/Ace_Shiyuan/article/details/78196648 这篇文章写得比较明白,但是它写的函数不饱满,没有把Flash充分写满.请看写数组的函数:FLASHStatus = FLASH_ProgramHalfWord(STARTADDR+WriteAddress+i*2, temp);//写入数据

【STM32】使用SDIO进行SD卡读写(一)-初步认识SD卡

先介绍几个协会的网站,里面有相关的文件 多媒体卡协会网站:www.mmca.org(STM32F4的SDIO支持的一种通讯,但不是本文的重点) SD卡协会网站:www.sdcard.org CE-ATA:www.ce-ata.org(STM32F4的SDIO支持的一种通讯,但不是本文的重点) 我会着重在SD卡和SDIO协议的部分,以下图片截至SD卡协会网站 原本SD协议是用在存储上的(图片蓝底处),后来扩展了一个叫SDIO的协议(全名:Secure Digital Input and Outpu

【STM32】使用SDIO进行SD卡读写(二)-了解SD总线,命令的相关介绍

本章的介绍内容 一.SD总线,传输的流程 二.SD总线里面的命令和响应的数据格式 三.SDIO进行传输时,使用4根数据线的传输情况 四.CMD表格,和SD卡通讯所需的命令介绍 一.SD总线,传输的流程 下面来看一下SD bus(总线) 提醒一下,SDIO通讯,里面就有CMD线和DAT线,分别是发送命令和数据传输 上面是模拟一些操作情况,大致就是命令发出后(CMD线),SD卡有没有做出响应(CMD线),SD卡需不需要传送数据(DAT线),或是主机要不要发送数据(DAT线) 二.SD总线里面的命令和

如何使用CubeMx制作一个基于SD卡的文件系统工程(2)

本文是原文http://blog.csdn.net/flydream0/article/details/52777923的补充. 原文并没有考虑SD卡拔插问题,且SDIO没有使用DMA,本文作为补充,将示例如何改善这两方面的问题. 1 SD卡拔插检测 FATFS文件系统初始化得修改下: void MX_FATFS_Init(void) { /*## FatFS: Link the SD driver ###########################*/ retSD = FATFS_Link

使用FreeRTOS在SD卡驱动使用非系统延时导致上电重启不工作的情况

一.问题描述在一个使用FreeRTOS的工程中,只做了SD卡的驱动,由于RTOS使用了Systick,故非系统延时函数使用的是 DWT中的时钟周期(CYCCNT)计数功能,但是在SD卡驱动中使用了这个非系统延时导致,烧写程序后板子工作正常,而下电再上电后板子无反应,分析排查去掉了这个非系统延时后工作正常. 二.使用环境1)开发环境使用的是MDK5.20,下载器为JLINK:2)软件工程是V6的FreeRTOS模板工程,SD卡驱动也是V6的,非系统延时函数所在文件为V6的 bsp_dwt.c:3)

第36章 SDIO—SD卡读写测试

第36章     SDIO-SD卡读写测试 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx参考手册>.<STM32F4xx规格书>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>以及SD简易规格文件<Physical Layer Simplified Specificatio

制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统

转自网络,供学习记录使用,红色部分是我实验时,这篇文章和网站稍有出入的地方. 目的:制作SD(8G)卡Linux镜像,使得ZC706开发板可以从SD卡启动进入Linux系统 在http://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/quickstart/zynq(姑且把这个链接成为链接1吧)链接中找到 图1 点击绿色字体的链接,下载镜像原始文件.这里有不同时期的版本,本说明中选择 图2 下载的原始文件为:2014_R2-