openwrt编译生产的sysupgrade.bin文件是一个升级文件,无法直接提供给工厂进行nand flash烧录使用。因为flash的每一个page是由data+ecc组成的,烧录的时候需要一起烧录,但是sysupgade.bin是原始data内容,没有ecc。
1、ECC的大小和内容
1.1 flash page差异
第一步我们需要先确认主CPU支持哪些类型的nand flash,比如mt7621手册上的bootstrap写明,支持的不通page。
比如我们选择的是MX30LF1G28AD这个nand flash,芯片手册的features写明了是2048+128,所以硬件电路必须是10(1010)。
1.2 芯片差异
知道了flash的page大小之后,还有根据芯片手册的要求进行计算ECC内容,不同芯片描述不一样,比如mt7621的芯片要求,如下:
- 原本flash芯片虽然是2048+64,但是mt7621要求的是512+16,所以实际每隔512字节需要填充16字节的ECC到后面。
- 原本flash芯片虽然是2048+128,但是mt7621要求的是512+28,所以实际每隔512字节需要填充28字节的ECC到后面;到一个page的最后填充剩余的16字节FF。
但是mt7620的芯片就没有这个要求,就是按标准的flash page要求即可。
2、填充ECC
增对mt7621,mtk官方提供了BCH工具用来生产追加ecc后的文件。
命令如下:
USAGE: ./BCH ENC|DEC PAGE_SIZE SPARE_SIZE input_file output_file
SPARE_SIZE 64/128/224
PAGE_SIZE 2048/4096
example: ./BCH e 2048 64 roger_image linux_4bitECC.bin
对于mt760就是标准算法
example : ./mt7620nand 64 uboot.img
Note : 64 means spare area size, if the spare area size is 128, should change it 128