Joined: 09 Dec 2008 Posts: 1051 Location: RecoverMyFlashDrive.com Fairfield, CT, USA
Posted: Wed Mar 25, 2009 8:16 Post subject: Translation Tables
A translation table is an array of block numbers used by the controller to map logical to physical blocks on the NAND chip. Typically a controller which doesn’t store block numbers in the SA will use translation tables. Each block number is multiplied by the block size to locate the address in NAND. Tables may be stored in fixed locations or contained in a bank table which contains the block number of the table.
Translation table design varies by controller. Table updates are usually made to the next available page in a block. Some contain a marker and version number before the block number array, others only contain the block number array. Generally the last written page in the block is the current translation table. Most translation tables use a 16-bit block number array. Depending on the endianness of the controller the number may be swapped (ie: 0xabcd, 0xcdab).
To find the first translation table search for the FAT header then divide the NAND address by the block size and search for that number (hex). The block number should appear in the first 16 bytes of the sector (possibly the first byte), if you don’t find anything try changing the endianness (ie: 0x00ab -> 0xab00). Translation tables look like FAT16 tables, if you find such a table use your discretion to its design, each controller manufacture/model is different. Use the Virtual Translator to assemble a few blocks, if the data appears sane use the Simple Translator.
0x1230000 = Table Address, use -1 if the table isn’t found.
11 = Offset in the table to the block array
22= Number of records in the table (block array)
Comment = Comments
jeremyb
Joined: 09 Dec 2008 Posts: 1051 Location: RecoverMyFlashDrive.com Fairfield, CT, USA