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.

TMS320C6670: 如何修改MAC方式启动时,发出的bootp广播包的MAC地址

Part Number: TMS320C6670

TI专家您好!

          我的单板上有2块C6670,每个DSP有i2c的eeprom,没有SPI的flash,每片DSP的SGMII通过交换芯片连接到外部,现在的问题是我用MAC的bootmode启动时,不同的单板发出的bootp包的MAC地址不一样,并且无法分辨哪个MAC地址是DSP1的?哪个MAC地址是DSP2的?我希望能配置固定的MAC地址,使得不同的单板的DSP1发出的bootp包的MAC地址都是我指定的一样的MAC地址,DSP2也是我指定的MAC地址。 请问如何实现?非常感谢!

  • 可以在C:\ti\C66x MCSDK 2.1\mcsdk_2_01_02_06\tools\boot_loader\ibl\src\device\c66x\tiboot_c66x.h里的boot_params_ethernet_s参数定义。

  • Ti专家您好!

                     非常感谢回信息!我现在在I2C的eeprom里面可以实现通过 boot config table的方式来写寄存器了,现在有两个问题,1. 我需要先通过MDC/MDIO来配置phy的寄存器,问题是写2各寄存器之间需要一些延时,比如写了第一个寄存器,等待10ms,再写第二个寄存器,boot config table里面如何实现延时?  2. 我看到了boot_params_ethernet_s参数定义,问题是我应该把这些参数写在eeprom的哪个地址上呢? 是不是说eeprom里面的0地址先写I2C的 boot config parameter,然后chain到下一个I2C 的 boot config parameter,直到把寄存器和DDR初始化完成,最后next chain 到以太网的boot_params_ethernet_s,DSP最后就以MAC的方式启动?并且实现我的boot_params_ethernet_s里面的MAC地址输出bootp的数据包?

                                                   谢谢!

  • 请问使用的是自己的板子还是TI的EVM板?是先从I2C EEPROM里启动再去通过网口发送代码?

  • TI专家您好!

          板是我们自己的,板上有2片C6670,每片C6670连接I2C 的32KB eeprom,2片C6670的EMAC SGMII0 都连接到交换芯片,交换芯片有一个对外的网口,没有连接SPI flash。我们需要通过网口加载2片C6670的代码。交换芯片需要第一片C6670通过MDIO接口初始化才能够正常工作(网口才能通),用仿真器调试是没有问题的,网口也能通,现在考虑脱离仿真器,通过网口加载,并且要考虑代码比较大,代码需要直接加载到DDR内存中,因为DSP内部RAM空间不够加载代码,C6670的管脚配置的bootmode是可以软件编程控制的。请问我们启动流程详细的过程?

                                                                                 非常感谢!

  • 交换芯片有一个对外的网口,没有连接SPI flash。我们需要通过网口加载2片C6670的代码。交换芯片需要第一片C6670通过MDIO接口初始化才能够正常工作(网口才能通

    不是很明白,2片c6670的代码需要交换芯片的对外网口加载,但是交换芯片又需要第一片c6670初始化,那第一片c6670要初始化的代码从哪里加载?

  • TI专家您好!

                我是希望将通过MDC/MDIO初始化交换芯片的代码(或boot config寄存器)存放在第一片DSP的eeprom里面,还有DDR的初始化,以及EMAC boot的MAC地址都存放在eeprom里面,eeprom可以用仿真器烧写。期望的结果:1.DSP发出的bootp包的MAC地址是我们在eeprom里面自己配置的。 2. 发出bootp包的时候,DSP已经初始化好DDR内存,此时DDR内存可以使用,即我们的代码可以直接通过EMAC网口加载到DDR内存(而不是局限于只能加载到DSP内部的RAM)。

                                                      谢谢!

  • 存放在第一片DSP的eeprom里面,还有DDR的初始化,以及EMAC boot的MAC地址都存放在eeprom里面,eeprom可以用仿真器烧写。

    那就需要从i2c boot模式启动,不是ethernet boot模式。板子上电后,第一片DSP先从i2c里启动,读取EEPROM里对应的初始化代码,初始化交换机,然后再从网口读取应用程序,这就不是ethernet boot mode了,我上面说的boot_params_ethernet_s这个就不适用了。MAC地址需要再您的IBL二次bootloader代码里实现了。

  • Ti 专家您好!

            IBL二次bootloader是编译ti/mcsdk_2_01_02_06/tools/bootloader/ibl下的文件,然后烧写到EEPROM里面吗?因为编译比较麻烦,我们的eeprom只有32KB,不确定是否能容纳这个ibl,我没有尝试这种方法。

            我看到论坛里有通过eeprom启动mac的方法,我试了试。

            1. 管脚设置为I2C master bootmode,从eeprom的地址 0 读取 I2C BOOT TABLE, 正常的I2C启动。

           2. I2C启动之后, 配交换芯片,清零magicAddr(我不知道这个magicAddr 在L2的什么地址?存放_c_int00的地址的地方吧?查询到非零就运行。 这个我们没有清零),修改DEVSTAT寄存器的[7:4] = 0001, 跳转到RBL的初始地址 0x20b00000 执行代码。 我在eeprom的 0x80的位置存放了boot_params_ethernet_s的数据结构的数据,我是希望用eeprom 的 0x80的boot table启动,里面有我自己的MAC地址。通过示波器抓DSP读取的eeprom的数据,确认跳转到0x20b00000执行之后,确实读取了eeprom的0x80的boot_params_ethernet_s的数据结构的数据。(没有读取eeprom 地址0的数据,直接读取0x80的数据,和配置devstat的[7:4]=0001对应,配置devstat的[7:4]=0010则会读取eeprom 0x100的数据),但是没有看到这个DSP1发出bootp包, 另外的DSP2 直接用mac方式启动,可以发出bootp包,说明交换芯片正常工作。现在先调试DSP1。

               现在有两个问题: 1. 清零magicAddr,这个在L2的什么地方?

                                            2.  写在eeprom里面的 boot_params_ethernet_s可能有问题,希望给我一个实际的参数例子。

                                                          谢谢!

  • 1. magicAddr地址是8ffffc

    2. 抱歉,没有boot_params_ethernet_s参数配置例子。