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.

DSP一级boot和二级boot问题

您好:

DSP启动时,如果应用程序很小,就可以不用二级boot了,二级boot中,执行完bootload后,会进入c_int00,初始化c环境,但是

如果只有一级boot,上电后,DMA直接拷贝应用程序到片内程序区,然后执行.我想知道的是,一级boot怎么没有进入c_int00中对c环境初始化?如果没有进入c_int00,应用程序直接执行C程序会有问题吗?谢谢!

  • 你好,我不是很理解你这里的一级boot和二级boot。我来解释一下boot的基本流程:

    1.系统解复位后会根据bootmode管脚的设定进入到对应的boot模式

    2.根据对应的boot模式初始化硬件,例如I2C boot需要初始化I2C总线,EMAC boot需要初始化EMAC相关外设

    3. 如果是DSP为master模式的boot方式,例如I2c, SPI, EMIF等模式,DSP会主动从对应的EEROM或Flash中读取数据,并将数据放置到指定的位置. 如果是slave 模式, EMAC/SRIO/HPI等, 需要host 按照boot的要求加载boottable.

    4. bootloader在完成代码加载后,会跳转到boottable中entry point指定的地址, 通常该地址就是c_int00, 如果是纯汇编的程序, 在生成boottable时要把中断向量表的地址指定过去.

  • Zhan Xiang ,你好:

    我指的一级boot是适用小程序的启动方式,即上电后,DMA控制器自动去FLASH拷贝一定大小的程序(比如6455是1KB)到片内程序区执行,二级boot是用于应用程序大于1KB的时候,需要编写bootload程序,根据boottable去flash拷贝应用程序到片内. 对于一级boot,我们只需要将应用程序烧写到flash中即可,上电后,DMA会将应用程序拷贝到片内执行,这个过程中,没有用到boottable. 我的疑问是,没有用到boottable,就不知道c_int00地址,那么对于用c编写的应用程序,DSP启动后,如何初始化C环境啊?因为c环境初始化是在c_int00中实现的!谢谢!

  • 你指的一级boot是什么?ROM bootloader? 还是你自己的代码?

  • 一级boot就是固化在DSP中的启动程序,不是自己写的,二级boot]是自己写的汇编代码