Flash Extractor
© Soft-Center
About     Shop     Downloads     Manual     Library     Forum     Services     Contacts
Translation Tables   Search  Register  Log in
This topic is locked: you cannot edit posts or make replies.
Author Message
jeremyb



Joined: 09 Dec 2008
Posts: 1051
Location: RecoverMyFlashDrive.com Fairfield, CT, USA

PostPosted: Wed Mar 25, 2009 8:16    Post subject: Translation Tables
Reply with quote

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.

Simple Translator
Block Size: Block Size
Sector: Sector Geometry
Swap: Byte Swap (change endianness)
Banks: 0x1230000 / 11 / 22 / Comment

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

PostPosted: Thu Mar 26, 2009 9:06    Post subject:
Reply with quote

Example Translation Table
Block Size = 0x42000
Block 1 = 0x0101
Block 2 = 0x0664
Block 3 = 0x005D

Block 1 Address
0x0101 x 0x42000 = 0x4242000

Block 2 Address
0x0664 x 0x42000 = 0x1A5C8000

Block 3 Address
0x005D x 0x42000 = 0x17FA000

Example Header (Differs by Controller Make/Model)
0x5A54 [0:1] = Translator Marker
0x0000 [2:3] = Bank Number (Bank #0)
0x0090 [10:11] = Version
translator.gif
Display posts from previous:   
This topic is locked: you cannot edit posts or make replies. All times are GMT + 4 Hours
Page 1 of 1

 

Last added
Monolith Micro SD_76   98 3c 99 a3   1x4 AU6989NHL-2   98 d7 98 b2   1x1 SM3281L-AB   45 3c 98 b3   1x1   v5 Monolith USB 68   ec 1e 98 bf   1x1 SM3265P-AC   45 3e 98 03   1x1 SM3281N-AB   45 48 9a b3   2x2 Monolith Micro SD_75   32 2c c3 08   1x1 Monolith Micro SD_74   45 3e 98 b3   1x4   Ref AU6989SNHL-2   45 de 98 92   1x1 SM3261L-AB   45 de 98 92   1x1
News
01.02.2024 Save FE key
23.09.2022 The End
11.11.2021 Legs for NR
16.08.2021 Sector Number Slow
15.07.2021 New drivers
© Soft-Center ltd.