SD卡原理及读写程序

合集下载

SD卡工作原理介绍和工作原理图

SD卡工作原理介绍和工作原理图

SD卡工作原理介绍和工作原理图大容量SD卡在海洋数据存储中的应用本设计使用8 GB的SDHC(High Capacity SD Memory Card,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。

海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。

目前,可插拔式存储卡有CF卡、U 盘及SD卡。

CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。

1 SD卡接口的硬件设计STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72 MHz,O端口和连接到2条APB总线的外设。

内置高速存储器(128 KB的闪存和20 KB 的SRAM),以及丰富的增强I,STM32F103xx系列工作于-40,+105?的温度范围,供电电压为2.0,3.6 V,与SD 卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。

SD卡支持SD模式和SPI模式两种通信方式。

采用SPI模式时,占用较少的I,O资源。

STM32F103VB包含串行外设SPI接口,可方便地与SD卡进行连接。

通过4条信号线即可完成数据的传输,分别是时钟SCLK、主机输入从机输出MISO、主机输出从机输入MOSI和片选CS。

STM32F103VB与SD卡卡座的接口电路如图1所示。

SD卡的最高数据读写速度为10 MB,s,接口电压为2.7,3.6 V,具有9个引脚。

SD卡使用卡座代替传输电缆,减少了环境干扰,降低了出错率,而且1对1传输没有共享信道的问题。

SD卡在SPI模式下各引脚的定义如表1所列。

2 SD卡接口的软件设计本设计采用STM32F103VB自带的串行外设SPI接口与SD卡进行通信,这里只介绍SPI模式的通信方式。

sd卡烧写原理

sd卡烧写原理

sd卡烧写原理一、概述SD卡是一种常用的存储设备,它具有体积小、容量大、读写速度快等特点,并且可以被广泛应用于各种嵌入式系统中。

为了在嵌入式系统中使用SD卡,需要将系统镜像烧写到SD卡中,这就需要用到SD卡的烧写原理。

本文将详细介绍SD卡烧写原理。

二、SD卡的结构和工作原理1. SD卡的结构SD卡主要由控制器和闪存芯片组成。

其中,控制器负责与主机进行通信,并且管理闪存芯片的读写操作;而闪存芯片则是实际进行数据存储的地方。

2. SD卡的工作原理当主机需要与SD卡进行通信时,首先会向SD卡发送一个命令。

这个命令包含了操作类型、数据地址、数据长度等信息。

接着,控制器会根据命令类型执行相应的操作,并且将结果返回给主机。

具体来说,如果是读操作,则控制器会从闪存芯片中读取相应的数据并发送给主机;如果是写操作,则控制器会将主机发送过来的数据写入到闪存芯片中。

三、 SD 卡烧写原理1. 烧写流程SD卡烧写的流程主要包括以下几个步骤:(1)格式化SD卡首先需要将SD卡进行格式化,以便清除SD卡中的数据,并且为接下来的烧写操作做好准备。

(2)分区接着,需要对SD卡进行分区。

一般情况下,会将SD卡分为两个区域:一个用于存储引导程序和内核镜像,另一个用于存储文件系统。

(3)烧写引导程序和内核镜像在完成分区之后,就可以开始烧写引导程序和内核镜像了。

这里需要将引导程序和内核镜像按照一定的格式写入到相应的分区中去。

(4)烧写文件系统最后,需要将文件系统烧写到SD卡中。

这里同样需要按照一定的格式将文件系统写入到相应的分区中去。

2. 烧写工具为了方便进行SD卡烧写操作,通常会使用一些专门的工具来完成。

这些工具主要包括以下几种:(1)dd命令dd命令是Linux下的一个命令行工具,可以用来复制文件、转换文件格式等操作。

在进行SD卡烧写时,可以使用dd命令将镜像文件直接写入到SD卡中。

(2)Win32DiskImagerWin32DiskImager是一个Windows下的烧写工具,可以用来将镜像文件烧写到SD卡中。

sd卡的原理

sd卡的原理

sd卡的原理SD卡,全称Secure Digital Memory Card,是一种便携式存储设备,广泛应用于数码相机、手机、平板电脑等电子设备中。

它的原理是通过内置的闪存芯片来实现数据的存储和读写。

SD卡的原理涉及到存储介质、控制芯片、接口等多个方面,下面将逐一介绍。

首先,我们来看SD卡的存储介质。

SD卡的存储介质主要是闪存芯片,它采用了固态存储技术,不需要外部电源就可以长时间保存数据。

闪存芯片内部由大量的存储单元组成,每个存储单元可以存储一个二进制数据。

通过在存储单元中存储电荷来表示数据的0和1。

这种存储方式可以实现数据的快速读写和长时间保存,是SD卡能够高效工作的基础。

其次,控制芯片也是SD卡原理中的重要组成部分。

控制芯片负责管理SD卡的数据存储和读写过程,它包括了控制器和固件。

控制器负责处理主机发送的指令,控制数据的读写和存储,而固件则是控制芯片的操作系统,负责管理存储单元的分配和释放,保证数据的安全可靠。

控制芯片的性能直接影响了SD卡的读写速度和稳定性。

最后,接口也是SD卡原理中不可或缺的一环。

SD卡的接口包括了电源接口、数据接口和控制接口。

电源接口提供电源供给给SD卡,数据接口用于主机和SD卡之间的数据传输,而控制接口则用于主机发送指令给SD卡。

这些接口的设计直接影响了SD卡的插拔稳定性和数据传输速度,因此在SD卡的设计和制造过程中需要严格把关。

综上所述,SD卡的原理包括了存储介质、控制芯片和接口三个方面。

通过闪存芯片的固态存储技术、控制芯片的数据管理和接口的设计,SD卡实现了高效的数据存储和读写。

在实际应用中,我们需要根据具体的需求选择合适的SD卡类型和容量,以达到最佳的使用效果。

希望本文对SD卡的原理有所帮助,谢谢阅读。

sd卡原理

sd卡原理

sd卡原理
SD卡是一种常见的存储设备,它为我们提供了便捷的数据存
储解决方案。

SD卡的原理可以简单概括为以下几个方面:
1. 存储介质:SD卡采用了闪存作为存储介质。

闪存是一种非
易失性存储器,能够持久保存数据,即使在断电的情况下也能保持数据完整性。

2. 控制器:SD卡内部含有一个控制器芯片,该芯片负责管理
和控制存储介质的读写操作。

控制器与主机之间通过SD接口
进行通信。

3. 文件系统:SD卡通常使用FAT32文件系统。

文件系统是一
种将数据组织起来的方式,使得用户可以方便地读取和写入数据。

4. 容量管理:SD卡的容量通常以GB为单位。

控制器芯片会
对存储介质进行划分和管理,将存储空间划分为多个扇区,每个扇区可存储一定大小的数据。

5. 电力管理:SD卡通过引脚接收来自主机的电源供应,其中
包括 3.3V电源线和GND地线。

通过与主机之间的电力交换,SD卡能够正常运行。

6. 数据传输:SD卡采用SPI或SDIO协议进行数据传输。

SPI
协议是一种基于串行通信的协议,而SDIO协议则是一种针对SDIO(Secure Digital Input Output)标准的通信协议。

总体来说,SD卡的原理就是通过控制器和存储介质的协同工作,实现了数据的存储和读写。

用户可以通过SD卡将数据传输到各种设备,方便地实现数据的存储和共享。

SDMMC卡初始化及读写流程分解

SDMMC卡初始化及读写流程分解

二、MMC/SD卡的模型和工作原理PIN脚、SD卡总线、SD卡结构、SD卡寄存器、上电过程SD卡寄存器:OCR:操作电压寄存器: 只读,32位第31位:表示卡上电的状态位CID: 卡身份识别寄存器只读128位生产厂商、产品ID,生产日期和串号等CSD:部分可写128位卡的容量、擦出扇区大小、读写最大数据块的大小、读操作的电流、电压等等 CSR: 卡配置寄存器64位数据位宽RCA:16位相关的卡地址寄存器,卡识别过程中主控器和卡协商出来的一个地址三、SD卡命令和响应格式命令和相应格式SD卡命令,命令类型,ACMD命令响应类型、卡类型、卡状态转换表命令的格式:48位起始位0 方向位(host to card: 1, card to host: 0)内容CRC7 结束位1·响应的格式:48位或者136位卡命令:命令的类型:bc: broadcast without Response 无响应的广播bcr: broadcast with Response 有响应的广播ac: Address(point-to-point) Command: 点对点,DATA0~DATA3数据线上无数据adtc: Adress(point-to-point) Data Transfer Commands 点对点,DATA0~DATA3数据线上有数据CMD0, CMD2, CMD3, CMD55, ACMD41 命令可能会导致卡的状态发生变化响应类型:R1,R1b, R2, R3,R6(SD2.0扩展了R7)扩展内容:SPI工作模式:要知道的特点:只支持一个卡,没有RCA,命令只是MMC/SD的基本的子集SDHC:(支持2GB~32GB):理解CMD8的作用,命令格式和响应,了解CSDV2.0寄存器做了扩展SDIO WIFI:增加CMD52,CMD53CMD8可以通过重新定义先前保留的位,来扩展一些已经存在的命令的新功能。

SD卡读写操作

SD卡读写操作

SD卡操作一、概述1、简介SD卡是基于flash的存储卡。

SD卡和MMC卡的区别在于初始化过程不同。

SD卡的通信协议包括SD和SPI两类。

SD卡使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、ECC算法、缺陷处理和分析、电源管理、时钟管理。

2、功能介绍2.1 特点1)主机无关的FLASH内存擦除和编程读或写数据,主机只要发送一个带地址的命令,然后等待命令完成,主机无需关心具体操作的完成。

