根据查到的论文和官方文档,我现在清楚EMAC启动的基本原理,但是不知道实际上该如何操作。
我们的板卡通过I2C总线连接了一块256Kbit的EEPROM,有一块88E6122 Switch芯片,多核启动的设计方案为I2C EEPROM一级启动+EMAC二级启动。
我所理解的原理,以Core0单核启动为例(如果有误还请前辈们指正):
- BOOTMODE[3:0]的值通过拨码开关设置为0001b,即配置为I2C Master Boot A模式,这样CPU会从I2C总线的0x50地址处读取数据块
- 片上bootloader(也可称为一级bootloader)位于L3 ROM中,芯片复位后,CPU直接从L3 ROM的基地址(0x3C000000)开始执行片上bootloader
- 片上bootloader会拷贝EEPROM中的二级bootloader程序到L2 RAM中,并从L2 RAM的基地址0x00800000处执行程序
- 二级bootloader程序由用户编写,其需要实现:EMAC启动参数配置、Switch芯片配置等
- 二级bootloader程序成功执行后,EMAC被配置为接收以太网帧状态。此时主机(PC)可通过HEX转换工具,将CCS编译出的.out文件(用户应用程序)转换成.hex,再通过代码转换成.c文件,最后采用UDP协议发送给C6474芯片。
- C6474芯片接收到的应用程序存放至L2 RAM中,接收完成后,Core0从指定位置开始执行,_c_init和BIOS_start在此时被初始化完毕
我的疑问就在上述步骤4和步骤5中:
- 如何编写二级bootloader并成功配置EMAC启动,编写完成的程序如何烧写至I2C EEPROM中?
- 主机(PC)该如何编写程序,使发送的应用程序能被C6474芯片成功接收?
因为我现在查到的都是理论介绍,缺乏实践操作指导,还请前辈们能指点一二,多谢解答!
Shine:
boot表可以用hex6x.exe生成,具体格式可以参考bootloader文档6.2 I2C Boot和3.3.6.2 EMAC Boot Table Frame Format。
www.ti.com/…/spruec6g.pdf二次bootloader的流程,可以参考下面的应用报告。
www.ti.com/…/spra999a.pdf下面是一个emac boot例程,可以参考一下。
e2e.ti.com/…/68453