一种优化SD卡读写性能的方法、装置和一种SD卡
技术领域
本发明属于数据存储领域,尤其涉及一种优化SD卡读写性能的方法、装置和一种SD卡。
背景技术
SD卡即安全数字卡(Secure Digital Card),是一种基于半导体快闪记忆器的新一代记忆设备。由于具有体积小、数据传输速度快和可热插拔等优良的特性,SD卡被广泛应用于数码相机、个人数码助理(即PDA)、智能移动终端和多媒体播放器等便携式装置。
从硬件结构角度,SD卡分为控制器和存储本体两部分。控制器负责与外部设备通信,通过一系列的控制命令,将存储本体的数据与外部设备进行交互。交互过程中,从外部设备接收到的数据,在写入到存储本体之前,会将其存储到控制器的静态随机存储器(Static Random Access Memory,SRAM)进行缓存,然后,再写入存储本体,或者反之,外部设备读取SD卡数据时,也有一个将存储本体的数据存储到SRAM进行缓存的过程。由此可知,控制器对缓存的控制,决定着SD卡读写性能的高低。
然而,现有技术并没有对控制器的缓存进行良好的规划,导致控制器的缓存利用率,从而也导致SD卡读写速度不高。
发明内容
本发明的目的在于提供一种优化SD卡读写性能的方法、装置和一种SD卡,以提高控制器的缓存区的利用率,进而提高SD卡读写速度。
本发明第一方面提供一种优化SD卡读写性能的方法,所述方法包括:
实时监测控制器的缓存区使用情况;
若所述缓存区存在缓存碎片,则将所述缓存碎片创建为缓存块;
当SD接口模块从SD接口收到数据时,通知所述SD接口模块将所述从SD接口收到的数据缓存到所述创建的缓存块中。
本发明第二方面提供一种优化SD卡读写性能的装置,所述装置包括:
监测模块,用于实时监测控制器的缓存区使用情况;
缓存创建模块,用于若所述缓存区存在缓存碎片,则将所述缓存碎片创建为缓存块;
SD接口模块,用于从SD接口接收数据;
通知模块,用于当所述SD接口模块从SD接口收到数据时,通知所述SD接口模块将所述从SD接口收到的数据缓存到所述缓存创建模块创建的缓存块中。
本发明第三方面提供一种SD卡,所述SD卡包括控制器和存储本体,所述控制器包括监测模块、缓存创建模块、SD接口模块和通知模块;
所述监测模块,用于实时监测控制器的缓存区使用情况;
所述缓存创建模块,用于若所述缓存区存在缓存碎片,则将所述缓存碎片创建为缓存块;
所述SD接口模块,用于从SD接口接收数据;
所述通知模块,用于当所述SD接口模块从SD接口收到数据时,通知所述SD接口模块将所述从SD接口收到的数据缓存到所述缓存创建模块创建的缓存块中;
所述存储本体,用于存储所述SD接口模块从SD接口收到的数据。
从上述本发明技术方案可知,在控制器的缓存区存在缓存碎片时,由于能够将缓存碎片创建为可以用于缓存数据的缓存块,通知SD接口模块将从SD接口收到的数据缓存到所述创建的缓存块中,从而使得数据能够继续被正常接收而不会导致SD接口阻塞,提高了控制器的缓存的利用率,提高了SD卡的读写速度。
附图说明
图1是本发明实施例一提供的优化SD卡读写性能的方法的实现流程示意图;
图2是本发明实施例二提供的将缓存碎片创建为缓存块的示意图;
图3是本发明实施例三提供的将缓存碎片创建为缓存块的示意图;
图4是本发明实施例四提供的优化SD卡读写性能的装置的结构示意图;
图5是本发明实施例五提供的优化SD卡读写性能的装置的结构示意图;
图6是本发明实施例六提供的优化SD卡读写性能的装置的结构示意图;
图7是本发明实施例七提供的SD卡的结构示意图;
图8是本发明实施例八提供的SD卡的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供一种优化SD卡读写性能的方法,所述方法包括:实时监测控制器的缓存区使用情况;若所述缓存区存在缓存碎片,则将所述缓存碎片创建为缓存块;当SD接口模块从SD接口收到数据时,通知所述SD接口模块将所述从SD接口收到的数据缓存到所述创建的缓存块中。本发明实施例还提供相应的优化SD卡读写性能的装置和一种SD卡。以下分别进行详细说明。
请参阅附图1,是本发明实施例一提供的优化SD卡读写性能的方法的实现流程示意图,主要包括以下步骤S101至步骤S103,详细说明如下:
S101,实时监测控制器的缓存区使用情况。
一般地,SD卡中控制器的缓存区由SRAM构成。缓存区的良好规划和高效利用,很大程度上决定了SD卡的读写速度。在本发明实施例中,可以通过软件来实时监测SD卡控制器的缓存区使用情况,例如,监测缓存区是否存在缓存碎片。
S102,若控制器的缓存区存在缓存碎片,则将缓存碎片创建为缓存块。
一般地,标准的缓存块其大小是固定的,例如,1024字节(byte),向缓存区写数据也是以缓存块为基本单位。在本发明实施例中,缓存碎片是指缓存区中大小比标准的缓存块的大小要小的一段内存,例如,标准的缓存块大小为1024字节时,缓存区中出现的一段地址连续、大小为512字节(byte)的内存就可以视为是缓存碎片。
需要说明的是,在本发明实施例中,将缓存碎片创建为缓存块,指的是将大小不一的缓存碎片划分为大小固定的缓存块,当然,这些由缓存碎片创建而成的缓存块,其大小一般比标准的缓存块要小。例如,假设缓存区中存在大小分别为512字节、530字节和545字节的三个缓存碎片,则可以将这三个缓存碎片创建为三个大小均为512字节的缓存块,如附图2所示。至于缓存碎片被创建为缓存块之后剩余的空间,例如,原大小为530字节的那个缓存碎片,剩余的18个字节的一段内存可以舍弃或者创建为更小的缓存块。
在本发明一个实施例中,若缓存区存在缓存碎片,则将所述缓存碎片创建为缓存块可以是将所述缓存碎片一一分别划分为缓存区的缓存块,例如,前述实施例提及的大小分别为512字节、530字节和545字节的三个缓存碎片,可以将他们一一分别创建为三个大小均为512字节的缓存块。
当控制器的缓存区将被占满,且只剩下一些较小的缓存碎片时,如果只是像前述实施例一样将这些缓存碎片一一分别划分为缓存区的缓存块,那么,由于这些划分成的缓存块容量太小,也会影响后续数据的写入或接收,因此,作为本发明另一实施例,若缓存区存在缓存碎片,则将缓存碎片创建为缓存块可以是待缓存碎片相邻位置的缓存块释放后,将缓存碎片与缓存碎片相邻且已释放的缓存块一起划分为缓存区的缓存块,换言之,可以待缓存碎片前后相邻位置的缓存块释放后,将缓存碎片与缓存碎片前后相邻且已释放的缓存块一起划分为缓存区的缓存块,如此得到的缓存块容量远大于仅仅直接将该缓存碎片划分所得的缓存块的容量。例如,如附图3所示,大小为128字节(byte)的缓存碎片如果直接划分成一个缓存块,则这样的一个小缓存块的用途非常有限,然而,若待这个128字节(byte)的缓存碎片的前后相邻且容量均为512字节(byte)的缓存块释放后,将这个128字节(byte)的缓存碎片与其前后相邻的这两个容量均为512字节(byte)的缓存块一起划分为缓存区的缓存块,则将得到一个容量为1152字节(byte)的缓存块,其容量要远远大于原缓存碎片的容量,如此,可以大大加快数据的读写速度。
S103,当SD接口模块从SD接口收到数据时,通知SD接口模块将所述从SD接口收到的数据缓存到经步骤S102创建的缓存块中。
在本发明实施例中,SD接口模块是一个硬件接口单元,其负责从SD接口接收来自主机,例如,数码相机、个人数字助理和智能手机等的数据,然后,将这些从SD接口收到的数据缓存到经步骤S102创建的缓存块中。
需要说明的是,步骤S101和S102实际上是通过软件动态规划缓存区的过程。在规划缓存区的过程即动态地划分缓存块的同时,软件可以提供防止数据溢出保护机制,防止有效数据被覆盖而丢失,创建一个完善的管理系统,准确记录管理缓存区的使用情况,把缓存块的划分情况提供给硬件例如SD接口模块,同时接收硬件反馈的数据接收信息,实时动态规划缓存。
从上述附图1示例的优化SD卡读写性能的方法可知,在控制器的缓存区存在缓存碎片时,由于能够将缓存碎片创建为可以用于缓存数据的缓存块,通知SD接口模块将从SD接口收到的数据缓存到所述创建的缓存块中,从而使得数据能够继续被正常接收而不会导致SD接口阻塞,提高了控制器的缓存的利用率,提高了SD卡的读写速度。
在上述本发明实施例中,在多个缓存块写入数据时,硬件加速模块实时将收到的数据写入缓存区。硬件加速模块判断从SD接口收到并写入缓存区的数据是否正确,若从SD接口收到并写入缓存区的数据正确,则标记写入缓存区的数据为有效数据,并且启动下一包数据的接收,否则,将不正确的数据占用的缓存空间标记为可用缓存空间,并且通知外部主机重新发送当前包数据。具体地,SD接口模块每接收完一包数据,硬件加速模块监测判断该数据包的循环冗余检验(Cyclic Redundancy Check,CRC)码是否正确,若该CRC码正确,则判断这个写入到缓存块的数据是有效的,做一个记录的同时SD接口模块开始启动下一包数据的接收。若该CRC码错误,则将该数据包丢弃,即,将原本缓存该数据包的缓存块标记为可用缓存空间,如此,该缓存块被当成是一个空的缓存块,后续接收到的数据可存入该缓存块,通知外部主机重新发送当前包数据。在这个过程中,SD接口模块自动执行判断及触发下一包数据传输,减少了用软件响应处理的时间,加快了速度,同时SD接口模块反馈缓存区中数据状态信息,供软件读取查阅。
在上述本发明实施例中,除了负责从SD接口读取数据写入缓存区之外,SD接口模块还实时监控SD卡命令线(CMD线),当收到停止(stop)命令时,停止数据的传输并且判断写入缓存区的数据是否有效,若无效,则丢弃所述无效的数据,并向软件反馈缓存区的状态信息。具体地,SD接口模块从SD接口接收数据的同时,主机随时有可能通过SD卡命令线(CMD线)发送停止命令(即stop命令)。为了对主机发出的停止命令做出应答,SD接口模块可以一直监控SD卡命令线上的信号。当接收到stop命令时正确识别,停止数据传输。为了准确保存有用数据,丢弃无效数据,在多块写的过程中,若SD接口模块检测到stop命令,根据协议规定的不同的时间点接收到stop命令,判断数据的有效性,例如,主机在向SD卡发送数据之前,会发送一个命令,该命令指示即将传送过来的数据包的大小,若SD接口模块检测到stop命令时发现接收到的该数据包的大小不及命令指示的大小,则判断该数据包无效。若判断数据有效,则保留该数据,否则丢弃该数据。同时SD接口模块实时向软件反馈缓存区的状态信息,具体包括在向缓存区写入数据时,将数据写入缓存区之后,提供缓存区的有效数据状态信息,例如,当前缓存区存有多少数据,还有多少空间可供缓存,等等;在从缓存区读取数据时,从缓存中将数据取走之后,提供标志信息,例如,将原先被取走的数据占用的缓存块标记为可用。软件根据SD接口模块反馈的这些状态信息以及管理系统中空闲的缓存空间规划缓存。
请参阅附图4,是本发明实施例四提供的优化SD卡读写性能的装置的结构示意图。为了便于说明,附图4仅示出了与本发明实施例相关的部分。附图4示例的优化SD卡读写性能的装置主要包括监测模块401、缓存创建模块402、SD接口模块403和通知模块404,详细说明如下:
监测模块401,用于实时监测控制器的缓存区使用情况。
一般地,SD卡中控制器的缓存区由SRAM构成。缓存区的良好规划和高效利用,很大程度上决定了SD卡的读写速度。在本发明实施例中,可以通过监测模块401来实时监测SD卡控制器的缓存区使用情况,例如,监测缓存区是否存在缓存碎片。
缓存创建模块402,用于若缓存区存在缓存碎片,则将缓存碎片创建为缓存块。
一般地,标准的缓存块其大小是固定的,例如,1024字节(byte),向缓存区写数据也是以缓存块为基本单位。在本发明实施例中,缓存碎片是指缓存区中大小比标准的缓存块的大小要小的一段内存,例如,标准的缓存块大小为1024字节时,缓存区中出现的一段地址连续、大小为512字节(byte)的内存就可以视为是缓存碎片。
需要说明的是,在本发明实施例中,缓存创建模块402将缓存碎片创建为缓存块,指的是将大小不一的缓存碎片划分为大小固定的缓存块,当然,这些由缓存碎片创建而成的缓存块,其大小一般比标准的缓存块要小。例如,假设缓存区中存在大小分别为512字节、530字节和545字节的三个缓存碎片,则缓存创建模块402可以将这三个缓存碎片创建为三个大小均为512字节的缓存块,如附图2所示。至于缓存碎片被创建为缓存块之后剩余的空间,例如,示例中原大小为530字节的那个缓存碎片被创建为大小为512字节的缓存块之后,剩余的18个字节的一段内存可以舍弃或者创建为更小的缓存块。
SD接口模块403,用于从SD接口接收数据。
通知模块404,用于当SD接口模块403从SD接口收到数据时,通知SD接口模块将从SD接口收到的数据缓存到缓存创建模块402创建的缓存块中。
附图4示例的缓存创建模块402包括第一创建单元501或第二创建单元502,如附图5所示本发明实施例五提供的优化SD卡读写性能的装置,其中:
第一创建单元501,用于将缓存碎片一一分别划分为缓存区的缓存块;
第二创建单元502,用于待缓存碎片相邻位置的缓存块释放后,将缓存碎片与缓存碎片相邻且已释放的缓存块一起划分为缓存区的缓存块。
在本发明一个实施例中,若缓存区存在缓存碎片,则第一创建单元501可以将缓存碎片一一分别划分为缓存区的缓存块,例如,前述实施例提及的大小分别为512字节、530字节和545字节的三个缓存碎片,第一创建单元501可以将他们一一分别创建为三个大小均为512字节的缓存块。
当控制器的缓存区将被占满,且只剩下一些较小的缓存碎片时,如果只是像前述实施例一样将这些缓存碎片一一分别划分为缓存区的缓存块,那么,由于这些划分成的缓存块容量太小,也会影响后续数据的写入或接收,因此,作为本发明另一实施例,第二创建单元502可以待缓存碎片相邻位置的缓存块释放后,将缓存碎片与缓存碎片相邻且已释放的缓存块一起划分为缓存区的缓存块,换言之,可以待缓存碎片前后相邻位置的缓存块释放后,第二创建单元502将缓存碎片与缓存碎片前后相邻且已释放的缓存块一起划分为缓存区的缓存块,如此得到的缓存块容量远大于仅仅直接将该缓存碎片划分所得的缓存块的容量。例如,如附图3所示,大小为128字节(byte)的缓存碎片如果直接划分成一个缓存块,则这样的一个小缓存块的用途非常有限,然而,若待这个128字节(byte)的缓存碎片的前后相邻且容量均为512字节(byte)的缓存块释放后,第二创建单元502将这个128字节(byte)的缓存碎片与其前后相邻的这两个容量均为512字节(byte)的缓存块一起划分为缓存区的缓存块,则将得到一个容量为1152字节(byte)的缓存块,其容量要远远大于原缓存碎片的容量,如此,可以大大加快数据的读写速度。
附图4示例的SD接口模块403可以包括硬件加速模块601,如附图6所示本发明实施例六提供的优化SD卡读写性能的装置。硬件加速模块601用于判断从SD接口收到并写入缓存区的数据是否正确,若所述从SD接口收到并写入缓存区的数据正确,则标记所述写入缓存区的数据为有效数据,并且启动下一包数据的接收,否则,将所述不正确的数据占用的缓存空间标记为可用缓存空间,并且通知外部主机重新发送当前包数据。具体地,SD接口模块403每接收完一包数据,硬件加速模块601监测判断该数据包的循环冗余检验(CyclicRedundancy Check,CRC)码是否正确,若该CRC码正确,则判断这个写入到缓存块的数据是有效的,做一个记录的同时SD接口模块403开始启动下一包数据的接收。若该CRC码错误,则将该数据包丢弃,即,将原本缓存该数据包的缓存块标记为可用缓存空间,如此,该缓存块被当成是一个空的缓存块,后续接收到的数据可存入该缓存块,通知外部主机重新发送当前包数据。在这个过程中,SD接口模块403自动执行判断及触发下一包数据传输,减少了用软件响应处理的时间,加快了速度,同时SD接口模块403反馈缓存区中数据状态信息,供软件读取查阅。
上述附图4至附图6任一示例的优化SD卡读写性能的装置中,SD接口模块403还用于实时监控SD卡命令线,当收到停止命令时,停止数据的传输并且判断写入缓存区的数据是否有效,若无效,则丢弃所述无效的数据,并向软件反馈缓存区的状态信息。具体地,SD接口模块403从SD接口接收数据的同时,主机随时有可能通过SD卡命令线(CMD线)发送停止命令(即stop命令)。为了对主机发出的停止命令做出应答,SD接口模块403可以一直监控SD卡命令线上的信号。当接收到stop命令时正确识别,停止数据传输。为了准确保存有用数据,丢弃无效数据,在多块写的过程中,若SD接口模块403检测到stop命令,根据协议规定的不同的时间点接收到stop命令,判断数据的有效性,例如,主机在向SD卡发送数据之前,会发送一个命令,该命令指示即将传送过来的数据包的大小,若SD接口模块403检测到stop命令时发现接收到的该数据包的大小不及命令指示的大小,则判断该数据包无效。若判断数据有效,则保留该数据,否则丢弃该数据。同时SD接口模块403实时向软件反馈缓存区的状态信息,具体包括在向缓存区写入数据时,将数据写入缓存区之后,提供缓存区的有效数据状态信息,例如,当前缓存区存有多少数据,还有多少空间可供缓存,等等;在从缓存区读取数据时,从缓存中将数据取走之后,提供标志信息,例如,将原先被取走的数据占用的缓存块标记为可用。软件根据SD接口模块反馈的这些状态信息以及管理系统中空闲的缓存空间规划缓存。
请参阅附图7,是本发明实施例七提供的SD卡的结构示意图。为了便于说明,附图7仅示出了与本发明实施例相关的部分。附图7示例的SD卡包括控制器701和存储本体702,控制器701包括监测模块703、缓存创建模块704、SD接口模块705和通知模块706,以下详细说明:
监测模块703,用于实时监测控制器的缓存区使用情况;
缓存创建模块704,用于若缓存区存在缓存碎片,则将缓存碎片创建为缓存块;
SD接口模块705,用于从SD接口接收数据;
通知模块706,用于当SD接口模块705从SD接口收到数据时,通知SD接口模块705将从SD接口收到的数据缓存到缓存创建模块704创建的缓存块中;
存储本体702,用于存储SD接口模块705从SD接口收到的数据。
附图7示例的缓存创建模块704包括第一创建单元801或第二创建单元802,SD接口模块705还包括硬件加速模块803,如附图8所示本发明实施例八提供的SD卡,其中:
第一创建单元801,用于将缓存碎片一一分别划分为缓存区的缓存块;
第二创建单元802,用于待缓存碎片相邻位置的缓存块释放后,将缓存碎片与缓存碎片相邻且已释放的缓存块一起划分为缓存区的缓存块;
硬件加速模块803,用于判断从SD接口收到并写入缓存区的数据是否正确,若所述从SD接口收到并写入缓存区的数据正确,则标记所述写入缓存区的数据为有效数据,并且启动下一包数据的接收,否则,将不正确的数据占用的缓存空间标记为可用缓存空间,并且通知外部主机重新发送当前包数据;
SD接口模块705还用于实时监控SD卡命令线,当收到停止命令时,停止数据的传输或者判断写入所述缓存区的数据是否有效,若无效,则丢弃所述无效的数据,并向软件反馈所述缓存区的状态信息。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁盘或光盘等。
以上对本发明实施例所提供的优化SD卡读写性能的方法、装置和一种SD卡进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。