This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C5505 IIC接口 EEPROM启动问题

5505启动大于64K程序,使用IIC接口EEPROM

问题:使用HX55工具可以正常启动(小于64K),跑;但是(大于64K)用外部存储器则无法启动,帮分析一下看哪里有问题?

目前做过的验证,IIC读写正常,用仿真器跑也正常,脱机运行就跑不起来了,写进去的启动程序读取出来对比也没问题,上电时序没问题,

还有一个现象是AR寄存器地址每次都会有一个0x200000;

下面是部分原理图

  • I2C EEPROM boot mode最大支持到64KB,在bootloader手册上有说明。

    The device uses 2 bytes for internal addressing (up to 64kB).

    http://www.ti.com/lit/an/sprabd7c/sprabd7c.pdf

  • 非常感谢!

    我们目前必须用到大于64K的EEPROM boot mode,那还有其他办法解决这一问题不,

    只能我们自己写,或者找个替代方案?

    因为按照手册的介绍SPI的也不能大于64K。

  • 可以写个二次bootloader,ROM bootloader先去加载并运行这个二次bootloader,二次bootloader再去加载大于64K的应用程序。

  • 我编写了个二次boot程序,试用汇编编写的,在我被boot工程中的0x100--0x300地址RAM中,工程其他程序都在0x300地址以上,使用debug该工程,把PC指向0x100,boot我flash中的程序没有问题,我的flash前0x300存储的是使用hex55工具生成的boot.bin,实际脱机查看也可以把boot程序搬移到0x100-0x300地址的RAM区中,但是脱机后无法将我的程序搬移到我的地址中,debug模式下可以成功搬移,脱机直接debug发现,程序被搬移到了0x20200地址上,实际搬移地址应该是0x200,因为我使用的是AR0寄存器,该寄存器在上电的时候就有一个高位的0x200000存在,所以搬移失败,我的搬移计数器,也是在AR4上面,每次减一,但是无法减到0,因为高位也有个值,使用bclr指令无法清空ar寄存器,我想知道怎么样消除这个高位的值,使用什么指令?或者我的流程还有什么问题?

  • 你好:

        我们EEPROM的二次Boot启动程序编写完毕,程序可以起来,SPI、iic等外设读取写入程序都可以正常的boot,包括串口也可以正常的boot,但是使用DMA发送的串口程序在debug模式下运行正常,boot之后串口发送失败,正常串口就可以boot,使用仿真器连接查看程序一直在循环查询dma发送是否完成的while(1)等待中,我开了个定时器等待到时间复位dma和串口都无法正常Boot,但是连接仿真器后直接点击运行,就可以正常boot,证明程序搬移都是正确的,只是在仿真模式下dma发送正常,在脱机模式下dma发送失败,连接仿真器后可以观察到dma寄存器已经置位了发送完成标志,也就是说,dma模块在连接仿真器后就工作正常了,请问这个问题要怎么解决,是dma不能脱机运行吗?

  • 我们EEPROM的二次Boot启动程序编写完毕,程序可以起来,SPI、iic等外设读取写入程序都可以正常的boot,包括串口也可以正常的boot,但是使用DMA发送的串口程序在debug模式下运行正常,boot之后串口发送失败,正常串口就可以boot,使用仿真器连接查看程序一直在循环查询dma发送是否完成的while(1)等待中,我开了个定时器等待到时间复位dma和串口都无法正常Boot,但是连接仿真器后直接点击运行,就可以正常boot,证明程序搬移都是正确的,只是在仿真模式下dma发送正常,在脱机模式下dma发送失败,连接仿真器后可以观察到dma寄存器已经置位了发送完成标志,也就是说,dma模块在连接仿真器后就工作正常了,这个问题帮分析一下要怎么解决,是dma不能脱机运行吗?

  • 我也遇到同样的问题,EEPROM最大只支持64KB的程序,而我的程序有140KB左右,

    想问一下你们二次boot的程序是怎么写的,有参考资料不,谢谢

  • boot后外设时钟要重新使能。见datasheet里的下面说明:

    在你的main里面重新使能一下。

  • 不好意思没有参考例程:

    其实很简单总结就是这句话。

    我是自己汇编配的寄存器。

    二次bootloader,ROM bootloader先去加载并运行这个二次bootloader,二次bootloader再去加载大于64K的应用程序。