当采用新型的FLASH时,主机代码无需更新。

2)缺陷管理3)错误恢复4)电源管理Flash每个扇区有大约10万次的写寿命,读没有限制。

擦除操作可以加速写操作,因为在写之前会进行擦除。

3 SD总线模式3.1 Negotiating Operation Conditions当主机定义了SD卡不支持的电压范围时,SD卡将处于非活动状态,将忽略所有的总线传输。

要退出非活动状态唯一的方法就是重新上电。

3.2 SD卡获取和识别SD卡总线采用的是单主多从结构,总线上所有卡共用时钟和电源线。

主机依次分别访问每个卡,每个卡的CID寄存器中已预编程了一个唯一的卡标识号,用来区分不同的卡。

主机通过READ_CID命令读取CID寄存器。

CID寄存器在SD卡生产过程中的测试和格式化时被编程,主机只能读取该号。

DAT3线上内置的上拉电阻用来侦测卡。

在数据传输时电阻断开(使用ACMD42)。

3.3 卡状态卡状态分别存放在下面两个区域:卡状态(Card Status),存放在一个32位状态寄存器,在卡响应主机命令时作为数据传送给主机。

SD状态(SD_Status),当主机使用SD_STATUS(ACMD13)命令时,512位以一个数据块的方式发送给主机。

