![[信息与通信]SD卡.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/5/2331cb64-7231-48a5-817d-fa14ff5d3403/2331cb64-7231-48a5-817d-fa14ff5d34031.gif)
![[信息与通信]SD卡.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/5/2331cb64-7231-48a5-817d-fa14ff5d3403/2331cb64-7231-48a5-817d-fa14ff5d34032.gif)
![[信息与通信]SD卡.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/5/2331cb64-7231-48a5-817d-fa14ff5d3403/2331cb64-7231-48a5-817d-fa14ff5d34033.gif)
![[信息与通信]SD卡.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/5/2331cb64-7231-48a5-817d-fa14ff5d3403/2331cb64-7231-48a5-817d-fa14ff5d34034.gif)
![[信息与通信]SD卡.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/5/2331cb64-7231-48a5-817d-fa14ff5d3403/2331cb64-7231-48a5-817d-fa14ff5d34035.gif)
已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SD卡资料协议规范 2009-09-25 21:30:55 阅读344 评论0 字号:大中小 这些天没有出门,一直在家研究SD卡的SPI模式的初始化顺序,这里为大家总结了一下编写该程序所需要的知识: 1.SD卡的官方资料(我承认这个资料很垃圾,比起民间的技术总结它的内容可谓又臭又长,但是作为基础也要了解一下,SD协议不用看) 2.清晰明了的MMC卡时序图(虽然这个是MMC卡的,但是在初始化的时候CMD0的时序是一样的)电路:我用的SD卡的电路其实很简单,参考SD卡的官方资料中的电路链接就可以的。供电问题:由于SD卡的电压是3.3V,所以你的CPU必须支持3.3V的IO端口输出。再来说一说鸡毛蒜皮的细节:1.为了使SD卡初始化进入SPI模式,我们需要使用的命令有3个:CMD0,ACMD41,CMD55(使用ACMD类的指令前应先发CMD55,CMD55起到一个切换到ACMD类命令的作用)。2. 为什么在使用CMD0以后不使用CMD1?CMD1是MMC卡使用的指令,虽然本文并不想讨论MMC卡的问题,但是我还是要说:为了实现兼容性,上电或者 发送CMD0后,应该首先发送CMD55+ACMD41确认是否有回应,如果有回应则为SD卡,如果等回应超时,则可能是MMC卡,再发CMD1确认。3.正确的回应内容应该是: CMD00x01(SD卡处于in-idle-state) CMD550x01(SD卡处于in-idle-state) ACMD410x00(SD卡跳出in-idle-state,完成初始化准备接受下一条指令) 这里要说的是如果最后的回应内容还是0x01的话,可以循环发送CMD55+ACMD41,直到回应的内容0x00。4. 在所有的指令中,唯独CMD0特殊,在向SD卡发送以前需要向SD卡发送74+个时钟。那么为什么要74个CLK呢?因为在上电初期,电压的上升过程据 SD卡组织的计算约合64个CLK周期才能到达SD卡的正常工作电压他们管这个叫做Supply ramp up time,其后的10个CLK是为了与SD卡同步,之后开始CMD0的操作,严格按照此项操作,一定没有问题。5.关于SD卡的SPI总线,在读入数据时SD卡的SPI是CLK的上升沿输入锁存,输出数据也是在上升沿。6.向SD卡写入一个CMD或者ACMD指令的过程是这样的:首先使CS为低电平,SD卡使能;其次在SD卡的Din写入指令;写入指令后还要附加8个填充时钟,是SD卡完成内部操作;之后在SD卡的Dout上接受回应;回应接受完毕使CS为低电平,再附加8个填充时钟。7.在SD卡的Din没有数据写入时,应使Din保持高电平SD卡命令SD卡命令共分为12类,分别为class0到class11,不同的SDd卡,主控根据其功能,支持不同的命令集 如下Class0 :(卡的识别、初始化等基本命令集)CMD0:复位SD 卡.CMD1:读OCR寄存器.CMD9:读CSD寄存器.CMD10:读CID寄存器.CMD12:停止读多块时的数据传输CMD13:读 Card_Status 寄存器Class2 (读卡命令集):CMD16:设置块的长度CMD17:读单块.CMD18:读多块,直至主机发送CMD12为止 .Class4(写卡命令集) :CMD24:写单块.CMD25:写多块.CMD27:写CSD寄存器 .Class5 (擦除卡命令集):CMD32:设置擦除块的起始地址.CMD33:设置擦除块的终止地址.CMD38: 擦除所选择的块.Class6(写保护命令集):CMD28:设置写保护块的地址.CMD29:擦除写保护块的地址.CMD30: Ask the card for the status of the write protection bitsclass7:卡的锁定,解锁功能命令集 class8:申请特定命令集 。class10 11 :保留其中class1,class3,class9:SPI模式不支持 SD卡接口的完整规范中小 特性: 容量:32MB/64MB/128MB/256MB/512MB/1GByte 兼容规范版本1.01 卡上错误校正 支持CPRM 两个可选的通信协议:SD模式和SPI模式 可变时钟频率025MHz 通信电压范围:2.0-3.6V 工作电压范围:2.0-3.6V 低电压消耗:自动断电及自动睡醒,智能电源管理 无需额外编程电压 卡片带电插拔保护 正向兼容MMC卡 高速串行接口带随即存取 支持双通道闪存交叉存取 快写技术:一个低成本的方案,能够超高速闪存访问和高可靠数据存储 最大读写速率:10Mbyte/s 最大10个堆叠的卡(20MHz,Vcc=2.7-3.6V) 数据寿命:10万次编程/擦除 CE和FCC认证 PIP封装技术 尺寸:24mm宽32mm长1.44mm厚说明: 本SD卡高度集成闪存,具备串行和随机存取能力。可以通过专用优化速度的串行接口访问,数据传输可靠。接口允许几个卡垛叠,通过他们的外部连接。接口完全符合最新的消费者标准,叫做SD卡系统标准,由SD卡系统规范定义。 SD卡系统是一个新的大容量存储系统,基于半导体技术的变革。 它的出现,提供了一个便宜的、结实的卡片式的存储媒介,为了消费多媒体应用。 SD卡可以设计出便宜的播放器和驱动器而没有可移动的部分。 一个低耗电和广供电电压的可以满足移动电话、电池应用比如音乐播放器、个人管理器、掌上电脑、电子书、电子百科全书、电子词典等等。 使用非常有效的数据压缩比如MPEG,SD卡可以提供足够的容量来应付多媒体数据。框图: SD卡上所有单元由内部时钟发生器提供时钟。接口驱动单元同步外部时钟的DAT和CMD信号到内部所用时钟。 本卡由6线SD卡接口控制,包括:CMD,CLK,DAT0-DAT3。 在多SD卡垛叠中为了标识SD卡,一个卡标识寄存器(CID)和一个相应地址寄存器(RCA)预先准备好。 一个附加的寄存器包括不同类型操作参数。 这个寄存器叫做CSD。 使用SD卡线访问存储器还是寄存器的通信由SD卡标准定义。 卡有自己的电源开通检测单元。 无需附加的主复位信号来在电源开启后安装卡。 它防短路,在带电插入或移出卡时。 无需外部编程电压。 编程电压卡内生成。 SD卡支持第二接口工作模式SPI。 如果接到复位命令(CMD0)时,CS信号有效(低电平),SPI模式启用。接口 该SD卡的接口可以支持两种操作模式:。SD卡模式。SPI模式主机系统可以选择以上其中任一模式,SD卡模式允许4线的高速数据传输。 SPI模式允许简单通用的SPI通道接口, 这种模式相对于SD模式的不足之处是丧失了速度。SD卡模式针脚定义针脚名称类型描述1CD DAT3I/O/PP卡监测数据位32CMDPP命令/回复3VssS地4VccS供电电压5CLKI时钟6Css2S地7DAT0I/O/PP数据位08DAT1I/O/PP数据位19DAT2I/O/PP数据位21:S:电源供电,I:输入O:输出 I/O:双向 PP:I/O使用推挽驱动SD卡的总线概念SD总线允许强大的1线到4线数据信号设置。当默认的上电后,SD卡使用DAT0。 初始化之后,主机可以改变线宽(译者按:即改为2根线,3根线。)。混和的SD卡连接方式也适合于主机。在混和连接中Vcc,Vss和CLK的信号连接可以通用。但是,命令,回复,和数据(DAT03)这几根线,各个SD卡必须从主机分开。这个特性使得硬件和系统上交替使用。SD总线上通信的命令和数据比特流从一个起始位开始,以停止位中止。CLK:每个时钟周期传输一个命令或数据位。频率可在025MHz之间变化。SD卡的总线管理器可以不受任何限制的自由产生025MHz的频率。CMD:命令从该CMD线上串行传输。一个命令是一次主机到从卡操作的开始。命令可以以单机寻址(寻址命令)或呼叫所有卡(广播命令)方式发送。 回复从该CMD线上串行传输。一个命令是对之前命令的回答。回复可以来自单机或所有卡。DAT03:数据可以从卡传向主机或副versa。数据通过数据线传输。SD卡总线拓扑 SPI模式针脚定义针脚名称类型描述1CSI片选(负有效)2DII数据输入3VssS地4VccS供电电压5CLKI时钟6Vss2S地7DOO数据输出8RSV-9RSV-1:S:电源供电,I:输入O:输出 I/O:双向 PP:I/O使用推挽驱动注意:SPI模式时,这些信号需要在主机端用10100K欧的电阻上拉。SPI 总线概念SPI总线允许通过2通道(数据入和出)传输比特数据。SPI兼容模式使得MMC主机系统通过很小的改动就可以使用卡。SPI模式使用字节传输。所有的数据被融合到一些字节中并aligned to the CS signal(可能是:同过CS信号来校正)。SPI模式的优点就是简化主机的设计。特别的,MMC主机需要小的改动。SPI模式相对于SD模式的不足之处是丧失了速度性能。SD卡的电特性SD卡的连接电路图直流特性完全最大值评估最大值评估指即使在瞬间也不能超出限制电压。当你在归定的最大值评估范围内使用该产品,不会出现永久性损坏。但是这并不能保证正常的逻辑操作。转SD卡在单片机上的应用(一)经典转载 2010-01-09 09:18:18 阅读50 评论0 字号:大中小 SD卡在单片机上的应用(一)文章来源:振南单片机讲坛 SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。既然它有着这么多优点,那么如果将它加入到单片机应用开发系统中来,将使系统变得更加出色。这就要求对SD卡的硬件与读写时序进行研究。对于SD卡的硬件结构,在官方的文档上有很详细的介绍,如SD卡内的存储器结构、存储单元组织方式等内容。要实现对它的读写,最核心的是它的时序,笔者在经过了实际的测试后,使用51单片机成功实现了对SD卡的扇区读写,并对其读写速度进行了评估。下面先来讲解SD卡的读写时序。(1) SD卡的引脚定义: SD卡引脚功能详述:引脚编号SD模式 SPI模式名称类型描述名称类型描述1CD/DAT3IO或PP卡检测数据线3#CSI片选2CMDPP命令回应DII数据输入3VSS1S电源地VSSS电源地4VDDS电源VDDS电源5CLKI时钟SCLKI时钟6VSS2S电源地VSS2S电源地7DAT0IO或PP数据线0DOO或PP数据输出8DAT1IO或PP数据线1RSV9DAT2IO或PP数据线2RSV 注:S:电源供给 I:输入 O:采用推拉驱动的输出 PP:采用推拉驱动的输入输出 SD卡SPI模式下与单片机的连接图: SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0DAT3进行数据通信。而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。这里只对其SPI方式进行介绍。(2) SPI方式驱动SD卡的方法 SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。1) 命令与数据传输1. 命令传输SD卡自身有完备的命令系统,以实现各项操作。命令格式如下: 命令的传输过程采用发送应答机制,过程如下: 每一个命令都有自己命令应答格式。在SPI模式中定义了三种应答格式,如下表所示:字节位含义17开始位,始终为06参数错误5地址错误4擦除序列错误3CRC错误2非法命令1擦除复位0闲置状态字节位含义17开始位,始终为06参数错误5地址错误4擦除序列错误3CRC错误2非法命令1擦除复位0闲置状态27溢出,CSD覆盖6擦除参数5写保护非法4卡ECC失败3卡控制器错误2未知错误1写保护擦除跳过,锁解锁失败0锁卡字节位含义17开始位,始终为06参数错误5地址错误4擦除序列错误3CRC错误2非法命令1擦除复位0闲置状态25全部操作条件寄存器,高位在前 写命令的例程:/- 向SD卡中写入命令,并返回回应的第二个字节/-unsigned char Write_Command_SD(unsigned char *CMD) unsigned char tmp; unsigned char retry=0; unsigned char i; /禁止SD卡片选 SPI_CS=1; /发送8个时钟信号 Write_Byte_SD(0xFF); /使能SD卡片选 SPI_CS=0; /向SD卡发送6字节命令 for (i=0;i0x06;i+) Write_Byte_SD(*CMD+); /获得16位的回应 Read_Byte_SD(); /read the first byte,ignore it. do /读取后8位 tmp = Read_Byte_SD(); retry+; while(tmp=0xff)&(retry100); return(tmp);2) 初始化SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。在初始化成功后,应尽量提高SPI的速率。在刚开始要先发送至少74个时钟信号,这是必须的。在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式 初始化时序图: 初始化例程:/- 初始化SD卡到SPI模式/-unsigned char SD_Init() unsigned char retry,temp; unsigned char i; unsigned char CMD = 0x40,0x00,0x00,0x00,0x00,0x95; SD_Port_Init(); /初始化驱动端口 Init_Flag=1; /将初始化标志置1 for (i=0;isector_count = sectorBuffer.dat6 & 0x03; vinf-sector_count sector_count += sectorBuffer.dat7; vinf-sector_count sector_count += (sectorBuffer.dat8 & 0xc0) 6; / 获取multiplier vinf-sector_multiply = sectorBuffer.dat9 & 0x03; vinf-sector_multiply sector_multiply += (sectorBuffer.dat10 & 0x80) 7;/获取SD卡的容量 vinf-size_MB = vinf-sector_count (9-vinf-sector_multiply); / get the name of the card Read_CID_SD(sectorBuffer.dat); vinf-name0 = sectorBuffer.dat3; vinf-name1 = sectorBuffer.dat4; vinf-name2 = sectorBuffer.dat5; vinf-name3 = sectorBuffer.dat6; vinf-name4 = sectorBuffer.dat7; vinf-name5 = 0x00; /end flag 以上程序将信息装载到一个结构体中,这个结构体的定义如下:typedef struct SD_VOLUME_INFO /SD/SD Card info unsigned int size_MB; unsigned char sector_multiply; unsigned int sector_count; unsigned char name6; VOLUME_INFO_TYPE;5) 扇区读扇区读是对SD卡驱动的目的之一。SD卡的每一个扇区中有512个字节,一次扇区读操作将把某一个扇区内的512个字节全部读出。过程很简单,先写入命令,在得到相应的回应后,开始数据读取。扇区读的时序: 扇区读的程序例程:unsigned char SD_Read_Sector(unsigned long sector,unsigned char *buffer) unsigned char retry; /命令16 unsigned char CMD = 0x51,0x00,0x00,0x00,0x00,0xFF; unsigned char temp; /地址变换 由逻辑块地址转为字节地址 sector = sector 24 ); CMD2 = (sector & 0x00FF0000) 16 ); CMD3 = (sector & 0x0000FF00) 8 ); /将命令16写入SD卡 retry=0; do /为了保证写入命令 一共写100次 temp=Write_Command_MMC(CMD); retry+; if(retry=100) return(READ_BLOCK_ERROR); /block write Error! while(temp!=0); /Read Start Byte form MMC/SD-Card (FEh/Start Byte) /Now data is ready,you can read it out. while (Read_Byte_MMC() != 0xfe); readPos=0; SD_get_data(512,buffer) ; /512字节被读出到buffer中return 0;其中SD_get_data函数如下:/- 获取数据到buffer中/-void SD_get_data(unsigned int Bytes,unsigned char *buffer) unsigned int j; for (j=0;jBytes;j+) *buffer+ = Read_Byte_SD();6) 扇区写扇区写是SD卡驱动的另一目的。每次扇区写操作将向SD卡的某个扇区中写入512个字节。过程与扇区读相似,只是数据的方向相反与写入命令不同而已。扇区写的时序:扇区写的程序例程:/- 写512个字节到SD卡的某一个扇区中去 返回0说明写入成功/-unsigned char SD_write_sector(unsigned long addr,unsigned char *Buffer) unsigned char tmp,retry; unsigned int i; /, 命令24 unsigned char CMD = 0x58,0x00,0x00,0x00,0x00,0xFF; addr = addr 24 ); CMD2 = (addr & 0x00FF0000) 16 ); CMD3 = (addr & 0x0000FF00) 8 ); /写命令24到SD卡中去 retry=0; do /为了可靠写入,写100次 tmp=Write_Command_SD(CMD); retry+; if(retry=100) return(tmp); /send commamd Error! while(tmp!=0); /在写之前先产生100个时钟信号 for (i=0;i100;i+) Read_Byte_SD(); /写入开始字节 Write_Byte_MMC(0xFE); /现在可以写入512个字节 for (i=0;i512;i+) Write_Byte_MMC(*Buffer+); /CRC-Byte Write_Byte_MMC(0xFF); /Dummy CRC Write_Byte_MMC(0xFF); /CRC Code tmp=Read_Byte_MMC(); / read response if(tmp & 0x1F)!=0x05) / 写入的512个字节是未被接受 SPI_CS=1; return(WRITE_BLOCK_ERROR); /Error! /等到SD卡不忙为止/因为数据被接受后,SD卡在向储存阵列中编程数据 while (Read_Byte_MMC()!=0xff); /禁止SD卡 SPI_CS=1; return(0);/写入成功 此上内容在笔者的实验中都已调试通过。单片机采用STC89LE单片机(SD卡的初始化电压为2.0V3.6V,操作电压为3.1V3.5V,因此不能用5V单片机,或进行分压处理),工作于22.1184M的时钟下,由于所采用的单片机中没硬件SPI,采用软件模拟SPI,因此读写速率都较慢。如果要半SD卡应用于音频、视频等要求高速场合,则需要选用有硬件SPI的控制器,或使用SD模式,当然这就需要各位读者对SD模式加以研究,有了SPI模式的基础,SD模式应该不是什么难事。前言长期以来,以Flash Memory为存储体的SD卡因具备体积小、功耗低、可擦写以及非易失性等特点而被广泛应用于消费类电子产品中。特别是近年来,随着价格不断下降且存储容量不断提高,它的应用范围日益增广。当数据采集系统需要长时间地采集、记录海量数据时,选择SD卡作为存储媒质是开发者们一个很好的选择。在电能监测以及无功补偿系统中,要连续记录大量的电压、电流、有功功率、无功功率以及时间等参数,当单片机采集到这些数据时可以利用SD作为存储媒质。本文主要介绍了SD卡在电能监测及无功补偿数据采集系统中的应用方案。设计方案应用AT89C52读写SD卡有两点需要注意。首先,需要寻找一个实现AT89C52单片机与SD卡通讯的解决方案;其次,SD卡所能接受的逻辑电平与AT89C52提供的逻辑电平不匹配,需要解决电平匹配问题。通讯模式SD卡有两个可选的通讯协议:SD模式和SPI模式。SD模式是SD卡标准的读写方式,但是在选用SD模式时,往往需要选择带有SD卡控制器接口的MCU,或者必须加入额外的SD卡控制单元以支持SD卡的读写。然而,AT89C52单片机没有集成SD卡控制器接口,若选用SD模式通讯就无形中增加了产品的硬件成本。在SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。因为在SPI模式下,通过四条线就可以完成所有的数据交换,并且目前市场上很多MCU都集成有现成的SPI接口电路,采用SPI模式对SD卡进行读写操作可大大简化硬件电路的设计。虽然AT89C52不带SD卡硬件控制器,也没有现成的SPI接口模块,但是可以用软件模拟出SPI总线时序。本文用SPI总线模式读写SD卡。电平匹配SD卡的逻辑电平相当于3.3V TTL电平标准,而控制芯片AT89C52的逻辑电平为5V CMOS电平标准。因此,它们之间不能直接相连,否则会有烧毁SD卡的可能。出于对安全工作的考虑,有必要解决电平匹配问题。要解决这一问题,最根本的就是解决逻辑器件接口的电平兼容问题,原则主要有两条:一为输出电平器件输出高电平的最小电压值,应该大于接收电平器件识别为高电平的最低电压值;另一条为输出电平器件输出低电平的最大电压值,应该小于接收电平器件识别为低电平的最高电压值。一般来说,通用的电平转换方案是采用类似SN74ALVC4245的专用电平转换芯片,这类芯片不仅可以用作升压和降压,而且允许两边电源不同步。但是,这个方案代价相对昂贵,而且一般的专用电平转换芯片都是同时转换8路、16路或者更多路数的电平,相对本系统仅仅需要转换3路来说是一种资源的浪费。考虑到SD卡在SPI协议的工作模式下,通讯都是单向的,于是在单片机向SD卡传输数据时采用晶体管加上拉电阻法的方案,基本电路如图1所示。而在SD卡向单片机传输数据时可以直接连接,因为它们之间的电平刚好满足上述的电平兼容原则,既经济又实用。这个方案需要双电源供电(一个5V电源、一个3.3V电源供电),3.3V电源可以用AMS1117稳压管从5V电源稳压获取。硬件接口设计SD卡提供9Pin的引脚接口便于外围电路对其进行操作,9Pin的引脚随工作模式的不同有所差异。在SPI模式下,引脚1(DAT3)作为SPI片选线CS用,引脚2(CMD)用作SPI总线的数据输出线MOSI,而引脚7(DAT0)为数据输入线MISO,引脚5用作时钟线(CLK)。除电源和地,保留引脚可悬空。本文中控制SD卡的MCU是ATMEL公司生产的低电压、高性能CMOS 8位单片机AT89C52,内含8K字节的可反复擦写的只读程序存储器和256字节的随机存储数据存储器。由于AT89C52只有256字节的数据存储器,而SD卡的数据写入是以块为单位,每块为512字节,所以需要在单片机最小系统上增加一片RAM。本系统中RAM选用存储器芯片HM62256,容量为32K。对RAM进行读写时,锁存器把低8位地址锁存,与P2口的8位地址数据构成16位地址空间,从而可使SD卡一次读写512字节的块操作。系统硬件图如图2所示。软件设计SPI工作模式SD卡在上电初期自动进入SD总线模式,在此模式下向SD卡发送复位命令CMD0。如果SD卡在接收复位命令过程中CS低电平有效,则进入SPI模式,否则工作在SD总线模式。对于不带SPI串行总线接口的AT89C52单片机来说,用软件来模拟SPI总线操作的具体做法是:将P1.5口(模拟CLK线)的初始状态设置为1,而在允许接收后再置P1.5为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至AT89C52单片机的P1.7(模拟MISO线),此后再置P1.5为1,使单片机从P1.6(模拟MOSI线)输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便完成。此后再置P1.5为0,模拟下1位数据的输入输出,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。本文的实现程序把SPI总线读写功能集成在一起,传递的val变量既是向SPI写的数据,也是从SPI读取的数据。具体程序如下:(程序是在Keil uVision2的编译环境下编写)sbit CS=P35;sbit CLK= P15;sbit DataI=P17;sbit DataO=P16;#define SD_Disable() CS=1 /片选关#define SD_Enable() CS=0 /片选开unsigned char SPI_TransferByte(unsigned char val)unsigned char BitCounter;for(BitCounter=8; BiCounter!=0; BitCounter-) CLK=0;DataI=0; / writeif(val&0x80) DataI=1;val=1;CLK=1;if(DataO)val|=1; / readCLK=0;return val;SD卡的初始化 对SD卡进行操作首先要对SD卡进行初始化,初始化的过程中设置SD卡工作在SPI模式,其流程图如图3所示。在复位成功之后可以通过CMD55和ACMD41判断当前电压是否在工作范围内。主机还可以继续通过CMD10读取SD卡的CID寄
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临西市网络安全培训课件
- 临终关怀课件
- 2025年非遗文化知识竞赛考试题库100题(含答案)
- 临沂高危安全技能培训课件
- 城市地下综合管廊智慧运维2025年技术创新与智能调度中心可行性研究报告
- 2025党风廉政建设知识测试题库及参考答案
- 恋爱合同(标准版)
- 公司入职安全培训总结课件
- 临沂安全培训平台app课件
- 2025医德医风考核试题与答案
- 污水厂职业病培训
- 危险化学品码头安全管理制度(3篇)
- 《电力机车构造(第2版)》课件 任务三 HXD3型电力机车空气管路系统分析
- 2019版 苏教版 高中通-用技术 必修 技术与设计1《第五章 设计图样的绘制》大单元整体教学设计2020课标
- 《列车运行图编制》课件
- 国际物流运输合同参考范本
- 劳动争议司法解释(二)亮点解读
- 四年级《书法》教案上册
- 四高人群的膳食营养理论考核试题及答案
- 上海市幼儿园幼小衔接活动指导意见(修订稿)
- 药物不良反应处理课件
评论
0/150
提交评论