Ficara Emilio Pietro Giovanni ~ SPI-file.bin creator for tablet unbricking

The SPI flash... SPI means Serial Peripheral Interface and "flash" is a particular type of memory, capable to be written (and rewritten) in fast mode and able to retain informations even if power supply is removed, so this kind of memory is part of the "non-volatile" devices.

What's the purpose of SPI flash in our Android Tablet ? It's like the (ancient) floppy disk in old computers. The floppy, in VERY old computers, was the device containing the Initial Program Loader, the first program the processor runs to start the whole system. In our tablets, the processor (I'm speaking about the WM8650, in this case) tries to load a boot program from this device. The SPI flash memory is small and simple device. Usually has 8 pins (contacts) and isn't too miniaturized... it's still at "human" dimensions and this is the reason we can remove it from the circuit, reprogram and resolder it on place. If your tablet is "bricked", you can immediatly recover, simply restoring a valid boot program in it.
The hardware and the procedures for rewriting the SPI flash have been described in a very good article :) by me on another page of my site, so, hunt on other pages if interested in, but... what's stored in the SPI flash of our tablet ?

There are two programs: the W-load and the U-Boot. The U-Boot can execute commands you supply via serial terminal or you have stored in the microSD, by means of the wmt_scriptcmd script file. U-Boot is the tool for handle the very low-level of your tablet. Btw, the NAND flash is another basic component of your system, 'cause is your device's HARD DISK. As in very old computers, the floppy loads the system skeleton and then the Hard Disk starts the programs with usual user interface (or GUI when is Graphical User Interface).

Ok, we turn ON the button, the processor starts, executes the program written in the W-load section. The U-boot then starts the system that's on NAND memory and you have your tablet working.

When you try to unbrick your tablet rewriting the SPI flash, you MUST use the right version of U-Boot and W-Load, 'cause if you choose a wrong version, all the process can't start. A VERY important section (usually don't mentioned) is the W-load program. There is a particular version for any RAM arrangment in your tablet. Not all the RAMs are the same: even if your "global" ram size is a certain number of MB, the rams can be arranged in different ways. For different arrangements, there are different W-loads.

How can I understand what's my specific W-Load ?
You can take a look on the serial output that comes out from your tablet at power on. The serial interface is a VERY powerful instruments and I highly recommend to you to purchase or build one for modding and better understanding your tablet.
Look at this example:
WonderMedia Technologies, Inc.
W-Load Version :
wloader finish

U-Boot 1.1.4 (Aug 24 2011 - 10:14:10)
WonderMedia Technologies, Inc.
U-Boot Version : UPDATEID_0.
U-Boot code: 03F80000 -> 03FC3190  BSS: -> 03FCD724
boot from spi flash.
SF0: ManufID = 37, DeviceID = 3013 (Missing or Unknown FLASH)
     Use Default - Total size = 8MB, Sector size = 64KB
There are some very useful infos: these are W-Load version and UPDATE_ID, U-Boot Version and UPDATEID. With such informations you can easily "build" your own SPI flash and it will be EXACTLY the one that fits your tablet. You also have infos on which type of SPI flash is mounted in the tablet. In the example before, the memory has ID 0x373013 (that is unknown to the system, so it starts with default values that are good for all memories).

How to build your BIN file for writing a new SPI flash.

Usually, the SPI flash has 512KB (kilobytes) space, but if you look on the datasheet it's called a 4 megabit memory; that's exactly the same, 'cause 4Mbits = 512KBytes.
In our tablets, the SPI flash memory is divided into 2 areas: the first, starting at address 0x00000 and ending at 0x6FFFF (not fully used) is the U-Boot program; the second, starting at address 0x70000 and ending at 0x7FFFF (almost fully used) is the W-Load program.

I wrote a small program that can build for you the my-spi.bin file, the BIN file of 512KB you need to re-flash your SPI memory. The program is written in FreeBasic (under Windows), and doesn't need for installation. Just decompress the .ZIP you can download ->here<- in a folder, for example spi-flash and you have the executable to run.
In order to create your my-spi.bin file, you need, obviously, for the submentioned files u-boot.bin and w-load.bin. So, go to the FirmwareInstall folder of your Uberoid upgrade folder (or to the same folder of original rom) and copy the u-boot.bin you find there in the new created folder. For the w-load, you have (often) different file names that all starts with w-load prefix and finishes with .bin suffix, but the right file is the one has inside the same signature you have read in the serial terminal (in our example is UPDATE_ID_1_4_4_0_2_256MB_0150001). If you are in doubt, simply try copying all of them in your new folder and then rename it, one at a time, in w-load.bin. The program is "stupid" and looks for input: u-boot.bin and w-load.bin and produces as output: my-spi.bin .
When you start the buildspi.exe, the program generates the output file AND SHOWS to video the actual versions of U-Boot and W-Load programs; if some of that versions isn't the one you need for, simply load another and try again.

Once the file is created and the versions are both identical to the ones you read from serial terminal at the device boot, you have the right SPI file to program into the chip.
In the picture below, you can have a look to a working program screenshot. Hope this will help you.