| 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 |
| bitflips. The U-Boot build system, when configured for the NAND will |
| also generate the image sunxi-spl-with-ecc.bin that will have been |
| generated by that tool. |
| |
| 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. |