SD_STATUS还包括了和BUS_WIDTH、安全相关位和扩展位等的扩展状态位。

3.4 内存组织数据读写的基本单元是一个字节,可以按要求组织成不同的块。

Block:块大小可以固定,也可以改变,允许的块大小是实际大小等信息存储在CSD寄存器。

SD卡读写

SD卡读写

SD卡读写(1)系统硬件文件系统只是数据的组织格式的统称,不涉及到硬件,所以系统的硬件与上篇日志中相同,不作修改。

(2)文件系统结构和读写原理带有文件系统的SD卡的内部结构一般如下表:256MSD卡的文件系统结构文件系统结构说明扇区起始号占用扇区数 Partiton Boot Sector 分区记录扇区 0 1 Reserved Sectors 保留扇区 0 4 FAT1 文件分配表1 4 242 FAT2 文件分配表2 246 242 DIR(FDT) 文件根目录区 488 32 User Data 数据区 520 493560 SD卡的保留扇区中一般不要写入数据,否则可能破坏其文件系统结构,导致操作系统不能识别。

在FAT文件系统中,BPB(Bios ParameterBlock)是一个很重要的参数表,该表通常位于0扇区(保留扇区中的第一个扇区)中的12-36字节,它记录了分区中的一些重要数据如总扇区数、每扇区的字节数、每簇的扇区数、保留扇区数、FAT表占用扇区数等,我这里的256M的SD卡中的BPB表如下:名称占用字节数内容说明BPB_BytesPerSec 2 0x0200 扇区大小为512字节 BPB_SecPerChus 1 0x08 每簇有8个扇区 BPB_RsvdSecCnt 2 0x0004 有4个保留扇区 BPB_NumFATs 1 0x02 有2个FAT表BPB_RootEntCnt 2 0x0200 根目录中可有512个登记项 BPB_TotSec16 20x0000 为0表示总扇区数大于65536BPB_MediaType 1 0xF8 磁盘介质为硬盘 BPB_FATSize16 2 0x00F2 每个FAT表占242个扇区 BPB_SecPerTrk 2 0x3F 每个磁道有63个扇区 BPB_NumHeads 2 0x00FF 磁头数为255BPB_HiddSec 4 0x00000000 有0个隐藏扇区 BPB_TotSec32 4 0x00078A00 共有494080个扇区保留扇区之后是文件分配表,FAT16文件系统有两份文件分配表(FAT),FAT的大小可以在BPB中查到。

