The present disclosure relates to a mass storage control technique, and particularly to a wear-leveling NandFlash memory reading/writing method.
Most of existing Nandflash reading/writing drivers are set up to accommodate a common file system, for example, support an almost unlimited number of files to be written into a memory, and a file reading/writing format is also a preparation format, and thus such file system drivers often require more hardware and software resources. For instance, a Linux operating system with a YAFFS file system is a well-known, excellent file system capable of perfectly supporting a Nandflash memory. Porting this system requires that a capacity of a RAM is usually one percent of that of the memory. For example, the capacity of the Nandflash memory is 1 GB, the required capacity of the RAM is 10 MB. In addition, a powerful CPU is also required, or else cannot meet requirements for file reading/writing speeds.
There is a class of application systems composed of embedded systems, such as long-term data acquiring and recording instruments, which are long in running time, less in files, and large in capacity of a single file when being started up. Resources of this class of systems are relatively stressed. For instance, the running speed of the CPU reaches tens of MHz, and the capacity of the RAM reaches tens or hundreds of KB. As a result, common standard file drive systems such as a YAFFS may not be ported. A large-capacity data recording system typically uses a NandFlash as a data memory. This memory is subjected to a writing operation with a block as a basic unit, and has a disadvantage of limited number of writing operations, such as 5000 times to 10000 times. At the time of delivery, there may be bad blocks that have already been marked (other blocks of the memory with bad blocks can be still subjected to writing and reading operations), and new bad blocks may be generated in a writing process. Accordingly, when such a memory is read/written, it is necessary to identify the bad block, avoid the bad block, and equalize the writing operations (as much as possible to ensure that all the blocks are consistent in number of the writing operations) to ensure the lifetime of the entire memory.
People have designed a variety of file systems to support reading and writing of the NandFlash, a basic idea of which is to create a mapping table and a data buffer, regularly update a record of the number of the writing operations and a record of bad blocks, and in this way, adjust a position of a block where data is written. When data starts to be written, the data is buffered in the buffer, and then written into the NandFlash after the preceding determination is completed.
In order to solve the above technical problem, the disclosure provides a wear-leveling NandFlash memory reading/writing method capable of identifying a bad block, avoiding the bad block, and equalizing writing operations to ensure that all the blocks are consistent in number of the writing operations so as to guarantee the lifetime of the entire memory.
A technical solution of the present invention is as follows: a wear-leveling NandFlash memory reading/writing method specifically includes:
a writing step, including the following sub-steps:
(1a) creating a new file information table in a NandFlash address space, and reading all other file information tables to determine a writing starting address of a new file;
(2a) determining whether the writing starting address of the file is in a starting address of a block or not, if the writing starting address of the file is in the starting address of the block, erasing it, determining a return status of an erasure operation; if an error is returned, indicating that this block is a bad block, finding a block in a swap area to replace it, and updating a bad block registration table;
(3a) storing to-be-written data into a data buffer of a memory, if content of one page has been stored sufficiently, writing it into the memory (filled with one page once), determining a return status of a writing operation, if an error is returned, indicating that the block where this page is located is a bad block, finding a block in a swap area to replace it, updating the bad block registration table, and copying contents of a current page and its previous page of the bad block into a new block;
(4a) after the pages are written successfully, updating the file information table, which includes starting and ending addresses of file storage, file sizes and file updating time;
(5a) repeating step (3a) until a user ends the writing operation, checking whether any remaining data exists in the data buffer or not, if any remaining data exists in the data buffer, writing all the data in the buffer into the memory (contents, which are not filled completely, of the buffer are filled with specific bytes); and
(6a) updating the file information table, and ending the file writing operation; and
a reading step, including the following sub-steps:
(1b) reading the file information table, and determining a starting address and an ending address of file storage;
(2b) determining whether the starting address is an address of a new block or not, if the starting address is the address of the new block, executing step (3b), and otherwise, executing step (4b);
(3b) determining whether a to-be-read block is a bad block or not, if the to-be-read block is a bad block, finding the address of its replacement block;
(4b) reading a page of data once, and determining whether the file is completely read or not according to the file information table, if the file is completely read, ending, otherwise, continuing;
(5b) determining whether contents of blocks of all the pages are read or not, if the contents of blocks of all the pages are not read, continuing to perform step (4b) with the next page, otherwise executing step (6b); and
(6b) continuing to perform step (3b) with the next block.
Further, the method further includes a file deletion operation, in which the file deletion operation is to delete the record of the to-be-deleted file in the file information table. If there are files stored in front the address of the to-be-deleted files, sequentially copy those files behind the end starting address of the last file, that is, ensure that area addresses where file contents are stored in the data area are coherent.
Further, the method further includes a file addition writing operation, which continues writing at the tail of the file. If there are no other files behind the additionally written file, directly continues the writing, and if there are other files behind the additionally written file, firstly executes a file movement process to move the additionally written file to the tail-most end of a used storage space, and then continues the writing at the tail of the file.
Further, the physical storage space of the NandFlash memory is divided into a storage information area, a file information area, a data area and a swap area;
the storage information area is configured to store a bad block registration swap table and is located behind the file information area, wherein the information storage area is divided into a plurality of small blocks, each of which can store a piece of completely stored information and is used in turn;
the file information area is configured to store a bad file information table and is located in the first several blocks of a physical address of the memory, wherein the file information area is internally divided into a plurality of small blocks, each of which can store a piece of complete file information and is used in turn;
the data area is configured to store a data content itself and is located in the middle of the physical address of the memory; and
the swap area is configured to swap a bad block and is located in the last several blocks of the physical address of the memory, wherein if a certain block in the data area can not be written, it is replaced with a block in the swap area.
The present invention has advantageous effects that due to the adoption of the above technical solution, the method of the present invention has characteristics of low computational and small RAM cost, is suitable for the application scenario like operating a single file for a long time with an imbedded system with low cost and poor hardware resource, and can provide a complete file system solution.
Embodiments of the present invention will be further described below with reference to accompanying drawings and specific embodiments.
As shown in
a writing step, including the following sub-steps:
(1a) creating a new file information table in a NandFlash address space, and reading all other file information tables to determine a writing starting address of a new file;
(2a) determining whether the file writing starting address is in a starting address of a block or not, if the writing starting address of the file is in the starting address of the block, erasing it, determining a return status of an erasure operation; if an error is returned, indicating that the block is a bad block, finding a block in a swap area to replace it, and updating a bad block registration table;
(3a) storing to-be-written data into a data buffer of a memory, if content of one page has been stored sufficiently, writing it into the memory (filled with one page once), determining a return status of the writing operation, if an error is returned, indicating that the block where this page is located is a bad block, finding a block in a swap area to replace it, updating the bad block registration table, and copying contents of a current page and its previous page of the bad block into a new block;
(4a) after the pages are written successfully, updating the file information table, which includes starting and ending addresses of file storage, file sizes and file updating time;
(5a) repeating step (3a) until a user ends a writing operation, checking whether any remaining data exists in the data buffer or not, if any remaining data exists in the data buffer, writing all the data in the buffer into the memory (contents, which are not filled completely, of the buffer are filled with bytes, such as hexadecimal bytes);
(6a) updating the file information table, and ending the file writing operation; and
a reading step, including the following sub-steps:
(1b) reading the file information table, and determining a starting address and an ending address of file storage;
(2b) determining whether the starting address is an address of a new block, if the starting address is the address of the new block, executing step (3b), and otherwise, executing step (4b);
(3b) determining whether a to-be-read block is a bad block or not, if the to-be-read block is the bad block, finding the address of its replacement block;
(4b) reading a page of data once, and determining whether the file is completely read or not according to the file information table, if the file is completely read, ending, otherwise, continuing;
(5b) determining whether contents of blocks of all the pages are read or not, if the contents of the blocks of all the pages are not read, continuing to perform step (4) with the next page, otherwise executing step (6); and
(6b) continuing to perform step (3b) with the next block.
As shown in
the storage information area is configured to store a bad block registration swap table and is located behind the file information area, wherein the information storage area is divided into a plurality of small blocks, each of which can store a piece of completely stored information and is used in turn;
the file information area is configured to store a bad file information table and is located in the first several blocks of a physical address of the memory, wherein the file information area is internally divided into a plurality of small blocks, each of which can store a piece of complete file information and is used in turn;
the data area is configured to store a data content itself and is located in the middle of the physical address of the memory; and
the swap area is configured to swap a bad block and is located in the last several blocks of the physical address of the memory, wherein if a certain block in the data area can not be written, it is replaced with a block in the swap area.
As shown in
As shown in
While one embodiment of the present invention has been described in detail, the foregoing is merely illustrative of a preferred embodiment of the present invention and is not to be construed as limiting the scope of the present invention. Any changes and modifications made in accordance with the scope of the present application should be within the scope of the present invention.
Number | Date | Country | Kind |
---|---|---|---|
201610838881.3 | Sep 2016 | CN | national |