论坛中例程《spi_boot_suit_v2.3.1_release》 SPI加载时DDR3工作在1333MHz
DDR TABLE里面相关设置如下
PLL Prediv : 00 00 00 00PLL MUL : 00 00 00 1C
PLL most div:00 00 00 02
现在板子使用“evmc6678l.gel”文件中DDR3时钟配置为
// +——————–+—————+——–+——–+
// | DDR3 PLL VCO | (CLKIN) Input | | |
// | Rate (MHz) | Clock (MHz) | PLL1_M | PLL1_D |
// +——————–+—————+——–+——–+
// | 1066 | 66.667 | 31 | 1 |
// +——————–+—————+——–+——–+
DDR3工作在1066MHz可进行访问,但是SPI加载时就有问题,点灯程序不能加载。
1.请问在工作在1066MHz情况下,我直接将DDR TABLE中的设置为GEL中的PLL1_M与PLL1_D,即PLL MUL设为00 00 00 1F,PLL most div为 00 00 00 02仍无法正常加载,
请问相关PLL如何设置?
2.由于使用gel文件访问时未更改DDR3的SDRAM CONFIG SDRAM TIMING1等参数能够正常访问,请问DDR3 TABLE相关参数是否需要重新根据《DDR3 Register Calc v4.xls》进行配置?
3.SPI引导有否将所有数据直接加载至DDR3中?
Andy Yin1:
首先确认通过CCS load程序进行DDR初始化及memory测试可以通过,然后再进行boot测试。在boot测试时,推荐先通过加载一个小程序进行DDR的初始化,然后重新进入RBL加载真正的应用程序到DDR,如下:
上电后默认情况下RBL不会对DDR进行初始化,如果要将程序下载到DDR,在spi boot mode下,可以分两级加载,先加载第一个程序到LL2或SL2进行DDR的初始化,然后重新进入RBL加载另一组spi boot parameter及image到DDR运行。推荐参考如下流程进行DDR初始化及程序加载:
1、首先是处理2段程序的boot参数表,将第1个程序的boot参数表放在NOR FLASH的0x00~0x7f,第2个程序的boot参数表放在NOR FLASH的0x80~0xff,2个参数表中需要定义好各自应用程序在FLASH中放置的入口地址。
2、按照第1步中的各段地址空间的设置,将boot参数表和应用程序烧写到对应的FLASH空间上。
3、DSP硬件复位时,设置GPIO为0001 0100 0000 1101,这样可以让RBL首先加载第1个程序的boot参数表,且正确启动第1个应用程序。
4、第一个应用程完成的功能是初始化DDR控制器、设置DEVSTAT寄存器、清零boot magic地址以及跳转到RBL入口,这个过程注意的是设置DEVSTAT寄存器时,必须正确设置 DEVSTAT[7:6],使得RBL能正确加载到第2个boot参数表,由于我的第2个boot参数表是放置在 0x80~0xff上的,因此对 DEVSTAT[7:6]设置为01,boot参数表的地址与 DEVSTAT[7:6]的关系式 address = DEVSTAT[7:6] x 128。
通过以上几点,就能可以让第2个应用程序,也就是我们真正要运行的应用程序可以放在DDR中运行了。
如果你想测试boot ddr configure table,在boot之后通过CCS链接板卡,查看DDR config table地址确认DDR configure参数已经通过RBL搬进来,查看DDR config register可以进一步确认DDR已经配置好。关于DDR config table地址请参考boot load user guide。
TI新兵:
回复 Andy Yin1:
多谢ANDY的详细说明,我有一个二次加载的程序是可以正常配置DDR并且引导较大的程序的,我只是想试一下通过DDR TABLE直接设置是否能够成功。
后来测试加载小的点灯程序是成功了的。可有点矛盾,因为后来使用GEL 配置DDR PLL 为31 1 工作在1066MHz,而DDR TABLE中我需要设置成
PLL MUL : 00 00 00 20PLL most div:00 00 00 04
才能正常加载成功,可按照计算时钟方法应该DIV 为02才对?
另外我又换了一个较大的程序利用此方法进行引导却不能正常加载,这样直接加载至DDR有什么大小限制吗?