SPI直接引导,RBL支持的Boot流程对DDR的配置只限于DDR controller的配置,并不支持DDR leveling寄存器的配置。
想要让DDR在Boot阶段能正常工作版上有帖子讨论过两种方法:
- 将DDR Configuration Table插入镜像时,对应的PLL参数配置使DDR工作在较低的频率;Boot流程完毕,应用程序中配置DDR leveling参数后,重新初始化DDR,让DDR工作在较高频率。
- 通过在镜像文件中插入Boot Configuration Table,配置对应的DDR leveling寄存器,RBL配置完这些寄存器后,开始搬运实际要加载的section,此时DDR leveling寄存器已完成配置,故DDR Configuration Table可以配置DDR为正常工作频率。
尝试的过程中遇到了些问题:
- 第一种方法在C6678的EVM上尝试了,并没有成功。我会考虑继续尝试,同时如果能够得到成功的demo的话最好。
- 第二种方法在制作带Boot Configuration Table的Boot镜像时,不知如何操作,不知道有没有人成功?这个方法在RBL user guide中有说明,但只是介绍了功能原理,以及Boot Configuration Table的形式,并没有介绍该如何制作这种镜像,或者说并没有介绍该如何将自己写好的Boot Configuration Table插入到现有的boot table前。目前的想法如下:
- Boot Configuration Table的形式是知道了,自己可以对照写出一张配置表。使用b2i2c.工具转换成RBL识别的形式,使用b2ccs转换成.ccs文件
- 添加option对应为Boot Configuration Table的Boot parameter table,并在Boot parameter table中指定实际的Boot Table存放位置
- 转换成大端格式,生成A.dat文件
- 应用程序.out使用hex6x工具生成Boot Table,并添加DDR Configuration Table(EMIF controller)
- 通过b2i2c.工具转换成RBL识别的形式,通过b2ccs转换成.ccs文件
- 添加option对应为Boot Table的Boot parameter table
- 转换成大端格式,生成B.dat文件
- 将两个.dat文件合并成一个(C.dat),并根据A.dat中Boot parameter table中指定的Boot Table存放位置,放置B.dat文件
不知道想法是否合理,有没有什么不能实现的地方?