sd卡数据读写流程

sd卡数据读写流程

sd卡数据读写流程一、概述SD卡是一种常用的存储设备,应用广泛。

在进行SD卡数据读写操作时,需要了解其基本流程及相关细节。

本文将详细介绍SD卡数据读写流程。

二、准备工作1. 确认SD卡类型:根据需求选择合适的SD卡类型,如标准SD卡、Mini SD卡、Micro SD卡等。

2. 准备读写设备:需要使用支持SD卡的读写设备,如读卡器、手机、相机等。

3. 系统环境:根据不同操作系统选择相应的驱动程序和开发工具。

三、初始化SD卡1. 电源接口:将SD卡插入读写设备中,并接通电源。

2. 查找CMD线:通过CMD线查找到SD卡,并发送复位命令。

3. 发送初始化命令:发送初始化命令后,等待SD卡响应并返回状态码。

四、读取CID和CSD寄存器信息1. 发送CMD10命令:通过CMD10命令可以获取CID寄存器信息。

2. 发送CMD9命令:通过CMD9命令可以获取CSD寄存器信息。

五、设置Block长度1. 发送CMD16命令:通过CMD16命令设置Block长度,即每次读取或写入的字节数。

六、数据传输1. 读取数据:发送CMD17命令,指定读取的起始地址和读取的Block数量,等待SD卡响应并返回数据。

2. 写入数据:发送CMD24命令,指定写入的起始地址和写入的Block数量,等待SD卡响应并写入数据。

七、结束操作1. 发送CMD12命令:结束操作前需要发送CMD12命令,以停止多块传输。

2. 断开电源:操作完成后需要断开SD卡电源。

八、注意事项1. SD卡在进行读写操作时需要保持稳定的电压和供电。

2. 操作过程中需要注意各种状态码及其含义。

3. 合理选择Block长度可以提高读写速度。

以上就是SD卡数据读写流程的详细介绍。

