sd卡烧写原理
- 格式:docx
- 大小:37.23 KB
- 文档页数:4
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模式的通信方式。
嵌⼊式芯⽚程序常见烧写⽅法⼀般刚拿到⼿中的板⼦是没有程序的,此时需要向板⼦⾥⾯烧写程序。
常见的⽅法如下:1、通过UART如STC51单⽚机,Hi3518等⽚⼦,是通过UART进⾏烧写程序的,烧写时需要配合⼚商提供的相应的PC机烧写软件。
2、通过USB烧写与UART相似,只是⽐UART烧写速度快得多。
3、通过JTAG烧写需要使⽤专⽤的JTAG⼯具与上位机配合。
4、通过SWIO烧写需要相应的烧写⼯具配合。
5、通过SD卡进⾏烧写系统⽀持从SD卡进⾏启动,启动时将SD卡⽂件复制到RAM中,然后运⾏这⼀⼩段程序,这⼀⼩段程序就可以⽤来烧写到板⼦上的FLASH 上。
6、通过专⽤的烧录器进⾏烧写。
这个是适⽤于⼤批量⽣产时,⼀次可以同时烧录成百⽚。
我在⼯⼚产线上看到,⼯⼈将⼀个⼀个的FLASH放置在烧录器上,然后压紧治具,在电脑上⼀点上位机,就完成了所有的⽚⼦烧写。
下⾯着重说⼀下SD卡烧写开发时,SD卡主要⽤来烧写U-boot,烧写完U-boot后,就⽤UBOOT来烧写内核、⽂件系统。
使⽤SD卡烧写的⽅式,前提是SOC⽀持SD卡启动,SOC上电开机后,能从SD卡中加载固件并运⾏。
1、制做SD启动卡;2、将卡启动UBOOT烧⼊SD卡分区中。
此时是将SD卡看做⼀个FLASH来使⽤,直接使⽤裸数据写⼊。
SOC启动后,从⾃动从这⾥复制数据到IRAM,并运⾏;3、将⽀持FLASH启动的UBOOT,通过PC机放⼊SD卡中。
4、将SOC设置为SD卡启动,插卡,上电,等待SD卡中的UBOOT被加载到DRAM中运⾏起来,然后通过UBOOT命令,将SD卡中的⽀持FLASH启动的UBOOT烧⼊到FLASH 中。
5、掉电,拔卡,将SOC设置为FLASH启动,重新上电即可。
SD卡的结构原理和基本读写操作方式摘要:本文首先介绍了SD Memory Card ( Secure D ig ita l MemoryCard)的基本结构和原理,着重对SD 卡的命令字和操作流程进行介绍。
接着研究了三星32位嵌入式处理器S3C2410与SD 卡硬件接口电路及其对SD卡的基本读写操作方式。
1 引言SD卡( Secure DigitalMemory Card)是一种基于Flash的新一代存储器,它着重数据存储的安全、容量和性能,是许多便携式电子产品如数码相机、手提电话, PDA 等理想的外部存储介质。
2 SD的基本概念2. 1 SD的通信协议SD卡系统可以在两种通信协议下工作: SD协议和SP I协议。
用户可以在硬件初始化时自由选择SD卡系统的通信协议。
对于特定的硬件电路,用户只需使用一种通信协议即可。
本文根据笔者的硬件,仅讨论最常用的SD协议。
2. 2 SD数据传输方式SD支持两种数据传输方式: 1 - bit方式(标准总线)和4- bit方式(宽总线)。
在1 - bit方式下,数据仅仅在数据线0(DAT[ 0 ])上传输。
在4 - bit方式下,数据在4 根数据线(DAT[ 3: 0 ])上同时传输。
在4 - bit数据传输方式下,最高的数据传输速率可达100Mb / sec。
表1列出了在两种方式下SD接口信号的定义。
上电后,缺省状态下系统工作于1 - bit方式。
在SD卡处于传输状态时,用户可以自由地更改为1 - bit或4 - bit方式。
2. 3 SD 通信原理SD总线是一个星型的总线结构,系统中允许有一个主控器,最多可达十个从设备( SD卡)。
在系统初始化时,主控器分别为每一个设备分配一个设备地址,此后主控器就可以根据此设备地址独立操作该设备。
SD总线通信是基于命令和数据位流的,每一个数据流都包括一个起始位和一个结束位。
每一个SD命令表征一个卡操作的开始。
SD命令由命令线(CMD)进行传输。
sd卡工作原理SD卡(Secure Digital card)是一种用于存储数字信息的储存设备。
它是由Toshiba、SanDisk和Panasonic联合推出的一种便携式存储设备,通常用于存储照片、音乐、视频等文件。
那么,SD卡是如何工作的呢?下面,我们来了解一下SD卡的工作原理。
1. SD卡的基本结构SD卡由多个部分组成,包括控制器、存储器、晶振器和接口等。
其中,控制器是SD卡的关键部分,它负责管理SD卡的读写操作和数据交换。
存储器则是用于存储数据的部分,晶振器主要用于产生时钟信号,接口则用于与设备进行通信。
2. SD卡的读写过程当需要读取SD卡内的数据时,设备会向SD卡发送请求,SD卡通过控制器进行数据读取操作,并将读取的数据返回给设备。
当需要向SD卡写入数据时,设备会发送数据到SD卡,SD卡通过控制器将数据存储到存储器中。
3. SD卡的文件系统SD卡中的文件系统是通过文件分配表(FAT)来进行管理的。
FAT是一种简单的文件系统,它将文件分割成多个簇,每个簇的大小为固定值。
当存储一个文件时,FAT会分配一定数量的簇来存储该文件,并将每个簇的使用情况记录在一个文件分配表中。
当需要读取文件时,设备通过文件分配表来查找文件并读取相应的簇。
4. SD卡的数据安全SD卡具有一些安全功能,例如密码保护和数据加密等。
密码保护功能通过限制访问SD卡的设备来保护数据安全。
数据加密功能则是将数据加密后再存储到SD卡中,从而保证数据的安全性。
总之,SD卡是一种方便快捷的存储设备,它可以轻松地存储和传输各种类型的数据。
了解SD卡的工作原理有助于更好地使用和维护这种设备。
SD卡基础原理及读写程序1、简介:SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。
本小节仅简要介绍在SPI模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。
SD 卡内部结构及引脚如下图所示2、SD卡管脚图:3、SPI模式下SD各管脚名称为:注:一般SD有两种模式:SD模式和SPI模式,管脚定义如下:(A)、SD MODE 1、CD/DATA3 2、CMD 3、VSS1 4、VDD 5、CLK 6、VSS2 7、DATA0 8、DATA1 9、DATA2(B)、SPI MODE 1、CS 2、DI 3、VSS 4、VDD 5、SCLK 6、VSS2 7、DO 8、RSV 9、RSVSD 卡主要引脚和功能为:CLK:时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz 的频率;CMD:双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;DAT0~3:数据线,数据可以从卡传向主机也可以从主机传向卡。
SD卡以命令形式来控制SD卡的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其命令由6个字节构成,其中高位在前。
SD卡命令的格式如表1所示,其中相关参数可以查阅SD卡规范。
4、MicroSD卡管脚图:5、MicroSD卡管脚名称:SD 卡与MicroSD卡仅仅是封装上的不同,MicroSD卡更小,大小上和一个SIM卡差不多,但是协议与SD卡相同。
一般我们用单片机操作SD 卡时,都不需要对FAT分区表信息做处理,原因如下:1)、操作FAT分区表要增加程序代码量、增加SRAM的消耗,对于便携应用来说代码大小和占用SRAM的多少至关重要。
内存卡的工作原理
内存卡是一种用于存储数据的电子设备,常见的有SD卡、TF 卡等。
它的工作原理可以简单描述如下:
1. 存储单元:内存卡的存储单元是由许多闪存芯片组成的。
这些闪存芯片内部有大量的存储单元,通常是由浮动栅电容或浮动栅电晕管来存储电荷。
每个存储单元可以存储一定的二进制信息(0或1)。
2. 控制电路:内存卡中还有一个控制电路,负责与主机(如相机、手机等)进行通信,并控制存储单元的读写操作。
3. 存储操作:当主机需要读取内存卡中的数据时,控制电路会通过总线将指令发送给内存芯片,告诉它要读取哪个地址的数据。
内存芯片会根据指令找到相应的存储单元,并将数据读取出来反馈给控制电路,再由控制电路传递给主机。
4. 写入操作:当主机需要向内存卡写入数据时,控制电路会将数据传递给内存芯片的指定存储单元,并通过一系列操作将数据写入。
5. 数据保持:内存卡的数据可以长时间保存,即使断电也不会丢失。
这是由于闪存芯片的存储单元使用特殊的物理结构来实现数据的长期保持,而不需要持续的电力支持。
总的来说,内存卡的工作原理是通过控制电路与存储单元进行读写操作,并利用闪存芯片的特殊结构来实现数据的存储和保
持。
它在各种电子设备中被广泛应用,如数码相机、手机、平板电脑等。
sd工作原理
SD卡(Secure Digital Card)是一种可移动存储设备,用于存储和传输数据。
它由闪存芯片和控制器芯片组成。
SD卡的工作原理如下:
1. 插入SD卡:将SD卡插入到设备的SD卡槽中。
2. 识别SD卡:设备通过识别SD卡槽中的接触点,确定SD 卡的存在。
3. 供电和信号传输:设备向SD卡提供电源,并通过SD卡槽中的引脚与SD卡进行数据传输。
4. 控制器识别:控制器芯片通过与SD卡进行通信,识别SD 卡的容量、类型和速度等信息。
5. 数据读写:设备通过控制器芯片向SD卡发送读写命令,控制芯片将读写请求翻译成SD卡能够理解的指令,SD卡将数据从闪存芯片中读取或写入。
6. 数据传输:SD卡通过与控制器芯片的数据引脚进行数据传输,将读取或写入的数据传送到设备中或从设备中接收数据。
7. 读写完成:数据传输完成后,SD卡将传输成功的信息发送给设备,设备通过控制器芯片接收并处理这些信息。
8. 移除SD卡:在使用完毕后,可以通过操作系统或设备设置中的“安全移除”功能,断开SD卡与设备的连接,并从SD卡槽中取出SD卡。
总结:SD卡的工作原理是通过设备识别和供电、控制器与SD卡的通信、控制器翻译读写请求、通过数据引脚进行数据传输等步骤,实现数据存储和传输的功能。
sd卡工作原理
SD卡(Secure Digital Card),是一种使用闪存技术存储数据的存储设备。
它采用了非易失性存储硅片作为存储介质,通过控制接口来读写数据。
SD卡的工作原理如下:
1. 电压传输:SD卡通过引脚传输电信号来读取和写入数据。
其中,CMD(命令)和CLK(时钟)两个引脚用于控制SD 卡的操作,DAT(数据)引脚用于读写数据。
2. 初始化和寻址:当SD卡插入设备中时,设备会发送特定的命令来初始化SD卡。
初始化完成后,设备会向SD卡发送寻址命令,用于确定要读写的数据区域。
3. 数据读写:通过引脚传输的命令和数据来实现数据的读写操作。
设备会发送相应的命令告知SD卡需要读取或写入数据,并通过DAT引脚传输具体的数据。
4. 数据保护:SD卡采用了多种数据保护机制来确保数据的完整性和安全性。
例如,CRC(循环冗余校验)用于检验传输过程中数据是否发生错误,密码保护和加密机制用于保护数据的安全性。
5. 垃圾回收:由于闪存技术的特性,SD卡的存储单元在多次擦除和写入后会出现损耗。
为了延长SD卡的使用寿命,SD 卡会自动进行垃圾回收操作,将已经无效的数据块标记为可用
状态,以便后续的数据写入。
总的来说,SD卡通过电压传输、初始化和寻址、数据读写、
数据保护和垃圾回收等步骤来实现数据的存储和读取。
它是一种方便、可靠的存储设备,广泛应用于各种便携式电子设备中。
sd卡工作原理
SD卡,全名Secure Digital Memory Card,是一种常见的存储媒介,与我们的手机、相机等电子设备密不可分。
那么它的工作原理是什么呢?
首先,SD卡的内部结构主要包括控制器和存储芯片两部分。
其中,控制器是SD卡的“大脑”,负责管理芯片的读写、缓存、错误修复等操作。
存储芯片则是具体的存储介质,通常采用闪存技术。
当我们将SD卡插入设备时,设备会先发送一条指令给SD卡控制器,以确认SD卡是否存在。
接着,设备可以向SD卡发送读写指令,控制器会根据指令将相应的数据读取或写入存储芯片。
SD卡的读写速度受多种因素影响,例如存储芯片类型、读写模式、设备接口等。
在使用SD卡时,我们需要注意保护数据的完整性和安全性,避免误删除、病毒攻击等风险。
总的来说,SD卡作为一种方便、可靠的存储媒介,其工作原理虽然复杂,但通过掌握一些基本知识,我们可以更好地利用它为生活、工作带来便利。
- 1 -。
SD卡硬件原理图及其读写程序2011-03-28 17:45转载自sail_007最终编辑sail_007 最近开始整理以前画过原理图和程序今天先整理出了SD卡的硬件和SPI方式的读写程序。
今后会陆续写把DS1302时钟芯片GPRS模块CAN总线通信PWM数控电压也整理出来。
一方面是想帮自己总结一下另外如果还能帮助到其他的单片机爱好者那也就更好了。
当然水平有限整理出来的东西可能也有许多错误的地方也请高手能指出不胜感激。
先发张SD卡的原理图。
说明我用的是5V单片机SD卡则是3.3v如果直接连接引脚长期使用会影响SD卡寿命。
我一开始选用了普通的光耦触发可能是导通速率不够快无法实现SPI通信后来我就改用9013就行了。
下图上US1是SD卡壳其实1到9引脚对应了SD卡的9个引脚10号引脚是卡插入标志也就是说当有SD卡插入时10号引脚会接3.3v的地这样单片机就可以查询是否有卡了。
在SPI总线模式下CS为主控制器向卡发送的片选信号SCLK为主控制器向卡发送的时钟信号INDataIn为主控制器向卡发送的单向数据信号MISODataOut为卡向主控制器发送的单向数据信号。
程序如下说明我用的是freescale的DP256单片机该单片机有SPI 设备接口只要将其初始化成功便可完成通信设置。
uchar CMD0RespCMD1RespCMD59RespCMD16RespCMD9RespC MD17RespCMD24RespCMD58Resp void SD_Initializevoiduchar csdbuf16TempValue ucharcmdparam4recbuf600resp4resptype uchar sendbuf600 ulong len ulong i ulong BlockAdd SD_InsertDetect Pim.pts.bit.pts70 //cs0 SD_SPIDelay25 Pim.pts.bit.pts71 //cs1 SD_SPIDelay2Pim.ddrs.bit.ddrs70 //pin cs direction Spi0.spicr1.bit.spe0 //spi enable Pim.ddrs.bit.ddrs71 //pin cs directionPim.pts.bit.pts70//cs0 Spi0.spibr.byte0x02 //8MHz31.25kHz0x07-0x00 Spi0.spicr1.bit.mstr1 //master modeSpi0.spicr1.bit.ssoe1 //ss output enable Spi0.spicr1.bit.cpol0//cpol0 //cpol1 070215 Spi0.spicr1.bit.cpha0 //cpha0Spi0.spicr2.byte0x18 //normal drive input pullup TempValueSpi0.spisr.byte//clear SPIF first step TempValueSpi0.spidr.byte//clear SPIF second stepSpi0.spicr1.bit.spe1 //spi enable CMD0RespSD_ResetSDCMD1RespSD_ActiveInit whileCMD1Resp0x01CMD1RespSD_ActiveInit 白开水易拉罐主页博客相册个人档案好友i贴吧看看Ta是谁吧页码1/5Ww2011/6/26/wolf9s/blog/item/47e2a620 212d80268744f98c.htmlvoid SD_SPIDelayuint value uint i for i 0 i valuei SPI_SendByte0xFF // 发送0xFF clock out 0xFF uchar SD_ResetSDvoid uchar param4 0000respSD_SendCmdCMD0 param SD_R1 resp return resp / 函数名称:void SPI_SendByte Name: void SPI_SendByte 功能描述: 通过SPI接口发送一个字节Function: send a byte by SPI interface 输入: INT8U byte: 发送的字节Input: INT8U byte: the byte that will be send 输出: 无Output: NULL / voidSPI_SendByteuchar byte uchar TempValue Spi0.spidr.byte byte / 发送数据放入SPI数据寄存器/ while0 Spi0.spisr.byte 0x80 / 等待SPIF置位即等待数据发送完毕/ / wait for SPIF being set that is wait for finishing of data being send / TempValueSpi0.spidr.byte / 函数名称: INT8U SPI_RecByte Name:INT8U SPI_RecByte 功能描述: 从SPI接口接收一个字节Function: receive a byte from SPI interface 输入: 无Input: NULL 输出: 收到的字节Output: the byte that be received / uchar SPI_RecBytevoid uint ReadCounter ReadCounter0Spi0.spidr.byte 0xFF while0 Spi0.spisr.byte 0x80 / 等待SPIF 置位即等待收到数据/ ReadCounter ifReadCounter25 break / wait for SPIF being set that is wait for being received data / returnSpi0.spidr.byte / 读取收到的字节read the byte received / / 函数名称: //INT8U SD_SendCmd Name: INT8USD_SendCmd 功能描述: 向卡发送命令并取得响应Function: send command to the cardand get a response 输入: INT8U cmd : 命令字Input: INT8U cmd : command byteINT8U param : 命令参数长度为4字节INT8U param :command parameterlength is 4 bytes INT8U resptype : 响应类型INT8U resptype: response type INT8U resp : 响应长度为1-5字节INT8U resp : responselength is 1-5 bytes 输出: 0: 正确0: 错误码Output: 0: right 0: error code / voidSD_SendCmduchar cmd uchar paramuchar resptype uchar resp long irlen uchar tmp Pim.pts.bit.pts70//cs0 SPI_SendBytecmd0x3F 0x40 / 发送命令头和命令字send command header and word / for i 3 i 0 i-- SPI_SendByteparami / 发送参数send parameters / SPI_SendByte0x95 / CRC校验码只用于第1个命令CRConly used for the first command / rlen 0 switch resptype / 根据不同的命令得到不同的响应长度/ / according various commandget the various response length / case 1: rlen 1 break case 2: rlen 2 break case 4: rlen 5 break default:SPI_SendByte0xFF Pim.pts.bit.pts71 break i 0 do / 等待响应响应的开始位为0 / / Wait for a responsea response is a start bitzero / tmp SPI_RecByte i while tmp 0x80 0 iSD_CMD_TIMEOUT for i rlen - 1 i 0 i-- respi tmp tmpSPI_RecByte / 循环的最后发送8clock at the last recycleclock out 8 clock / Pim.pts.bit.pts71//cs1 // return SD_NO_ERR //new statement 页码2/5Ww2011/6/26/wolf9s/blog/item/47e2a620 212d80268744f98c.html/ 函数名称: INT8U SD_ReadBlockName: INT8U SD_ReadBlock 功能描述: 从SD卡中读一个块Function: read a single block from sd card 输入: INT32U blockaddr: 块地址Input: INT32U blockaddr: address of block INT8U recbuf : 接收缓冲区长度512Bytes INT8U recbuf : the buffer of receivelength is 512Bytes 输出: 0: 正确0: 错误码Output: 0: right 0: error code / uchar SD_ReadBlockulong blockaddr uchar recbuf uchar param4resp // if blockaddrsds.block_num // return SD_ERR_OVER_CARDRANGE / 操作超出卡容量范围operate over the card range /SD_PackParamparam blockaddr / 将参数转化为字节形式change the parameter to bytes form / SD_SendCmdCMD17 param SD_R1 resp SD_ReadBlockDataSD_BLOCKSIZE recbuf/ 读出数据read data from sd card / return resp / 函数名称: INT8U SD_ReadBlockData Name: INT8USD_ReadBlockData 功能描述: 从SD卡中读取数据块Function: read block data from sd card 输入: INT32U len : 长度Input: INT32U len : length INT8U recbuf : 接收缓冲区INT8U recbuf : the buffer of receive 输出: 0: 正确0: 错误码Output: 0: right 0: error code / voidSD_ReadBlockDataulong len uchar recbuf uchar tmp ulong i 0 Pim.pts.bit.pts70//cs0 do / 等待接收数据开始令牌0xFE wait for receiving data start token 0xFE / tmp SPI_RecByte iwhiletmp 0xFF i SD_CMD_TIMEOUT for i 0 i len i recbufi SPI_RecByte / 接收数据receive data / i SPI_RecByte i i 0:错误码Output: 0: right 0: error code ucharSD_SetBlockLenulong length uchar param4respretSD_PackParamparam length //将参数转化为字节形式change the parameter to bytes form SD_SendCmdCMD16 paramSD_R1 resp return resp / / 函数名称: void SD_PackParam Name: void SD_PackParam 功能描述: 将32位的参数转为字节形式Function: change 32bit parameter to bytes form 输入: INT8U parameter: 字节参数缓冲区Input: INT8U parameter: the buffer of bytes parameter INT32U value : 32位参数INT32U value : 32bit parameter 输出: 无Output: NULL / void SD_PackParamuchar parameter ulong value valuevalue512 parameter3 ucharvalue 24 parameter2 ucharvalue 16 parameter1 ucharvalue 8 parameter0 ucharvalue / 函数名称: INT8USD_WriteBlock Name: INT8U SD_WriteBlock 功能描述: 向SD卡中写入一个块Function: write a block to sd card 输入: INT32U blockaddr: 块地址Input: INT32U blockaddr: address of block INT8U sendbuf : 发送缓冲区长度512Bytes INT8U sendbuf : the buffer of sendlength is 512Bytes 输出: 0: 正确0: 错误码Output: 0: right 0: error code / ucharSD_WriteBlockulong blockaddr uchar sendbuf 页码3/5Ww2011/6/26/wolf9s/blog/item/47e2a620 212d80268744f98c.html uchar param4resprettmp2 ulong i // if blockaddr sds.block_num // returnSD_ERR_OVER_CARDRANGE / 操作超出卡容量范围operate over the card range / SD_PackParamparam blockaddr / 将参数转化为字节形式change the parameter to bytes form / SD_SendCmdCMD24 param SD_R1 resp / 写单块命令write single block / SD_WriteBlockData0 SD_BLOCKSIZE sendbuf / 写入数据write data / return resp / 函数名称: INT8USD_WriteBlockData Name: INT8U SD_WriteBlockData 功能描述: 向sd卡写数据块Function: write block data to sd card 输入: INT8U bmulti : 是否为多块操作1:是0:否Input:INT8U bmulti : multi blocks operate 1:Y 0:N INT32U len : 长度INT32U len : length INT8U sendbuf: 发送缓冲区INT8U sendbuf : the buffer of send 输出: 0: 正确0: 错误码Output: 0: right 0: error code / void SD_WriteBlockDatauchar bmulti ulong len uchar sendbuf uint i uchar tmp Pim.pts.bit.pts70//cs0 SPI_SendByte0xFF / 开始发送数据之前发送8个clock clock out 8 clk before start / if bmulti 1SPI_SendByteSD_TOK_WRITE_STARTBLOCK_M / 写多块开始令牌start token of write multi blocks / elseSPI_SendByteSD_TOK_WRITE_STARTBLOCK / 写单块开始令牌start token of write single block / for i 0 i len iSPI_SendBytesendbufi / 发送数据send data / SPI_SendBytei 8 0xFF SPI_SendBytei 0xFF / 发送CRC16校验码send CRC16 check code / tmp SPI_RecByte Pim.pts.bit.pts71//cs1 SD_WaitBusy void SD_WaitBusy uchar tmpiPim.pts.bit.pts70//cs0 i0 do / 等待忙结束wait for being busy end / tmp SPI_RecByte i while tmp 0xFF i 10000 / 忙时收到的值为0xFF always receive 0xFF when card is busy /Pim.pts.bit.pts71//cs1 / 函数名称: void SD_HardWareInit Name: void SD_HardWareInit 功能描述: 初始化访问SD卡的硬件条件Function: initialize the hardware condiction that access sd card 输入: 无Input: NULL 输出: 无Output: NULL / uchar SD_InsertDetect uchar InflagifPim.ptp.bit.ptp30//sd insert Inflag1 else Inflag0 return Inflag 类别默认分类添加到搜藏分享到i贴吧浏览57 评论0 上一篇sd卡的读写转下一篇一般SD卡和SDHC卡读写函数 .c -... 最近读者网友评论发表评论姓名哦没他发内容插入表情▼ 闪光字页码4/5Ww2011/6/26/wolf9s/blog/item/47e2a620 212d80268744f98c.html 同时将此文章分享给好友验证码请点击后输入四位验证码字母不区分大小写发表评论�0�82011 Baidu看看Ta是谁吧页码5/5Ww2011/6/26/wolf9s/blog/item/47e2a620 212d80268744f98c.html。
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)Win32DiskImager
Win32DiskImager是一个Windows下的烧写工具,可以用来将镜像文件烧写到SD卡中。
它支持多种格式的镜像文件,并且可以对SD卡进行格式化、分区等操作。
(3)Etcher
Etcher是一个跨平台的烧写工具,支持Windows、Linux和MacOS 等多个操作系统。
它可以自动检测SD卡并进行格式化、分区等操作,并且支持多种格式的镜像文件。
四、总结
本文详细介绍了SD卡的结构和工作原理,并且阐述了SD卡烧写的流程和常用工具。
通过深入了解SD卡烧写原理,可以更好地应用SD卡进行嵌入式系统开发。