2017-02-27 17:22:13 +00:00
|
|
|
Allwinner NAND flashing
|
|
|
|
=======================
|
|
|
|
|
|
|
|
A lot of Allwinner devices, especially the older ones (pre-H3 era),
|
|
|
|
comes with a NAND. NANDs storages are a pretty weak choice when it
|
|
|
|
comes to the reliability, and it comes with a number of flaws like
|
|
|
|
read and write disturbs, data retention issues, bloks becoming
|
|
|
|
unusable, etc.
|
|
|
|
|
|
|
|
In order to mitigate that, various strategies have been found to be
|
|
|
|
able to recover from those issues like ECC, hardware randomization,
|
|
|
|
and of course, redundancy for the critical parts.
|
|
|
|
|
|
|
|
This is obviously something that we will take into account when
|
|
|
|
creating our images. However, the BROM will use a quite weird pattern
|
|
|
|
when accessing the NAND, and will access only at most 4kB per page,
|
|
|
|
which means that we also have to split that binary accross several
|
|
|
|
pages.
|
|
|
|
|
|
|
|
In order to accomodate that, we create a tool that will generate an
|
|
|
|
SPL image that is ready to be programmed directly embedding the ECCs,
|
|
|
|
randomized, and with the necessary bits needed to reduce the number of
|
2018-10-23 17:20:30 +00:00
|
|
|
bitflips. The U-Boot build system, when configured for the NAND (with
|
2019-10-03 17:50:03 +00:00
|
|
|
CONFIG_MTD_RAW_NAND=y) will also generate the image sunxi-spl-with-ecc.bin
|
2018-10-23 17:20:30 +00:00
|
|
|
that will have been generated by that tool.
|
2017-02-27 17:22:13 +00:00
|
|
|
|
|
|
|
In order to flash your U-Boot image onto a board, assuming that the
|
|
|
|
board is in FEL mode, you'll need the sunxi-tools that you can find at
|
|
|
|
this repository: https://github.com/linux-sunxi/sunxi-tools
|
|
|
|
|
|
|
|
Then, you'll need to first load an SPL to initialise the RAM:
|
|
|
|
sunxi-fel spl spl/sunxi-spl.bin
|
|
|
|
|
|
|
|
Load the binaries we'll flash into RAM:
|
|
|
|
sunxi-fel write 0x4a000000 u-boot-dtb.bin
|
|
|
|
sunxi-fel write 0x43000000 spl/sunxi-spl-with-ecc.bin
|
|
|
|
|
|
|
|
And execute U-Boot
|
|
|
|
sunxi-fel exe 0x4a000000
|
|
|
|
|
|
|
|
On your board, you'll now have all the needed binaries into RAM, so
|
|
|
|
you only need to erase the NAND...
|
|
|
|
|
|
|
|
nand erase.chip
|
|
|
|
|
|
|
|
Then write the SPL and its backup:
|
|
|
|
|
|
|
|
nand write.raw.noverify 0x43000000 0 40
|
|
|
|
nand write.raw.noverify 0x43000000 0x400000 40
|
|
|
|
|
|
|
|
And finally write the U-Boot binary:
|
|
|
|
nand write 0x4a000000 0x800000 0xc0000
|
|
|
|
|
|
|
|
You can now reboot and enjoy your NAND.
|