Hi, 我最近在调试EVM6678L的SPI boot,根据技术文档的描述,FPGA已固化代码强制DSP从I2C启动,而不能直接从spi启动。故设计由I2C引导spi启动,
即首先执行i2c启动,加载i2c启动参数表,然后引导加载spi参数表(该参数表存放在eeprom中),我期望的是DSP此时可以转向二级SPI启动,读取NOR flash里的应用程序代码,并加载至内部对应RAM空间,加载完毕即跳转到入口地址执行。
spi boot参数表的内容如下:
Uint8 spi_boot_param_table[34] = //addr:0x80
{
0x00, 0x22, // 0 Block length (34 bytes)
0x00, 0x00, // 2 Checksum disabled
0x00, 0x32, // 4 Boot mode,50,spi boot
0x00, 0x00, // 6 Physical port number
0x00, 0x00, // 8 SW PLL factor(MSW)
0x00, 0x00, // 10 SW PLL factor(LSW)
0x00, 0x01, // 12 option:load boot records from spi(boot tables)
0x00, 0x00, // 14 Mode: 00
0x00, 0x03, // 16 address width;2-16bit,3-24bit
0x00, 0x08, // 18 data width:8 or 16 bits
0x00, 0x04, // 20 Npin;3 or 4
0x00, 0x00, // 22 chip select
0x00, 0x00, // 24 read address MSW
0x00, 0x00, // 26 read address LSW
0x03, 0x20, // 28 CPU freq MHz
0x00, 0x19, // 30 the MHz portion of the spi bus freq,default:5MHz
0x00, 0x00 // 32 the kHz portion of the spi bus freq,default:0
};
boot代码已经正确写入flash,dsp拨码开关选择为I2C启动,上电一段时间后,连接仿真器,查看某些内存,发现我存放在flash中的应用程序并没有执行。此时:
0、spi boot parameter table已经成功加载;
1、查看寄存器,spi接口的状态为复位状态;
2、boot magic address的值为0。
请各位帮忙看看这种方案设计是否合理?如果合理,flash代码加载失败的原因可能是什么?boot参数表设置正确吗?
tthnny:
怎么没有人回答啊? 自己先顶起一下。请了解spi boot的人能尽快帮我解答哈。
tthnny:
回复 Andy Yin1:
Hi,Andy,谢谢你的回答!
请问问你那里有没有EVM6670L和EVM6678L的eeprom(地址为0x51 )里烧写的原始数据文件,包括各种参数表和boot table? 我想重新烧写下eeprom。
是这样的,我因为一上来就曾写过eeprom,很可能原始数据已被覆盖了,所以包括PLL初始化及后续的boot切换机制程序…都无法执行了,I am so sorry to tell you that ^_^
“For reliable PLL operation at boot-up, the FPGA will force the DSP to boot from the I2C by providing the boot configuration value as 0x0405 on the boot mode pins [12:0]. After the code in the I2C SEEPROM executes to initialize the PLLs, it will read the true values on the DIP switches from the registers in the FPGA and then boot as if the normal boot sequence had occurred.”