一种能够快速读写闪存的方法及其专用处理器
技术领域
本发明涉及数据存储设备,准确地说是一种能够快速读写闪存的方法及其专用处理器,该方法及其专用处理器能够利用其本身具有的专有指令,迅速完成对闪存的操作,提高闪存盘的读写速度。
背景技术
闪速存储器(Flash Memory)简称闪存,是一类非易失性存储器NVM(Non-Volatile Memory),即在供电电源关闭后仍能保持片内信息,它具有读写速度快、成本低、容量大的特点,被广泛用于各种领域。当闪存与通用串行总线USB(Universal Serial Bus)接口和闪存控制芯片结合,做成即插即用(Plug and Play)的存储盘后,其携带方便、存储容量大、速度快、寿命长等优点,深受用户的欢迎,这就是市场上所称的U盘或者叫做闪存盘(Flash Disk)。
闪存盘中有两个最主要的芯片:闪存控制芯片和闪存芯片,闪存芯片对于闪存盘非常重要,但其重要性也仅仅相当于电脑的硬盘,起到存储数据的作用,闪存盘最核心的是控制芯片。闪存控制芯片对闪存的操作起着管理的作用,它对闪存盘的各项性能指标起着决定性的作用。
闪存控制芯片可以采用通用芯片或专用芯片。当采用通用通用芯片时,其处理器为通用处理器,由于其指令为通用指令,对闪存读写操作需要多条指令才能完成;而采用专用芯片时,其处理器为专用处理器,由于专用处理器的专有指令是专门针对闪存的操作而设计的,完成对闪存读写操作只需要区区几条指令即可完成,大大地提高了闪存盘的读写速度。
发明内容
基于此,本发明的目的是提供一种能够实现快速读写闪存的方法及其专用处理器,该专用处理器采用专有指令,直接完成对闪存的读写操作。
本发明的另一个目的是提供一种能够快速读写闪存的32位专用处理器,该处理器是针对USB和闪存的特点而设计的,主要完成两大功能:一是根据USB2.0协议的要求,对数据包进行处理与响应;二是负责逻辑地址与物理地址的转换,以及对闪存数据进行管理和操作。
为此,本发明是这样实现的:
一种能够快速读写闪存的方法,其特征在于闪存处理器读写数据时其专有指令直接完成通用指令需要多条指令才能完成的操作。
这些专有指令是在硬件设计时,考虑到闪存读写等操作的特殊性,专门为完成这些操作设计的,因而执行这些专有指令时迅速、简练、直接。
所述的能够快速读写闪存的方法,其所读写的闪存片为偶数个时,米用双通道技术,即将闪存片分成两组,同时对两组闪存片进行操作。
一种能够快速读写的闪存专用处理器,其包括有:
通用寄存器,用于一般进行逻辑运算和循环计数;
专用寄存器,亦即特殊功能寄存器;
只读存储器,用于存储固定程序和表格常数;
随机存储器,用于暂时存储中间运算结果、数据暂存和缓冲等。
所述的能够快速读写的闪存专用处理器,其专用寄存器包括flash_ctrl,config_r,dev_id,counter_i,counter_j,counter0,tbl_base[11:0],tbl_offset[12:0]。
所述的能够快速读写的闪存专用处理器,其通用寄存器包括reg_r0,reg_r1,reg_r2,reg_r3,其中reg_r0[15:0]也在指令DJNZ中用作循环计数器,reg_a也为算术逻辑运算器。
所述的随机存储器(RAM)是静态随机存储器(SRAM)。
所述的能够快速读写的闪存专用处理器,支持USB2.0协议并向下兼容USB1.x协议。
本发明采用专有指令,通过专有指令快速读写闪存片的数据,使得闪存数据的读写过程减少了很多中间环节,简化了算法和编程步骤,大大提高了运算效率。经过实际测试,采用本发明的方法和专有处理器做成的U盘,其读写速度要比现有U盘的读写速度高5-20倍。
还有,相对于通用处理器,采用专用处理器,不必考虑其通用性,只要可以满足闪存操作的特殊要求即可,可大大减少芯片面积,从而可缩小闪存盘的体积、降低闪存盘的成本。
附图说明
图1为本发明实施的结构示意图,
图2为本发明闪存片的分组示意图,
图3为本发明的专有指令(LOADFCS)片选专有指令的逻辑流程图,
图4为本发明的专有指令(FADR)向闪存写入闪存读/写地址专有指令的逻辑流程图,
图5为本发明的专有指令(FDMARD)采用直接存储器访问(DirectMemory Access)方法读取闪存中数据的流程图。
具体实施方式
参照附图,本发明的实施为:
原理框图如图1所示,主机通过USB2.0物理层接口模块实现与控制芯片内数据包的转换,USB2.0功能模块负责数据包的传输,由处理器对数据包行进行处理与响应,并对闪存数据进行读取/存储和管理,而纠错码模块则对闪存存储器的数据进行纠错编码。本专用处理器是基于USB2.0协议的专门用于闪存盘控制芯片的专用处理器,有以下寄存器和存储器:
32位通用寄存器:reg_r0,reg_r1,reg_r2,reg_r3,其中reg_r0[15:0]也在指令DJNZ中用作循环计数器,reg_a为算术逻辑运算器;
32位专用寄存器:flash_ctrl,config_r,dev_id,counter_i,counter_j,counter0;
其它专用寄存器:tbl_base[11:0],tbl_offset[12:0];
ROM:只读存储器;
SRAM:静态存储器;
其中,reg_x、reg_y表示reg_a,、reg_0、reg_1、reg_r2、reg_r3中的其中一个。
闪存片组可由多片闪存片组成,实际应用时将闪存片分成两组成为第0组和第1组,如图2所示:
当闪存片为偶数个时,可采用双通道(Dual Channel)技术,即:同时对两组闪存片组进行读写操作,可以使闪存盘的读写速度提高近一倍。
在对闪存片进行读写操作前,必须先选择将要对其操作的闪存片并使其处于可操作(Enable)状态,对于双通道就要同时选择两块闪存片。
下面三个例子将通用指令与专用指令进行对比,图中虚线内的部分通用指令与虚线右边专用指令完成同样的操作。
图3所示,指令:LOADFCS flash_ctrl,reg_x就是为片选而定义的专有指令,当执行该命令时,硬件会自动检查flash_ctrl中的双通道标志位,判断是否为双通道,如果是则选择闪存片编号(Chip No)为flash_ctrl[3:0]×2-1和flash_ctrl[3:0]×2的两个芯片。如果是单通道,则选择闪存片编号为flash_ctrl[3:0]的芯片。
从图中的对比可以看出,采用该指令只需先赋值给reg_x的低位,再执行片选指令即可,仅需要执行2条指令。如采用一般通用指令,由于要保留flash_ctrl其它位的值,所以只能对flash_ctrl[3:0]的每一位进行清零或赋值(Clear or Set),至少要执行6条指令,还包括一条判断指令。
图4所示,指令FADR reg_x,reg_y将reg_x中的内容写入闪存输入/输出口,每次写入8位(8bits),即1字节(1byte),直到所要求的数据写完。其中,寄存器reg_x[31:0]中的内容是准备写入闪存的内容,寄存器reg_y[2:0]中的内容是按每次写入闪存1byte的内容(闪存的I/O是8bit)全部写完reg_x[31:0]中要求写入闪存的内容所需的写入次数(例如:3 bytes的内容须写3次)。硬件根据闪存组号(GroupNo)自动判断是向第0组(Group 0)还是第1组(Group 1)闪存写入该地址内容。
从图中的对比可以看出,执行1条该指令完成的操作,如采用一般通用指令,则需要执行reg_y[2:0]次循环,每个循环4条指令(包括两条判断指令)才能完成。假如reg_y[2:0]=3,就需要执行12条指令才能完成此操作。
图5所示,指令FDMARD @reg_r0采用直接存储器访问(DMA)方法循环将闪存输入/输出口(Flash I/O)的数据写入SRAM中,reg_r0[31:16]为SRAM的地址,reg_r0[15:0]为循环的计数器,硬件自动根据flash_ctrl中的闪存片组标志位来判断向哪组闪存片组读取数据。
从图中的对比可以看出,执行一条该指令完成的操作,如采用一般通用指令,则需要执行reg_r0[15:0]次循环,每个循环4条指令(包括两条判断指令)才能完成。reg_r0[15:0]最大可以等于512,此时,就需要执行2048条指令才能完成此操作。