原文:SanDiskSecureDigitalCard-ProductManualVersion2.2(DocumentNo.80-13-00169September2004)第5章SPI总线协议译者:醇酒。请尊重我的劳动,勿抄袭和修改本文中的内容,若文中翻译有不妥之处,请Email:chunjiu○a263.net处指正,不胜感激!SD卡规格书第五章SPI总线协议译者注:在本章节内,详细的描述了主控制器和SD卡之间,用SPI总线相互握手及通讯的标准和方法。关于SPI总线拓扑的信息已经在第三章描述过了。本章节的重点在于描述SD卡加电后的复位工作情况,如何进入SPI模式,如何用软件操作SD卡工作。以及SD卡是如何接收并响应主控制器的命令。它们之间的通讯产生错误的原因和处理的相关办法。其中还介绍了SD卡的命令集及其可实现的功能(SPI模式下的命令集)。包括读取数据、写入数据、擦除数据、保护数据等等,和这些命令所使用的方法和限制条件。为了方便查阅,涉及到本章节内容的其它章节的一点资料被附加在本文的昀后,如果没包括您需要的信息,请您去查阅原文,谢谢!注意:这篇译文的内容来自SD产品手册2.2版本。SD组织对自己的技术资料是保密的,除了他自己的客户外很难拿到。保护自己的技术产权无可厚非,但这样做不利于SD卡产品在中国国内市场上的推广与使用,国内的电子工程师们还没有富裕的金钱去购买SD的技术,体制上受限又多,语言也不通,很少能有渠道获得支持,想在自己设计的东西上加入对SD卡的支持都不容易。这个版本已经很陈旧了,没有容量2G以上的标准。如果哪位朋友有新版的手册,请发布出来,支持一下国内的电子爱好者,咱们又不想去另搞一个类似SD的组织同他抢饭碗,只不过想让自己设计的东西上能顺利地用上SD卡而已。醇酒2007.12.2我的个人空间:第1页共27页原文:SanDiskSecureDigitalCard-ProductManualVersion2.2(DocumentNo.80-13-00169September2004)第5章SPI总线协议译者:醇酒。请尊重我的劳动,勿抄袭和修改本文中的内容,若文中翻译有不妥之处,请Email:chunjiu○a263.net处指正,不胜感激!醇酒2007.12.2我的个人空间:第2页共27页SPI总线协议目录5.1.SPI总线协议5.1.1.模式选择5.1.2.总线传送保护5.1.3.数据的读取5.1.4.数据写入5.1.5.擦除和写保护处理5.1.6.读取CID/CSD寄存器5.1.7.复位顺序5.1.8.时钟控制5.1.9.错误条件5.1.9.1.CRC和无效指令5.1.9.2.读取、写入和擦除的超时情形5.1.10.存储器阵列分布5.1.11.卡的锁定/解锁5.1.12.特殊用途的命令集5.1.13.版权保护命令集5.2.SPI命令设置5.2.1.命令格式5.2.2.命令类5.2.2.1.详细的命令描述5.2.3.应答5.2.3.1R1的格式5.2.3.2.R1b的格式5.2.3.3.R2的格式5.2.3.4.R3的格式5.2.3.5.数据应答5.2.4.数据标记5.2.5.数据错误标记5.2.6.清除状态位5.3.卡寄存器5.4.SPI总线时序图解5.4.1.命令/应答5.4.2.数据读取5.4.3.数据写入5.4.4.时钟数值5.5.SPI电气接口5.6.SPI总线操作条件(环境)5.7.总线时钟附录:英文特殊命令表英文通用命令表存储器阵列图产品规格表主控制器设计参考(简介,无实际内容)原文:SanDiskSecureDigitalCard-ProductManualVersion2.2(DocumentNo.80-13-00169September2004)第5章SPI总线协议译者:醇酒。请尊重我的劳动,勿抄袭和修改本文中的内容,若文中翻译有不妥之处,请Email:chunjiu○a263.net处指正,不胜感激!醇酒2007.12.2我的个人空间:第3页共27页5.1.SPIBusProtocol5.1.SPI总线协议WhiletheSDCardchannelisbasedoncommandanddatabit-streams,whichareinitiatedbyastartbitandterminatedbyastopbit,theSPIchannelisbyteoriented.Everycommandordatablockisbuiltofeightbitbytesandisbytealigned(multiplesofeightclocks)totheCSsignal.当SD卡通道是基于命令和数据位流模式上时,通常是开始于一个“起始位”和终止于一个“停止位”,这个SPI通道是用字节作为单位的。CS信号上的每个命令或数据块都是8bit的字节和字节队列(就是8个时钟的倍数)。SimilartotheSDBusprotocol,theSPImessagesarebuiltfromcommand,responseanddata-blocktokens.Allcommunicationbetweenhostandcardsiscontrolledbythehost(master).ThehoststartseverybustransactionbyassertingtheCSsignallow.相似SD总线模式,这个SPI信息是建立在命令、应答和数据块标记上的。所有的主控制器和SD卡之间的通讯都是受控于主控制器。而主控制器的每次总线处理都是从拉低CS的信号电平开始的。TheresponsebehaviorinSPIBusmodediffersfromtheSDBusmodeinthefollowingthreeways:*Theselectedcardalwaysrespondstothecommand.*Aneightor16-bitresponsestructureisused.*Whenthecardencountersadataretrievalproblem,itwillrespondwithanerrorresponse(whichreplacestheexpecteddatablock)ratherthantime-outasintheSDBusmode.SPI总线协议和SD总线协议的应答行为有下列三处的不同点:1.被选中的卡总是对命令做出应答;2.使用的应答结构是8或16位的;3.当这个卡碰到一个数据检索问题,它将用一个错误应答来回答(取代了原先期望的数据块)而不是SD总线协议模式下的超时。Inadditiontothecommandresponse,everydatablocksenttothecardduringwriteoperationswillberespondedwithaspecialdataresponsetoken.Adatablockmaybeasbigasonecardwriteblock(WRITE_BL_LEN)andassmallasasinglebyte(NOTE1).除了命令的应答之外,每个数据块发送到SD卡后,在写操作的期间将用一个特别的数据应答标记来应答。一个数据块可以大到卡的写入块长度(WRITE_BL_LEN)或小到一个单字节的大小(注意1)。NOTE1:ThedefaultblocklengthisasspecifiedintheCSD(512bytes).Asetblocklengthoflessthan512byteswillcauseawriteerror.Theonlyvalidwritesetblocklengthis512bytes.CMD16isnotmandatoryifthedefaultisaccepted.注意1:缺省的块长度定义在CSD寄存器内(512字节)。设定块的的长度小于512字节将会导致写入错误。唯一合法的块写入长度只能定为512字节。若此缺省值可接受,则无需使用CMD16命令,它不是必要的。5.1.1.ModeSelection5.1.1.模式选择TheSDCardwakesupintheSDBusmode.ItwillenterSPImodeiftheCSsignalisasserted(negative)duringthereceptionoftheresetcommand(CMD0).IfthecardrecognizesthattheSDBusmodeisrequireditwillnotrespondtothecommandandremainintheSDBusmode.IfSPImodeisrequired,thecardwillswitchtoSPImodeandrespondwiththeSPImodeR1response.SD卡启动时处在SD总线模式下。它将在CS信号有效(低电平)时接收一个复位命令(CMD0)来进入SPI总线模式。如果这个卡认为必须停留在SD总线模式,那么它将不应答这个命令并继续保持在SD总线模式。如果可以转换到SPI总线模式,则它会转换到SPI总线模式并用SPI模式的R1应答来作回应。TheonlywaytoreturntotheSDBusmodeisbypowercyclingthecard.InSPImode,theSDCardprotocolstatemachineisnotobserved.AlltheSDCardcommandssupportedinSPImodearealwaysavailable.而唯一让卡返回SD总线模式的办法是用电源周期(即电源关开一次)。在SPI总线模式下,SD卡的保护状态机将不会被遵守了。SD卡所有能支持的命令在SPI模式下总是可以使用的。Thedefaultcommandstructure/protocolforSPImodeisthatCRCcheckingisdisabled.SincethecardpowersupinSDBusmode,CMD0mustbefollowedbyavalidCRCbyte(eventhoughthecommandissentusingtheSPIstructure).OnceinSPImode,CRCsaredisabledbydefault.SPI总线模式下,默认的命令结构/协议CRC检查是失效的。由于卡在电源开启时总是处于SD总线模式,CMD0命令必须跟随一个合法的CRC字节(即使这个命令使用了SPI结构来发送)。一旦进入SPI总线模式,CRC就被默认为失效的了。原文:SanDiskSecureDigitalCard-ProductManualVersion2.2(DocumentNo.80-13-00169September2004)第5章SPI总线协议译者:醇酒。请尊重我的劳动,勿抄袭和修改本文中的内容,若文中翻译有不妥之处,请Email:chunjiu○a263.net处指正,不胜感激!CMD0isastaticcommandandalwaysgeneratesthesame7-bitCRCof4Ah.Addingthe“1,”endbit(bit0)totheCRCcreatesaCRCbyteof95h.ThefollowinghexadecimalsequencecanbeusedtosendCMD0inallsituationsforSPImode,sincetheCRCbyte(althoughrequired)isignoredonceinSPImode.TheentireCMD0sequenceappearsas400000000095(hexadecimal).CMD0是一个静态