发明内容
本发明的主要目的在于提供一种基于DMA映射的Flash数据传输控制方法及装置,旨在简化FW控制流程。
为了达到上述目的,本发明提出一种基于直接存储器访问DMA映射的闪存Flash数据传输控制方法,包括:
根据预设规则设置DMA RAM与Flash Page之间的扇区sector序号映射关系;
根据所述sector序号映射关系以及内置的寄存器进行Flash数据传输。
优选地,所述寄存器为Bitmap寄存器,每个寄存器标识Flash Page中的一个sector;所述寄存器的值标识sector序号对应的数据处于被屏蔽或不被屏蔽状态。
优选地,所述根据sector序号映射关系以及内置的寄存器进行Flash数据传输的步骤包括:根据所述sector序号映射关系将Flash数据从Flash Page读出并存入DMA RAM或者根据所述sector序号映射关系将Flash数据从DMARAM写入Flash Page。
优选地,所述根据映射关系将Flash数据从Flash Page读出并存入DMARAM的步骤包括:
设置Flash数据读出的起始地址;
从所述读出的起始地址读出预定长度的Flash数据;
根据读出Flash数据的sector序号对应的寄存器的值,以及所述读出Flash数据的sector序号与DMA RAM中对应sector序号的映射关系,将相应的Flash数据存入DMA RAM中对应的sector。
优选地,所述根据sector序号映射关系将Flash数据从DMA RAM写入Flash Page的步骤包括:
设置Flash数据写入的起始地址;
根据DMA RAM与Flash Page之间预设的sector序号映射关系,从所述写入的起始地址写入DMA RAM中预定长度的Flash数据至Flash Page。
优选地,所述寄存器还用于对其所标识的sector序号对应的数据进行取反运算。
本发明还提出一种基于DMA映射的Flash数据传输控制装置,包括:
映射关系设置模块,用于根据预设规则设置DMA RAM与Flash Page之间的sector序号映射关系;
数据传输模块,用于根据所述sector序号映射关系以及内置的寄存器进行Flash数据传输。
优选地,所述寄存器为Bitmap寄存器,每个寄存器标识Flash Page中的一个sector;所述寄存器的值标识sector序号对应的数据处于被屏蔽或不被屏蔽状态。
优选地,所述数据传输模块包括:
起始地址设置单元,用于设置Flash数据读出的起始地址;
数据读取单元,用于从所述读出的起始地址读出预定长度的Flash数据;
数据存储单元,用于根据读出Flash数据的sector序号对应的寄存器的值,以及所述读出Flash数据的sector序号与DMA RAM中对应sector序号的映射关系,将相应的Flash数据存储入DMA RAM中对应的sector。
优选地,所述起始地址设置单元,还用于设置Flash数据写入的起始地址;
所述数据存储单元,还用于根据DMA RAM与Flash Page之间预设的sector序号映射关系,从所述写入的起始地址写入DMA RAM中预定长度的Flash数据至Flash Page。
本发明提出的一种基于DMA映射的Flash数据传输控制方法及装置,通过设置Flash Page与DMA RAM之间的映射关系,通过映射关系进行数据传输,同时增加了标识Flash Page中sector的寄存器,让硬件更深层次的参与到整个流程,从而解放了FW的设置,简化了因为小文件读写、按sector管理算法、Flash Page的坏块导致ECC校验错误等等情况导致的需要在一个Page里实现非正常顺序的sector读写操作,或者是对某些sector进行屏蔽处理的FW控制流程,不必再像传统做法那样会被打断几次,提高了操作效率,使得以Sector为基本操作单位的数据读写更具有灵活性;同时还可以根据设定的映射关系实现数据加密,保护数据安全。
具体实施方式
本发明实施例解决方案主要是通过设置Flash Page与DMA RAM之间的映射关系,通过映射关系进行数据传输,同时增加了标识Flash Page中sector的寄存器,以简化FW控制流程,提高了操作效率。
在Flash的实际使用中,大量的小文件读写、page数据部分更新、按Sector管理算法等会导致很多的Page不对齐操作,需要以Sector为操作单位对一个page的数据进行填充补齐,而数据来源则可能是多处,传统的做法是由FW进行大量繁复的设置,流程复杂,控制复杂。
本发明采用新的硬件设计,让硬件更深层次的参与到整个流程,从而解放了FW的设置,简化了流程控制的复杂度。
如图1所示,本发明一实施例提出一种基于DMA映射的Flash数据传输控制方法,包括:
步骤S101,根据预设规则设置DMA RAM与Flash Page之间的sector序号映射关系;
在本实施例中,通过FW设定DMA RAM与Flash Page之间的映射关系(以Sector为最小操作单位),该映射关系FW可控,硬件按照此映射关系进行数据传输,实现sector数据非正常顺序读写,比如倒序、先奇后偶等,而不必再像传统做法那样会被打断几次,从而提高了操作效率。
其中设置映射关系的预设规则可以是动态的,比如由硬件根据算法自动产生;也可以是由FW直接指定某一具体的映射关系。
映射关系的具体设置方法可以为:
将DMA RAM按sector进行分区并编号,和Flash的一个page里的各个sector建立一种一一对应的关系,比如常规的DMA RAM的sector1-2-3-4对应Flash page的sector1-2-3-4,也可以是其它的对应关系,如DMA RAM的sector3-2-4-1对应Flash page的sector1-2-3-4。硬件会根据这一映射关系自动计算每个sector需要存入DMA RAM的地址。
步骤S102,根据sector序号映射关系以及内置的寄存器进行Flash数据传输。
本实施例在硬件中增设一组Bitmap寄存器,每个寄存器标识Flash Page中的一个sector;寄存器的值标识sector序号对应的数据处于被屏蔽或不被屏蔽状态。比如,可以对其设定“0”或“1”用于控制对应的sector数据的DMA传输。该寄存器值的设定可以是FW自由设置或是读取扫描坏块表设定,可以设定“1”表示对应的Sector数据被屏蔽,“0”则表示对应的Sector数据正常操作。在读Flash操作时,被屏蔽的Sector数据将不会被存入DMA RAM。
在本实施例中,根据sector序号映射关系以及内置的寄存器进行Flash数据传输包括:根据sector序号映射关系将Flash数据从Flash Page读出并存入DMA RAM或者根据sector序号映射关系将Flash数据从DMA RAM写入FlashPage。
如图2所示,步骤S102中根据映射关系将Flash数据从Flash Page读出并存入DMA RAM的步骤包括:
步骤S1021,设置Flash数据读出的起始地址;
步骤S1022,从读出的起始地址读出预定长度的Flash数据;
步骤S1023,根据读出Flash数据的sector序号对应的寄存器的值,以及读出Flash数据的sector序号与DMA RAM中对应sector序号的映射关系,将相应的Flash数据存入DMA RAM中对应的sector。
在实际应用中,比如,某次操作需要获取page11的Sector2和Sector4的数据,传统做法是,发一次读命令及设置sector2的起始地址,读出sector2的数据存入DMA RAM sector1,然后再发一次读命令及设置sector4的地址,读出sector4的数据并存入DMA RAM sector2,这样FW需要参与两次,若采用本实施例方法,则只需设定映射关系为DMA RAM的sector3-1-4-2对应Flash page的sector1-2-3-4,然后发送一次读命令及sector0的地址就可以实现上述操作,FW只需要设置一次即可,不必再像传统做法那样会被打断几次,由此提高了操作效率。
如图3所示,步骤S102中根据sector序号映射关系将Flash数据从DMARAM写入Flash Page的步骤包括:
步骤S1024,设置Flash数据写入的起始地址;
步骤S1025,根据DMA RAM与Flash Page之间预设的sector序号映射关系,从写入的起始地址写入DMA RAM中预定长度的Flash数据至Flash Page。
在本实施例中,通过对映射关系的控制,还可以实现数据加密。其中,加密原理为:
在对Flash进行写操作时,以每个page为例,在DMA RAM和Flash Page之间以sector为单位建立一个映射关系,使得数据写入Flash后不是以sector为单位按顺序排列,而是依照设定好的映射关系被打散了,比如,DMA RAM是按照sector1-sector2-sector3-sector4顺序存放,而实际写入Flash之后则可能成为sector2-sector4-sector3-sector1。在对Flash进行读操作时,对于同一个page,映射关系必须和写这个page时所设定的映射关系一样,这样才能保证从Flash读出的数据存放到DMA RAM里后的顺序和之前写入Flash时在DMA RAM里的存放顺序一致。通过上述映射关系的设置,从而实现了对数据的加密处理。
需要说明的是,本实施例中Bitmap寄存器的功能可不限于屏蔽数据,寄存器还可用于对其所标识的sector数据进行其他处理,比如取反运算等等。
本实施例是以Flash的最小存储单位sector的地址进行映射关系的设置,作为映射关系设置方法的扩展,映射关系也可以扩展到在一个block里按page进行映射管理,即在按Block管理时,可以在page之间实现上述类似操作,需要一张更大的映射表,其操作的基本单位为page,按照设定的映射关系,硬件可以代替FW自动计算下一个Page的地址,从而提高操作效率。由于DMA RAM的大小一般就等于一个page,故这种模式下DMA RAM不参与映射。
本实施例相比现有技术具有以下优点:
1.DMA RAM到Flash Page的映射控制方式,可自行设定映射关系,在数据读写方面具有很大的灵活性,如sector屏蔽、sector数据特殊处理、Page补齐操作等。
2.通过这种映射控制可在一定程度上实现数据加密。
3.可以在FW的参与下延伸到在一个Block里对不同Page进行映射控制。
本实施例简化因为小文件读写、按sector管理算法、FLASH Page的坏块导致ECC校验错误等等情况导致的需要在一个Page里实现非正常顺序的sector读写操作,或者是对某些sector进行屏蔽处理的FW控制流程,硬件参与度更高,执行效率高,使得以Sector为基本操作单位的数据读写更具有灵活性,而且还可以通过设置映射关系实现数据加密。
如图4所示,本发明一实施例提出一种基于DMA映射的Flash数据传输控制装置,包括:映射关系设置模块401以及数据传输模块402,其中:
映射关系设置模块401,用于根据预设规则设置DMA RAM与Flash Page之间的sector序号映射关系;
在本实施例中,通过映射关系设置模块401设定DMA RAM与Flash Page之间的映射关系(以Sector为最小操作单位),该映射关系FW可控,硬件按照此映射关系进行数据传输,实现sector数据非正常顺序读写,比如倒序、先奇后偶等,而不必再像传统做法那样会被打断几次,从而提高了操作效率。
其中设置映射关系的预设规则可以是动态的,比如由硬件根据算法自动产生;也可以是由FW直接指定某一具体的映射关系。
映射关系的具体设置方法可以为:
将DMA RAM按sector进行分区并编号,和Flash的一个page里的各个sector建立一种一一对应的关系,比如常规的DMA RAM的sector1-2-3-4对应Flash page的sector1-2-3-4,也可以是其它的对应关系,如DMA RAM的sector3-2-4-1对应Flash page的sector1-2-3-4。硬件会根据这一映射关系自动计算每个sector需要存入DMA RAM的地址。
数据传输模块402,用于根据sector序号映射关系以及内置的寄存器进行Flash数据传输。
本实施例在硬件中增设一组Bitmap寄存器,每个寄存器标识Flash Page中的一个sector;寄存器的值标识sector序号对应的数据处于被屏蔽或不被屏蔽状态。比如,可以对其设定“0”或“1”用于控制对应的sector数据的DMA传输。该寄存器值的设定可以是FW自由设置或是读取扫描坏块表设定,可以设定“1”表示对应的Sector数据被屏蔽,“0”则表示对应的Sector数据正常操作。在读Flash操作时,被屏蔽的Sector数据将不会被存入DMA RAM。
在本实施例中,通过数据传输模块402根据sector序号映射关系以及内置的寄存器进行Flash数据传输,具体包括:根据sector序号映射关系将Flash数据从Flash Page读出并存入DMA RAM或者根据sector序号映射关系将Flash数据从DMA RAM写入Flash Page。
如图5所示,数据传输模块402包括:起始地址设置单元4021、数据读取单元4022以及数据存储单元4023,其中:
起始地址设置单元4021,用于设置Flash数据读出的起始地址;
数据读取单元4022,用于从读出的起始地址读出预定长度的Flash数据;
数据存储单元4023,用于根据读出Flash数据的sector序号对应的寄存器的值,以及读出Flash数据的sector序号与DMA RAM中对应sector序号的映射关系,将相应的Flash数据存储入DMA RAM中对应的sector。
进一步的,起始地址设置单元4021,还用于设置Flash数据写入的起始地址;
数据存储单元4023,还用于根据DMA RAM与Flash Page之间预设的sector序号映射关系,从写入的起始地址写入DMA RAM中预定长度的Flash数据至Flash Page。
本发明提出的一种基于DMA映射的Flash数据传输控制方法及装置,通过设置Flash Page与DMA RAM之间的映射关系,通过映射关系进行数据传输,同时增加了标识Flash Page中sector的寄存器,让硬件更深层次的参与到整个流程,从而解放了FW的设置,简化了因为小文件读写、按sector管理算法、Flash Page的坏块导致ECC校验错误等等情况导致的需要在一个Page里实现非正常顺序的sector读写操作,或者是对某些sector进行屏蔽处理的FW控制流程,不必再像传统做法那样会被打断几次,提高了操作效率,使得以Sector为基本操作单位的数据读写更具有灵活性;同时还可以根据设定的映射关系实现数据加密,保护数据安全。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。