一种初始化存储卡的方法

文档序号:6646079阅读:243来源:国知局
专利名称:一种初始化存储卡的方法
技术领域
本发明涉及存储卡技术领域,更确切地说是涉及一种初始化存储卡的方法。
背景技术
目前,用于手机、数码相机等电子设备的存储卡的品种越来越多,比较常见的是安全数字卡(SD Card)和多媒体卡(MMC),其中,SD Card包括标准SD卡和SDIO卡等。
不管是哪种存储卡,在工作之前都要进行初始化。对存储卡的初始化通常是由读卡器完成。读卡器对存储卡进行初始化时,首先需要根据存储卡的工作电压确定卡的类别,之后再获取存储卡的CID信息,如果存储卡返回了CID信息,则读卡器控制存储卡进入身份验证状态,即通过命令获取卡的地址信息(RCA),之后使卡进入stand by状态。
该初始化过程对于SD Card来说,读卡器需要发送命令CMD55及ACMD41来确定卡的工作电压范围,如果电压匹配,则读卡器可以确定该卡的类型为SD,并且读卡器与卡间的数据通路会被激活,否则,SD Card进入未激活状态。数据通路被激活后,读卡器会发送CMD2命令来获取SDCard的CID信息,SD Card返回了CID信息后,即进入身份验证状态,这时读卡器可以通过CMD3命令来获取卡的RCA,之后该SD Card即进入了stand by状态。其中,CMD55命令用于提示存储卡下一个命令是ACMD请求命令;ACMD41命令用于请求存储卡返回该卡的操作条件登记内容,且主要针对工作电压信息;CMD2命令用于请求存储卡返回CID信息;CMD3命令用于请求存储卡公布新的RCA信息。
对于MMC卡来说,虽然读卡器在其与MMC卡间的数据通路激活后,也是通过CMD2及CMD3命令来实现后续的初始化工作,但需要通过CMD1命令来实现最初的电压匹配处理。其中,CMD1命令与ACMD41命令类似,也用于获取操作条件登记内容,且主要是用于获取工作电压信息。
现有的上述初始化方案不够全面,虽然可以确定存储卡是SD卡或MMC卡,但却无法确定该卡具体是哪种类型的卡,比如,虽然可以确定为SD卡,但却无法确定是标准SD卡,还是SDIO卡或其它类型的SD卡。
另外,上述初始化方案只通过获取存储卡的RCA使存储卡处于stand by状态,而没有使存储卡处于进一步的状态,比如进入准备状态或数据传输状态,因此上述初始化处理后的存储卡可能无法直接进行数据传输。

发明内容
有鉴于此,本发明所要解决的主要问题在于提供一种初始化存储卡的方法,以完成对各种存储卡的初始化。
为解决以上问题,本发明提供了以下技术方案一种初始化存储卡的方法,根据存储卡设置时钟频率,并设置延时周期,该方法进一步包括以下步骤a.根据所选择的存储卡工作模式驱动相应的管脚,之后向存储卡发送初始化命令;b.获取存储卡的工作电压,并判断该工作电压是否满足标准,如果满足标准,则确定该存储卡所属的类别,之后获取该存储卡的身份信息及地址信息;c.将该存储卡设置在传输状态,之后获取该存储卡的状态信息,并根据该状态信息确定存储卡的具体类型。
所述根据存储卡设置时钟频率为根据所支持的各种存储卡设置时钟频率。
所述设置延时周期为设置74个时钟周期或以上,且不超过1毫秒。
所述步骤b中,在获取存储卡的身份信息及地址信息之前,进一步包括判断该存储卡是否处于忙状态,如果是,则继续向存储卡发送获取存储卡工作电压的命令,直至卡的状态变为空闲状态;否则,执行获取身份信息及地址信息的步骤。
所述步骤c之后进一步包括获取存储卡的专门的数字信息寄存器信息CSD和/或验证信息CID的步骤。
所述获取存储卡的CSD信息和/或CID信息的步骤为通过向存储卡发送命令使存储卡处于准备状态;之后通过向存储卡发送命令获取存储卡的CSD信息,和/或获取存储卡的CID信息;然后通过向存储卡发送命令使存储卡回到传输状态。
所述步骤b中确定存储卡所属的类别为安全数字卡,该方法进一步包括通过向存储卡发送命令选择用于传输数据的位宽。
该方法进一步包括通过向存储卡发送命令关掉存储卡中用于检测的上拉电阻。
所述步骤a中,所述工作模式为SD卡的SD模式或SPI模式,或者是MMC卡的MMC模式或SPI模式。
所述步骤b中,所述获取存储卡的工作电压为通过向存储卡发送命令获取安全数字卡的电压信息,或获取多媒体卡的电压信息。
本发明方案通过将该存储卡设置为传输状态,并获取该存储卡的状态信息,根据该状态信息确定存储卡的具体类型,进一步完善了初始化处理,并通过设置时钟频率及延时周期,保证了存储卡初始化的准确性。
本发明方案通过在获取存储卡的身份信息及地址信息之前,判断存储卡是否处于忙状态,进一步保证了对存储卡初始化的准确性。
本发明方案还进一步提供了获取CSD信息和/或CID信息的步骤,进一步完善了初始化流程。
本发明方案还进一步提供了关闭存储卡中用于检测的上拉电阻的步骤,进一步完善了初始化流程,并且降低了数据传输的功耗。


