TI中文支持网
TI专业的中文技术问题搜集分享网站

DM368 SPI Boot不成功

最近在做DM368的SPI Boot,期遇到了很多问题,感谢大家的热心回复,现在又遇到问题了,束手无策,还请大家帮忙,谢谢!问题描述如下

我用CCS3.3编译器,在编译选项里增加了 hex470.exe后编译,cmd文件使用的是

-a
-map video_loopback.map
-image
-zero
-memwidth 8
-linkerfill
-fill 0x00000000
-order LS
-o video_loopback.hex

ROMS
{
EPPROM: org = 0x87000000, len=0x0000A200, romwidth=8
}

这样,在生成.out文件的同时也生成hex文件后,再用hex2bin.exe 生成.bin文件(大小为0xA200)。

参考DM368手册“sprufg5a-TMS320DM36x DMSoC ARM Subsystem Reference Guide.pdf”的11.2.5节,SPI Boot时需要一个SPI的描述符,一共是24个字节,设置如下,

{0x01,0xED,0xAC,0xA1,
0x20,0x00,0x00,0x00,
0x00,0x00,0xA2,0x00,
0x02,
0x00,
0x00,0x00,
0x18,0x00,0x00,0x00,
0x20,0x00,0x00,0x00};

此描述符放在bin文件的头,然后再烧到64KB的SPI EEPROM(ST公司的 AT25512)里,数据检验什么的都没问题。

重新板子上电后,SPI总线一直有信号输出,但就是没有Boot起来,请问是怎么回事儿?整个操作流程有什么问题么,还是哪里设置有问题?急!!谢谢

Yan Li1:

每人顶么,自己先回复一个。谈一些自己然看法!

首先,自己写了一个简单然程序,在DM368上Debug没有问题,于是想把这个程序当做UBL来运行,这个问题以前在论坛里讨论过,是可行然。

其次,借用了TI给然SDK里生成UBL然方法,使用HEX470.exe 直接就生成.bin文件;

然后,烧录.bin文件到SPI EEPROM,在.bin文件前面增加了32个节字然SPI然UBL描述符。

重启,程序不启动。再分析分析

发现CPU 然SPI不断然在读取EEPROM,那就说明CPU没有Boot成功,然后重新又去读取EEPROM中然内容,那到底是UBL的文件描述符错了呢,还是.bin文件错了呢,.bin文件生成是参考UBL生成方式生成的,其中cmd文件如下所示

-b-image-zero-memwidth 8-linkerfill-fill 0x00000000

ROMS{ FLASH: org = 0x87000000, len=0xA200, romwidth=8}

.bin文件应该是没有问题,那UBL描述符有啥问题

前4个字节,确定使用16bit 还是24bit的地址寻址,我用的EEPROM是64KB,16位寻址,选择16bi即可。

再4个字节,是UBL以IRAM的绝对地址,0x20。

再4个字节,是UBL的大小。

再4个字节,是SPI的分频数,选择2;

再4个字节,是快速模式选择,不选择快速模式;

再4个字节,全填0;

再4个字节,是UBL在EEPROM中的内容,由于描述符占了32个字节,所以应该是0x20;

后4个字节,是将UBL装载到IRAM的地址,选择0x2;

不明白,将UBL装载到IRAM,与UBL在IRAM的地址,两者有什么联系。

这样设置不知道对不对,请大家帮忙参考参考,谢谢。

wei long:

回复 Yan Li1:

不知道问题解决了没?现在遇到同样的问题,希望能够分享一下解决办法,非常感谢!!

wei long:

回复 wei long:

问题已解决,通过j-link查看寄存器,objdump查看ubl发现,从nand ubl的 boot段地址为0x100,修改链接文件让boot段,的链接地址为0x20,  添加头描述符为:

wei long:

回复 wei long:

{0x01,0xED,0xAC,0xA1,0x20,0x00,0x00,0x00,0x00,0x00,0xA2,0x00,0x05,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x000x00,

0x00,0x00,0x000x00,

0x00,0x00,0x000x00,};

赞(0)
未经允许不得转载:TI中文支持网 » DM368 SPI Boot不成功
分享到: 更多 (0)