1、检查硬件是不是支持,例如,如果需要ECSPI-1,那么硬件必须按照Table 8-25. SPI IOMUX Pin Configuration 中第一列的引脚进行连接。上电时,如果是选择的ECSPI-1启动,那么ROM代码会把引脚多路按照Table 8-25定义的alt进行设置(这句是推理的,哈哈)。
2、Fusemap 不要随便写入呀,貌似只能写一次,是产品化的时候用的,要是调试就把021bc450 021bc460写得不能改了,那么久悲剧了,换片子
021bc450: 00000000 00000000 00000000 00000000 ................ 【控制字决定了启动的CFG】
021bc460: 00000000 00000000 00000000 00000000 ................ 【BT_FUSE_SEL值的确定】
3、启动按照下面顺序进行排查
a)启动的mode
mode根据BOOT_MODE1 BOOT_MODE2两个硬件引脚确定的,其状态可以通过只读寄存器只读SRC_SBMR2 BMOD[1:0] 进行查看
b)eFUSEs- BT_FUSE_SEL
这个 BT_FUSE_SEL值可以通过寄存器021bc460确定,默认此值为0,0表示GPIO状态可以overwrite fusemap中BOOT_CONFGx的值,具体哪些会overwrite,参考Table 8-22. Serial ROM Boot eFUSE Descriptions 中GPIO列是否为Y。
c)确定BOOT_CONFGx的值,在调试过程中,一般使用的是internel mode,BT_FUSE_SEL=0, 那么这个BOOT_CONFG1-4的值可以通过GPIO进行更改,最终的值是通过只读寄存器SRC_SBMR1进行反应的。
d)spi有个2字节 3字节地址的配置BOOT_CFG4[3],这个也可以GPIO overwrite,这个根据实际spi flash需要的进行设置,2字节能访问spi的64k空间,3字节能访问spi的16M空间。
e)uboot编译和镜像的制作,按照spinor编译,镜像预留前面的1k字节,其他头部编译已经做好了
具体的格式可以参考
uboot.imx生成 IMX6Q的uboot.imx文件解析
参考:
i.MX 6Dual/6Quad Applications Processor Reference Manual, Rev. 2, 06/2014