图1为本发明方案的实现流程图;图2为本发明具体实施例中针对SD Card的完整实现流程图;图3为本发明具体实施例中针对MMC卡的完整实现流程图。
具体实施例方式
下面结合附图及具体实施例对本发明方案做进一步详细的说明。
本发明方案的实现流程如图1所示,对应以下步骤步骤101、根据存储卡设置时钟频率,并设置延时周期。
为兼容不同种类的存储卡,需要根据这些存储卡设置时钟频率。比如,为兼容SD Card和MMC卡,可以将时钟频率设置为400kHz。
在与卡通信之前,需要延迟一些周期以满足存储卡在初始化前其内部状态寄存器的初始化。比如,可以延迟74个时钟周期,当然,也可以根据需要延迟74个时钟周期以上。并且所设置的时钟周期不能超过1毫秒。
步骤102、根据所选择的存储卡工作模式驱动相应的管脚,之后向存储卡发送初始化命令。
如果用户使用的是MMC卡,则有MMC和SPI两种工作模式;如果用户使用的是SD Card,则该卡有SD和SPI两种工作模式。以SD Card为例,如果用户选择的工作模式是SPI模式,则需要驱动存储卡的CS片选管脚为低;如果用户选择的工作模式是SD模式,则需要驱动存储卡的检测管脚1,具体是将检测管脚1的上拉电阻寄存器置为高。
在向存储卡发送了初始化命令之后,该存储卡就会一直保持所选择的工作模式。该初始化命令可以使用CMD0。
步骤103、获取存储卡的工作电压,以验证该存储卡的工作电压是否满足标准,如果满足标准,则确定该存储卡所属的类别;如果不满足标准,则确认初始化失败,并结束本处理流程。
本步骤在获取存储卡的工作电压时,通常是向存储卡发送针对某种类型存储卡的电压获取命令,如果存储卡没有反馈信息,则可以认为该存储卡不是该类型的存储卡,可以再发送其它类型存储卡的电压获取命令。而如果该存储卡返回了电压信息,则可以根据所发送的电压获取命令的类型确定该存储卡的类型。
比如,由于SD Card与MMC卡较为常见,因此,可以先发送针对SD Card的电压获取命令,以获取该存储卡的工作电压。其中,针对SD Card的电压获取命令可以使用CMD55和ACMD41。如果没有收到存储卡的回应,则说明该存储卡为其它类型的卡,可以考虑该卡是否为MMC卡,所以向存储卡发送针对MMC的电压获取命令,其中,针对MMC卡的电压获取命令可以使用CMD1。当然,该存储卡还可能是其它类型,因此,如果存储卡不是这两种卡,则还可以发送与其它卡对应的命令,以获取存储卡的工作电压。
步骤104、获取该存储卡的身份信息及地址信息。
以SD Card和MMC卡为例,可以通过命令获取存储卡的身份信息及地址信息。其中,所获取的地址信息是可以改变的,并且该地址信息不为零。具体可以通过CMD2命令获取存储卡的身份信息,通过CMD3命令获取存储卡的地址信息。
步骤105、将该存储卡设置在传输状态。
具体可以通过CMD7命令将存储卡设置在传输状态。
步骤106、获取存储卡的状态信息,并根据该状态信息确定存储卡的具体类型。
上述步骤103虽然确定了存储卡的类别,但由于一类存储卡可能有多个具体类型,为便于传输,还需要确定具体类型。
以SD Card为例,本步骤中,可以通过CMD55和ACMD13命令得到存储卡的状态信息,之后可以根据存储卡的状态信息中的类型值SD_CARD_TYPE确定存储卡的具体类型。比如,如果存储卡的类型值SD_CARD_TYPE为0,则可以确定为标准的SD Card,否则,应为其它的SD Card,还需进行检测。
通过上述步骤实现了对存储卡的初始化。
实际上,上述处理过程中还可以进一步增加一些处理。
比如,虽然已设置了延迟周期以满足存储卡内部状态寄存器的初始化,但还有可能出现状态寄存器没有初始化完成的问题。因此,在上述步骤103确定存储卡所属的类别之后,并在执行步骤104之前,还可以进一步增加判断存储卡中状态寄存器是否初始化完毕的步骤。以SD Card为例,可以先判断状态寄存器的BUSY位是否为1,如果是,则说明卡处于忙状态,因此需要重发CMD55和ACMD41命令,直到存储卡的状态寄存器的BUSY位被清零。
还有,在通过步骤106确定了存储卡的具体类别之后,还可以进一步得到存储卡的专门的数据信息寄存器信息(CSD,Card Specific Data register)、验证信息(CID,Card Identification register)。比如,可以向存储卡发送命令,使存储卡处于准备状态,该命令具体可以是CMD7命令,再向存储卡发送命令得到CSD信息和CID信息,其中,获取CSD信息的命令具体可以是CMD9命令,获取CID信息的命令可以是CMD10命令,之后再通过命令将存储卡设置到传输状态,该命令具体可以是CMD7。其中,CMD7命令为选择/重选命令,CMD9命令为标准的CSD信息获取命令,CMD10命令为标准的CID信息获取命令。
为降低存储卡的功耗,还可以在初始化完成后,关掉存储卡中用于检测的上拉电阻。
另外,由于SD Card支持的传输数据宽度可以是4位,也可以是1位,因此还需要确定SD Card的数据宽度。而对于MMC卡来说,由于其所支持的传输数据宽度只有1位,因此不需要确定数据宽度。
实现上述针对SD Card的所有处理流程如图2所示,针对MMC卡的所有处理流程如图3所示。
以上所述仅为本发明方案的较佳实施例,并不用以限定本发明的保护范围。
权利要求
1.一种初始化存储卡的方法,其特征在于,根据存储卡设置时钟频率,并设置延时周期,该方法进一步包括以下步骤a.根据所选择的存储卡工作模式驱动相应的管脚,之后向存储卡发送初始化命令;b.获取存储卡的工作电压,并判断该工作电压是否满足标准,如果满足标准,则确定该存储卡所属的类别,之后获取该存储卡的身份信息及地址信息;c.将该存储卡设置在传输状态,之后获取该存储卡的状态信息,并根据该状态信息确定存储卡的具体类型。
2.根据权利要求1所述的方法,其特征在于,所述根据存储卡设置时钟频率为根据所支持的各种存储卡设置时钟频率。
3.根据权利要求1所述的方法,其特征在于,所述设置延时周期为设置74个时钟周期或以上,且不超过1毫秒。
4.根据权利要求1所述的方法,其特征在于所述步骤b中,在获取存储卡的身份信息及地址信息之前,进一步包括判断该存储卡是否处于忙状态,如果是,则继续向存储卡发送获取存储卡工作电压的命令,直至卡的状态变为空闲状态;否则,执行获取身份信息及地址信息的步骤。
5.根据权利要求1所述的方法,其特征在于,所述步骤c之后进一步包括获取存储卡的专门的数字信息寄存器信息CSD和/或验证信息CID的步骤。
6.根据权利要求5所述的方法,其特征在于,所述获取存储卡的CSD信息和/或CID信息的步骤为通过向存储卡发送命令使存储卡处于准备状态;之后通过向存储卡发送命令获取存储卡的CSD信息,和/或获取存储卡的CID信息;然后通过向存储卡发送命令使存储卡回到传输状态。
7.根据权利要求1所述的方法,其特征在于,所述步骤b中确定存储卡所属的类别为安全数字卡,该方法进一步包括通过向存储卡发送命令选择用于传输数据的位宽。
8.根据权利要求1所述的方法,其特征在于,该方法进一步包括通过向存储卡发送命令关掉存储卡中用于检测的上拉电阻。
9.根据权利要求1所述的方法,其特征在于所述步骤a中,所述工作模式为SD卡的SD模式或SPI模式,或者是MMC卡的MMC模式或SPI模式。
10.根据权利要求1所述的方法,其特征在于所述步骤b中,所述获取存储卡的工作电压为通过向存储卡发送命令获取安全数字卡的电压信息,或获取多媒体卡的电压信息。
全文摘要
本发明公开了一种初始化存储卡的方法,该方法首先根据存储卡设置时钟频率,并设置延时周期,该方法进一步包括以下步骤a.根据所选择的存储卡工作模式驱动相应的管脚,之后向存储卡发送初始化命令;b.获取存储卡的工作电压,并判断该工作电压是否满足标准,如果满足标准,则确定该存储卡所属的类别,之后获取该存储卡的身份信息及地址信息;c.将该存储卡设置在传输状态,之后获取该存储卡的状态信息,并根据该状态信息确定存储卡的具体类型。本发明方案提供了更为完整的初始化方案,不但可以确定存储卡所属的类别,而且可以确定存储卡的具体类型,并通过判断存储卡是否处于忙状态进一步保证了初始化的准确性。
文档编号G06F12/00GK1766912SQ20051010284
公开日2006年5月3日 申请日期2005年9月13日 优先权日2005年9月13日
发明者雷波, 李晓强 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1