内存卡的扩容检测方法及具有扩容检测功能的读卡器的制造方法
【专利摘要】本发明公开了一种内存卡扩容检测方法,针对目前内存卡扩容方法,采用比对扇区内存容量和寄存器内存容量、超范围地址的数据写入并读回和高地址范围随机地址的数据写入并读回共计三步检测对内存卡是否扩容进行检测,三步检测均正常才判定为正常未扩容的内存卡,从而实现对内存卡准确有效的扩容检测。并提供具有扩容检测功能的读卡器,实现脱离主机的独立检测,使扩容检测更为便捷。
【专利说明】内存卡的扩容检测方法及具有扩容检测功能的读卡器
【技术领域】
[0001]本发明属于内存卡【技术领域】,更为具体地讲,涉及一种内存卡扩容检测方法及具有扩容检测功能的读卡器。
【背景技术】
[0002]内存卡扩容是山寨内存卡厂商经常使用的一种牟利手段,但是目前市面上缺乏专门检测内存卡好坏的独立装置,消费者只能通过Windows操作系统上的一些软件来识别内存卡的优劣,对操作系统的依赖性强,同时操作过程缓慢,容易导致死机;检测结果只能在购买内存卡之后才可以得到,检测意义不大。目前市面上的大部分检测软件,都是按照一定递增顺序扫描检测,如此,便给了一些无良商家利用这种递增顺序制作扩容内存卡、借助大型公司的名气来兜售劣质扩容内存卡的机会。
[0003]同时内存卡在使用过程中,由于使用方法的不当,内存卡会发生不同程度的损伤,这样的内存卡在格式化处理时,电脑会变得反应缓慢,特别在内存卡的文件系统出现问题时,电脑可能会出现‘卡死’的现象,以及‘Window无法完成格式化’的问题。目前大家使用的读卡器仅仅具有读写的功能,大有升值的空间。
【发明内容】
[0004]本发明的目的在于克服现有技术的不足,提供一种内存卡扩容检测方法及具有扩容检测功能的读卡器,实现对内存卡准确有效的扩容检测,并且通过在读卡器上设置扩容检测模块来实现独立检测。
[0005]为实现上述发明目的,本发明内存卡扩容检测方法,包括以下步骤:
[0006]S1:读取内存卡的DBR扇区数据,获取扇区总数,根据扇区总数得到内存卡的内存容量C1,然后读取内存卡CSD寄存器得到内存容量C2,判断CjP C 2是否相等,如果不相等,则该内存卡为扩容卡,否则进入步骤S2 ;
[0007]S2:根据步骤SI得到的内存容量C1,将其地址最大值记为P,向地址[P+Pl,P+p2]范围内写入任意数据后读回,其中O < Pl< P2,判断写入的数据和读出的数据是否一致,如果一致,则该内存卡为扩容卡,否则进入步骤S3 ;
[0008]S3:在地址[P-p3, P]范围内随机产生一组地址,其中p3> 0,写入任意数据后读回,判断写入的数据和读出的数据是否一致,如果一致,则该内存卡为正常卡,否则该内存卡为扩容卡。
[0009]本发明提供了一种具有扩容检测功能的读卡器,包括内存卡接口、控制器和USB接口,控制器分别与内存卡接口和USB接口连接用于控制数据传输,内存卡接口用于连接内存卡进行数据读写,USB接口用于连接主机,还包括与控制器连接的结果显示模块和模式开关,控制器中设置有扩容检测模块,其中:
[0010]模式开关用于选择读卡器的工作模式,包括普通模式和扩容检测模式,模式开关将模式选择信号发送给控制器,控制器根据模式选择信号确定当前读卡器工作模式;
[0011]当读卡器工作在扩容检测模式,扩容检测模块按照权利要求1中所述的内存卡扩容检测方法对内存卡进行扩容检测,将得到的扩容检测结果发送给结果显示模块,结果显示模块对扩容检测结果进行显示。
[0012]本发明内存卡扩容检测方法,针对目前内存卡扩容方法,采用比对扇区内存容量和寄存器内存容量、超范围地址的数据写入并读回和高地址范围随机地址的数据写入并读回共计三步检测对内存卡是否扩容进行检测,实现对内存卡准确有效的扩容检测。并提供具有扩容检测功能的读卡器,实现脱离主机的独立检测,使扩容检测更为便捷。
【专利附图】
【附图说明】
[0013]图1是本发明内存卡的扩容检测方法的【具体实施方式】流程图;
[0014]图2是本发明具有扩容检测功能的读卡器的【具体实施方式】结构图;
[0015]图3是图2所示读卡器的工作流程图。
【具体实施方式】
[0016]下面结合附图对本发明的【具体实施方式】进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
[0017]实施例
[0018]图1是本发明内存卡的扩容检测方法的【具体实施方式】流程图。如图1所示,本发明内存卡的扩容检测方法主要采用三步检测,包括以下步骤:
[0019]SlOl:读取内存卡的DBR(DOS BOOT RECORD,分区引导扇区)扇区数据,获取扇区总数,根据扇区总数得到内存卡的内存容量Cp
[0020]查阅FAT文件系统的规范可知,如果内存卡中有MBR(Main Boot Record,主引导记录),则MBR数据存储在内存卡最低地址空间,占用内存512字节空间,即第一个扇区;如果内存卡没有MBR,那么第一个扇区数据即为DBR。因此先通过调用内存卡单块读函数SD_ReadBlockO读取内存卡的第一个扇区的信息,判断其是否为DBR,否则为MBR(可通过判断该扇区中0x52?0x56地址处的数据是否为“FAT32”来识别是否为DBR,判断方法不唯一)。根据MBR可以得到分区DBR的起始地址,然后就可以通过调用内存卡单块读函数SD_ReadBlock O读取内存卡中的DBR数据,获得扇区总数TotalSectors,将该值乘以512bytes得到内存卡的字节容量,将该值(^存放在控制器的寄存器I中。在实际应用中,函数的编写需要根据相关协议标准来进行。
[0021]S102:然后读取内存卡CSD (Card Specific Data Register,描述数据寄存器)寄存器得到内存容量C2。
[0022]通过内存卡寄存器读函数SD_GetCardInfo()函数获取内存卡CSD寄存器的C_SIZE (设备容量),C_SIZE_MULT (设备容量乘子)和READ_BL_LEN(最大读取数据块长)的值,然后通过内存容量计算公式即可计算出内存卡的容量。由于对于不同类型的内存卡,其内存容量计算公式可能会存在不同,例如SDSC(Secure Digital Standard Capacity标准容量SD卡)卡和SDHC (Secure Digital High Capacity,高容量SD卡)卡的计算公式就不一样。因此在实际应用中,可以在检测系统对内存卡初始化的同时,识别内存卡的类型,自动选择对应的计算公式来计算,以扩大适用范围。
[0023]S103:判断CjP C 2是否相等,如果不相等,进入步骤SI 10,否则进入步骤S104。
[0024]根据步骤SlOl至步骤S103的判断,可以对通过修改引导扇区信息的扩容内存卡实现检测。
[0025]S104:根据步骤SlOl得到的内存容量C1,将其地址最大值记为P,向地址[P+Pi,P+P2]范围内写入任意数据后读回,其中O <Pl< P 2。
[0026]在实际应用中,为了扩容检测完毕后对原有数据进行恢复,可先将写入地址的数据另存。
[0027]S105:判断写入的数据和读出的数据是否一致,如果一致,进入步骤S110,否则进入步骤S106。
[0028]步骤S104、105是向超出内存卡容量值的一段地址范围写入数据并读回,从而对采用“加大地址循环映射法”扩容的内存卡实现检测。为了保证检测的正确性,该地址范围不宜太小,如果太大又会增加检测时间,通常可以采用IK的容量,即向[C1, Q+K^Abyte]对应的地址空间进行操作。
[0029]S106:在地址[P-p3,P]范围内随机产生一组地址,其中p3> Oo
[0030]S107:在步骤S106得到的随机地址写入任意数据并读回。
[0031]S108:判断写入的数据和读出的数据是否一致,如果一致,进入步骤S109,否则进入步骤SI 10。
[0032]S109:该内存卡为正常卡。
[0033]SllO:该内存卡为扩容卡。
[0034]采用本发明内存卡的扩容检测方法可以实现对内存卡扩容的准确检测。为了能够对内存卡进行无需主机的独立检测,本发明提供了一种具有扩容检测功能的读卡器。图2是本发明具有扩容检测功能的读卡器的【具体实施方式】结构图。如图2所示,本发明具有扩容检测功能的读卡器除了具有一般读卡器也具有的USB接口 1,控制器2和内存卡接口 3之夕卜,其控制器中还设置有扩容检测模块21和格式化模块22,另外还包括结果显示模块4、模块开关5和电源模块6。
[0035]与一般读卡器相同,控制器2分别与USB接口 I和内存卡接口 3连接,用于控制数据传输,USB接口 I用于连接主机,内存卡接口 2用于连接内存卡进行数据读写。本实施例中控制器选用意法半导体STM32微控制器。
[0036]模式开关5用于选择读卡器的工作模式,包括普通模式和扩容检测模式,模式开关将模式选择信号发送给控制器2,控制器2根据模式选择信号确定当前读卡器工作模式。
[0037]当读卡器处于扩容检测模式时,控制器2中设置的扩容检测模块21,按照本发明所提供的内存卡的扩容检测方法对内存卡进行扩容检测,然后将得到的扩容检测结果发送给结果显示模块4,结果显示模块4对扩容检测结果进行显示。
[0038]结果显示模块4可以采用指示灯或液晶屏来实现,例如指示灯为红表示内存卡为扩容卡,为绿表示内存卡为正常卡。液晶屏则可以更详细地显示扩容检测结果。
[0039]为了增加读卡器的应用范围,本发明具有扩容检测功能的读卡器的控制器2中还增加了一个格式化模块22,该模块用于对内存卡进行格式化。一般来说,可以直接在格式化模块22中移植一个文件系统FATFS,利用该文件系统提供的格式化函数F_MKFS()格式化内存卡,从而实现格式化。相应地,当读卡器配置有格式化模块22时,模式开关5也要相应地设置对应的格式化模块的开关。
[0040]目前读卡器都是通过USB接口来供电的。对于本发明的具有扩容检测的读卡器,虽然也可以通过USB接口 I来供电,但是为了更好地实现读卡器的独立使用,配置了一个电源模块6,向控制器2、内存卡接口 3、结果显示模块4和模式开关5供电。该电源模块6可以是电池或超级电容供电,还可以通过USB进行充电。
[0041]图3是图2所示读卡器的工作流程图。如图3所示,本实施例中的读卡器的工作流程包括以下步骤:
[0042]S301:判断工作模式:
[0043]读卡器上电后,控制器先根据模式开关的模式选择信号判断读卡器当前所处的工作模式,如果是普通模式,进入步骤S302,如果是扩容检测模式,进入步骤S303,如果是格式化式,进入步骤S304。
[0044]S302:根据主机的操作对内存卡进行读写等操作。
[0045]S303:扩容检测模块21对内存卡进行扩容检测,将扩容检测结果通过结果显示模块4进行显示。
[0046]S304:格式化模块22对内存卡进行格式化。
[0047]尽管上面对本发明说明性的【具体实施方式】进行了描述,以便于本【技术领域】的技术人员理解本发明,但应该清楚,本发明不限于【具体实施方式】的范围,对本【技术领域】的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
【权利要求】
1.一种内存卡扩容检测方法,其特征在于,包括以下步骤: 51:读取内存卡的DBR扇区数据,获取扇区总数,根据扇区总数得到内存卡的内存容量C1,然后读取内存卡CSD寄存器得到内存容量C2,判断CjPC 2是否相等,如果不相等,则该内存卡为扩容卡,否则进入步骤S2 ; 52:根据步骤SI得到的内存容量C1,将其地址最大值记为P,向地址[P+Pl,P+p2]范围内写入任意数据后读回,其中O < Pl< P2,判断写入的数据和读出的数据是否一致,如果一致,则该内存卡为扩容卡,否则进入步骤S3 ; S3:在地址[P_p3,P]范围内随机产生一组地址,其中p3> O,写入任意数据后读回,判断写入的数据和读出的数据是否一致,如果一致,则该内存卡为正常卡,否则该内存卡为扩容卡。
2.—种具有扩容检测功能的读卡器,包括内存卡接口、控制器和USB接口,控制器分别与内存卡接口和USB接口连接用于控制数据传输,内存卡接口用于连接内存卡进行数据读写,USB接口用于连接主机,其特征在于:还包括与控制器连接的结果显示模块和模式开关,控制器中设置有扩容检测模块,其中: 开关模式用于选择读卡器的工作模式,包括普通模式和扩容检测模式,模式开关将模式选择信号发送给控制器,控制器根据模式选择信号确定当前读卡器工作模式; 当读卡器工作在扩容检测模式,扩容检测模块按照权利要求1中所述的内存卡扩容检测方法对内存卡进行扩容检测,将得到的扩容检测结果发送给结果显示模块,结果显示模块对扩容检测结果进行显示。
3.根据权利要求1所述的读卡器,其特征在于,所述控制器中还包括格式化模块,模式开关所选择的工作模式中还包括格式化模式。
4.根据权利要求2所述的读卡器,其特征在于,还包括电源模块,用于向控制器、内存卡接口、结果显示模式和模式开关供电。
5.根据权利要求4所述的读卡器,其特征在于,所述电源模式可通过USB接口充电。
【文档编号】G06K7/00GK104484634SQ201410811043
【公开日】2015年4月1日 申请日期:2014年12月23日 优先权日:2014年12月23日
【发明者】李力, 杨怡, 张朋, 黄建国, 王诗舒, 程瑶 申请人:电子科技大学