在实际应用中,还需要根据具体情况进行合理调整和优化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SD_PORT |= (1< SD_PORT &= ~(1< SD_PORT |= (1< SD_PORT &= ~(1< SD_PORT |= (1< SD_PORT &= ~(1<
#define SD_MISO_IN
(SD_PIN&(1<
//------------------------------------------------------------// 错误号 //------------------------------------------------------------#define INIT_CMD0_ERROR #define INIT_CMD1_ERROR #define WRITE_BLOCK_ERROR #define READ_BLOCK_ERROR #define TRUE 0x01 0xFF 0xFE 0xFD 0xFC
以下是做 SD 卡试验时使用的电路图:
SD 卡试验时使用的电路 图.JPG
SD_CS/ 连接到单片机的片选 SD 管脚, 只有单片机设置 SD_CS/为低电平时才可以操作 SD 卡。 MOSI 连接单片机 SPI 总线的 MOSI 管脚(SPI 数据 输入),单片机从这个管脚读取 SD 卡内 的数据。 MISO 连接单片机 SPI 总线的 MISO 管脚(SPI 数据输出)、单片机通过这个管脚向 SD 卡内写 入数据。 SCK 连接单片机 SPI 总线的 SCK(SPI 时钟) SD 管脚实际上在 SD 卡内部连接到了 GND,当 SD 插座上没插入 SD 卡时,单 片机从这个管 脚能读到高电平(前提是使用单片机内部上拉输入,或者外部增加一个上拉电阻),一旦插入 SD 卡,这个管脚就变成低电平,这个功能用来检测是否 插入 SD 卡。 RSV1 和 RSV2 是保留功能管脚,不需要操作。 MicroSD 卡的连接和 SD 卡大同小异,只是 MicroSD 卡比 SD 卡少 一个 GND 管脚,所以不能 使用上面做的这种插入卡的检测,实际上现在很多 SD 卡/MicroSD 卡插座都有插入检测管脚, 当然,一分钱一分货,价格上当然 也要贵一些 顺便提一下,普通 SD 卡插座最多 5 块钱。 SPI 命令格式
1、 简介: SD 卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面 的需求而设计的一种新型存储器件,SD 卡允许在两种模式下工作,即 SD 模式和 SPI 模式,本 系统采用 SPI 模式。本小节仅简要介绍在 SPI 模式下,STM32 处理器如何读写 SD 卡,如果读 者如希望详细了解 SD 卡,可以参考相关资料。 SD 卡内部结构及引脚如下图所示:
//**************************************************************************** // 初始化 MMC/SD 卡为 SPI 模式 unsigned char SD_Init(void) //**************************************************************************** { unsigned char retry,temp; unsigned char i;
SD 卡主要引脚和功能为: CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在 0~25MHz 之间变化,SD 卡 的总线管理器可以不受任何限制的自由产生 0~25MHz 的频率; CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址, 也可以是到所有卡;回复是对之前命令的回答,回复可以来自单 卡或所有卡; DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。 SD 卡以命令形式来控制 SD 卡的读写等操作。可根据命令对多块或单块进行读写操作。在 SPI 模式下其命令由 6 个字节构成,其中高位在前。SD 卡命令 的格式如表 1 所示,其中相关参数 可以查阅 SD 卡规范。
1) 、 操作 FAT 分区表要增加程序代码量、 增加 SRAM 的消耗, 对于便携应用来说代码大小和 占 用 SRAM 的多少至关重要。 2)、即使我们对 FAT 分区表不做任何了解,实际上我们一样可以向 SD 卡上写入数据,这就表 明使用 FAT 对我们做数 据存储应用来说如同鸡肋。 3) 、 耗费大量经历和时间去了解 FAT 分区表对于我们做嵌入式软件开发的人来说有些得不偿失。 4)、SD 卡支持 两种操作模式,SD 模式和 SPI 模式,SPI 模式做 SD 数据操作时根本不需要 知道 FAT,这时候 SD 卡对于我们来说实际上就是个大的、快速的、方便的、容 量可变的外部 存储器。 基于以上原因, 一般情况下对 SD 卡的操作只需要了解 SPI 通讯就可以了, 而现在大部分单片机 都有 SPI 接口,那么操作 SD 卡 易如反掌。
Byte 1 Byte2-5 Byte 6
7
6
5
0
31
0
7
0
0
1
Command
Command Argument
CRC
1பைடு நூலகம்
以下是一个简单的测试 SD 卡读 写的程序, 程序是基于 Atmega128 单片机编写的, 对于 Atmega 的其他单片机仅需要做管脚改动就可以使用,其他单片机更改要更大。 sd.h //****************************************************************** //SPI 各线所占用的端口 #define SD_SS #define SD_SCK #define SD_MOSI #define SD_MISO PB6 PB1 PB2 PB3
SD 卡内部图.JPG
2、SD 卡管脚图:
SD 卡图.JPG
3、SPI 模式下 SD 各管脚名称为: sd 卡:
SPI 模式下 SD 各管脚名称 为.JPG
注: 一般 SD 有两种模式:SD 模式和 SPI 模式,管脚定义如下: (A)、SD MODE 1、CD/DATA3 8、DATA1 9、DATA2 (B) 、 SPI MODE 1、 CS RSV 9、RSV 2、 DI 3、 VSS 4、 VDD 5、 SCLK 6、 VSS2 7、 DO 8、 2、CMD 3、VSS1 4、VDD 5、CLK 6、VSS2 7、DATA0
0x40 + 13 0x40 + 16 0x40 + 17 0x40 + 18 0x40 + 24 0x40 + 25
//片选关(MMC/SD-Card Invalid) #define SD_Disable() SD_SS_H
//片选开 (MMC/SD-Card Active) #define SD_Enable() SD_SS_L
while(!(UCSR0A & (1 << UDRE0))); /* UDR0 = content; /* 发送数据 */
判断上次发送有没有完成
*/
} void putstr(unsigned char *s) {
while(*s) { putchar(*s); s++; }
}
//**************************************************************************** // 端口初始化 void SD_Port_Init(void) //**************************************************************************** { SD_PORT SD_DDR SD_DDR } |= (1<< |= (1<<< &= ~(1<
//******************************************************************
#define SD_DDR #define SD_PORT #define SD_PIN
DDRB PORTB PINB
#define SD_SS_H #define SDSS_L #define SD_SCK_H #define SD_SCK_L #define SD_MOSI_H #define SD_MOSI_L
#define SD_STOP_TRANSMISSION #define SD_SEND_STATUS #define SD_SET_BLOCKLEN #define SD_READ_BLOCK #define SD_READ_MULTI_BLOCK #define SD_WRITE_BLOCK #define SD_WRITE_MULTI_BLOCK
4、MicroSD 卡管脚图:
MicroSD 卡管脚图.JPG
5、MicroSD 卡管脚名称:
MicroSD 卡管脚名 称.JPG
SD 卡与 MicroSD 卡仅仅是封装上的不同,MicroSD 卡更小,大小上和一个 SIM 卡差不多,但 是协议与 SD 卡相同。 一般我们用单片机操作 SD 卡时,都不需要对 FAT 分区表信息做处理,原因如下:
SD_TEST.C //****************************************************************************************/ //ICC-AVR application builder : 03-5-20 8:39:11 // Target : M128 // Crystal: 3.6864Mhz
//------------------------------------------------------------// MMC/SD 命令(命令号从 40 开始,只列出基本命令,并没有都使用) //------------------------------------------------------------#define SD_RESET #define SD_INIT #define SD_READ_CSD #define SD_READ_CID 0x40 + 0 0x40 + 1 0x40 + 9 0x40 + 10 0x40 + 12
相关文档
最新文档