C6678的boot中DDR Table设置问题
DDR Table
这是一个在C6678启动过程中的首先配置。因为只有先靠DDR Table配置好DDR的参数,才能使用DDR。
或者若不使用DDR则不用加入此项。
本教程默认用户已经大概了解过C6678的软件固化流程,并且已经有了固化流程demo可以使用。
思路
先确保DDR的各项配置可以正常使用,以下是我做过的工作(选一个就好):
1.利用keystone相关配置来初始化DDR并且可以用其带的demo进行读写测试。
2.在gel文件中配置好DDR参数,并在调试开始前直接在调试界面的memory browser窗口查看DDR地址(0x80000000),若其不全为0,基本能用。找个dat文件右键load进去不报错,那基本就没什么问题了。
然后重要的转换来了,找个正常加载DDR的工程,在调试过程中,直接在Registers窗口中查看DDR寄存器(别忘等DDR初始化完成),并且将其与DDR Table表和simple.btbl文件对照,然后来修改simple.btbl文件(要拆分.bat文件命令并使用CMD一步一步实现)
且一定要在AddDdrTable6678 simple.btbl命令以后修改,因为这条命令负责在simple.btbl中插入DDR Table。
Table相关说明
可参见C6678datsheet的“2.5.3.8 DDR3 Configuration Table”章节
Table关键参数说明
大部分参数用户都可以在调试窗口中找到,这里需要注意的两个寄存器分别是pllMult和pllPostDiv时钟寄存器。
这两个时钟配置不能完全照搬gel文件或者KeyStone_DDR_init()函数代码。
针对gel文件来说:
gel文件中的倍频和分频都需要进行换算——
Table(Mult)=gel(Mult)+1
Table(Div)=2(gel(Div)+1)
函数中的倍频和分频都需要进行换算——
Table(Mult)=Mult
Table(Div)=2Div
例如拿函数举例:若函数中的KeyStone_DDR_init (66.66667, 20, 1, NULL);则对应gel中
倍频=19
分频=0
66.666(19+1)/(2(1+0))=666.66Mhz(因为DDR上升下降沿都处理数据则为666.66*2=1333Mhz)
则Table中就应该是:
Mult=20(19+1)
Div=2(2*(0+1))
根据如上的修改,那么在程序载入上就没有问题了。