情况是这样的,6455从I2C启动,I2C运行的是二次bootloader代码,二次bootloader代码再通过McBSP(配置SPI主)方式将真正的运行代码拷贝至L2,然后才运行该真正的运行代码。现在有几个问题:
1. I2C启动的代码不能超过0x10000,虽然现在24c1024是0x20000大小,但当I2C启动代码超过0x10000后程序无法启动。我判断是超过0x10000后I2C地址不再是0x50而是0x51,所以启动失败。是这样的吗?可以怎么操作是I2C启动支持到超过0x10000大小?
2. 除了Flash的二次bootloader代码TI提供参考之外,包括本论坛在内一直没有发现有其它版本的二次bootloader程序。6455数据手册和Bootloader手册都是蜻蜓点水一样说Second Stage Bootloader可以从诸如EMAC/Ethernet启动,感觉很简单,但无从下手。有没有类似的程序?
3. 自己写二次bootloader代码的话,是不是二次bootloader代码可以像我们普通的CCS工程(基于C语言)一样,初始化PLL和McBSP,然后搬移到L2。但后面怎么切换到新搬移的程序运行?或二次bootloader代码非得要像Flash的bootloader一样基于汇编asm(Flash的bootloader在代码搬移后由于未初始化C语言环境所以一个跳转指令就进入中断0了),但写汇编这样可就麻烦大了?
各位有没有什么高见?
Tony Tang:
Zongfu Huang1. I2C启动的代码不能超过0x10000,虽然现在24c1024是0x20000大小,但当I2C启动代码超过0x10000后程序无法启动。我判断是超过0x10000后I2C地址不再是0x50而是0x51,所以启动失败。是这样的吗?可以怎么操作是I2C启动支持到超过0x10000大小?
是因为bootloader里用的2byte I2C寻址, 即最大64Kbyte.
http://www.ti.com/lit/ug/spruec6g/spruec6g.pdf
Zongfu Huang2. 除了Flash的二次bootloader代码TI提供参考之外,包括本论坛在内一直没有发现有其它版本的二次bootloader程序。6455数据手册和Bootloader手册都是蜻蜓点水一样说Second Stage Bootloader可以从诸如EMAC/Ethernet启动,感觉很简单,但无从下手。有没有类似的程序?
二级boot是个通用概念,至于用什么接口,在二级boot里实现对那个接口的操作就行了。
http://www.ti.com/lit/an/spraae9/spraae9.pdf
Zongfu Huang3. 自己写二次bootloader代码的话,是不是二次bootloader代码可以像我们普通的CCS工程(基于C语言)一样,初始化PLL和McBSP,然后搬移到L2。但后面怎么切换到新搬移的程序运行?或二次bootloader代码非得要像Flash的bootloader一样基于汇编asm(Flash的bootloader在代码搬移后由于未初始化C语言环境所以一个跳转指令就进入中断0了),但写汇编这样可就麻烦大了?
可以。只要不是与应用共用一个工程,就可以当独做成C工程。