烧写uboo到BCM,保证可以正确启动(bootcode能够读取uboot,然后从uboot启动)的条件:
1.uboot里面去掉自我reload的那段代码,因为不是从Nor启动,所以不需要那段reaload uboot自身的代码。
2.一定是mode 0x33 模式烧写和boot启动。
3. 烧写uboot,注意第一个页,即512的数据,要少些两遍,到Page 0 和page 1,也就是,
(1)可以用mode 0x33,将整个uboot烧写到0x800开始的位置,然后再将第一页的512数据烧写到0 的位置。
或者
(2)制作一个新的uboot,复制前面512字节到uboot的开头即可。将此新的uboot用mode 0x33烧写到0的位置即可。
不过,后来经过测试,实际只写原始的uboot到0x800,即从第一个页(2048处)开始写,就可以了,这也和我最开始曾经想到的是一致的。只是由于bootcode已经访问一次了,所以,要写在其第二页的位置。
4.烧写uboot过程中的write buffer函数中,除了ECC要计算正确之外,还有个 mark private ,即在每个16字节的oob的5的位置,要设置成0,因为bootcode要来读uboot,只有发现这个位是0,才表示属于私有数据,才会继续读取uboot,否则,bootcode无法正确读取uboot,无法正常启动。