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.

关于SRIO BOOT与I2C BOOT的问题



您好!

最近两天看这两种加载方式,有两个问题不太理解,望解答,谢谢。

1. 上电后,要对某些寄存器或者其他参数进行修改,是否只有通过I2C BOOT的方式,用EMIF BOOT方式行吗?如果只有通过I2C BOOT的方式,原因是什么呢?

2.SRIO BOOT方式是否都要结合I2C BOOT方式,因为SRIO BOOT方式下,上电后Device ID被默认配置成0xFF或者0xFFFF,如果另一个端点也是DSP,那Device ID不是重合了。如果要改Device ID,是否只有先通过I2C BOOT方式修改,修改后再进入SRIO BOOT模式。

  • 您好,

    1. 可以通过读取bootpin及parameter table的方式修改寄存器等相关参数,但是由于bootpin是有限的,所以可修改的参数是有限;如果通过parameter table方式的话,可修改的参数更多,更加灵活,但是此时需要通过I2C boot进行二级加载。

    2. SRIO boot可以直接加载,但是如上所说,如果bootpin方式满足不了,就要通过I2C进行二级加载。

  • 你好!

    还想问一下:

    1. SRIO BOOT模式下,固化在dsp里面的Bootloader程序如何知道存储boot table 设备的ID号?

    2. 对于I2C Boot引导SRIO 你所说的parameter table是否是指table3-2与table3-21的组合(即table3-21 offset12以后的数据由table3-2替代)

  • 补充说明一下,table3-2和table3-21是bootloader user guide(sprugy5)这篇文档中的。

  • 您好!

    今天又想到两个问题,请一并作答,谢谢。

    1、SRIO BOOT这种方式下 ROM bootloader只会搬boot table,而I2C BOOT这种方式下ROM bootloader会搬boot parameter table、config table和boot table,是这样吗?

    2、I2c用于二次加载(SRIO)时,第1阶段用config table修改相应寄存器的值,第2阶段搬boot table,第2阶段的parameter table里参数BOOTMODE应配制成2(SRIO BOOT),option应配制成1(boot table),BOOT DEV Addr应配置成存放boot table的首地址,整个过程有两个parameters table,第1阶段搬parameter table,用于搬config table,第2 阶段搬parameter table,用于搬boot table,这样理解正确吗?

  • Ally 你好:

    问题1:

    boot parameter talbe是所有boot都需要的,它能规定各种boot的配置;

    而当boot parameter table被顺利配置之后,各种boot模式就采用自己的方法来加载。SRIO就是采用发SRIO报文的方式,PA就采用Ethernet报文的方式,I2C就是采用boot table的方式。

    而config table就是在当I2Cboot时配置某些寄存器用的,一般无特殊需求可不用。

    问题2:

    我不是很理解,你的意思,但是我可以简单的归纳下这个方式的原理:

    首先配置I2C boot Parameter table,启动I2C boot,通过I2C boot table加载一段应用代码,这段代码的的作用就是使用一个SRIO 的boot parameter table替换掉你的I2C boot parameter table。

    由于当代码运行起来后,I2C加载已经成功了,所以这时候替换不会有任何问题。

    替换完成后,直接将代码的PC指针指向boot ROM的起始位置,这时又开始了boot过程。由于这时已经是SRIO的boot,用的也是SRIO的parameter table,所以能按照正常的SRIO boot流程走。

    谢谢!

  • King Wang 你好!

    感谢回复。

    boot parameter table在第一次加载中是由Rom Bootloader从外面存储空间搬入内部RAM的吗?

  • I2C等的boot parameter table都是ROM bootloader从外部空间搬进去的。其他的EMAC和SRIO都是在ROM里面自带的table,不需要写的。

  • King Wang

    你好!

    感谢你的回复,对于第二个问题,有个问题没想明白。I2C加载完成SRIO parameter table替换掉I2C boot parameter table过后,你说这时已经 SRIO boot方式,为什么呢,外部引脚BootMode[2:0]上的配置还是I2C boot模式啊。rom bootloader不是都是先读取DEVSTAT寄存器的值来决定boot模式吗?外部引脚上的配置没改,这个寄存器的值不会改吧

  • Ally,

    外部管脚定义的是启动时的boot模式,只在上电瞬间采样到DEVSTAT并使用一次,我们一般叫一级boot。在一级boot设置为I2C模式下,三种可能的情况:

    1. I2C中是boot table, 直接可以从I2C加载并运行程序。一般放客户定制化的二级bootloader。

    2. I2C中是boot parameter table,一般用于配置下面将进入的boot模式并配置相应的参数。比如可以配置下一步为EMAC boot(Keystone bootloader手册,Table 3-19 Boot Parameter Table Format, offset 4),同时配置EMAC地址端口等等信息。这比直接的EMAC boot增加了灵活性。

    3. I2C中是Config Table, 用于配置寄存器然后进入下一个参数表。比如我们可以用boot parameter table以比较高的抽象来配置EMAC特性,也可以直接进行寄存器配置,就更加的细节但是难度也大一些了。

    具体请参考Keystone bootloader手册。也可以参考以前的6474、6472的手册理解概念。