DM36X 的UBL移植
关于UBL的移植,本人打算单独写一篇文章的,但是UBL和UBOOT太紧密了,是TI davinci芯片的特点,所以放到一起讲。我们重点放在NAND BOOT的移植,这个UBL的版本是V1.50,在dvsdk_dm368_4_02_00_06\psp\flash-utils\DM36x和flash-utils\Common目录下,Common目录里有非常多东西,包括UBL的驱动源码、工具、脚本等等。我们主要关注arch,drivers,src,ubl。UBL的main()函数在dvsdk_dm368_4_02_00_06\psp\flash-utils\Common\ubl\src\ubl.c里,这几个文件夹打开看看就明白什么意思了,这里不罗嗦。
DM36x下有CCS、Common,GNU三个文件夹:
CCS文件夹:
这里边的程序需要在TI CCS下编译,通过仿真器和JTAG在DM36X的板子上调试和烧写NAND FLASH或NOR FLASH,有烧写Writer的应用程序,用CCS打开工程文件,会连接到dvsdk_dm368_4_02_00_06\psp\flash-utils\Common\ drivers里。
Common文件夹:Common里有核心的文件device.c和device_nand.c。device.c是最重要的文件,这里初始化很多系统的东西,见DEVICE_init():
1、屏蔽所有中断;
2、清除中断标志;
3、DEVICE_PSCInit(),Power and Sleep Controller;
4、主芯片管脚复用的设置DEVICE_pinmuxControl(),DM36X的管脚复用很多,很复杂,一共5个PINMUX寄存器需配置;
5、DEVICE_PLL1Init(),PPL1配置,见SPRUSG5A.pdf的35页开始的介绍,使用不同的频率的DM36X,这些值都不同,不过TI已经提供参数参考,我们的DM365核心板是:ARM297_DDR243_OSC24,DM368核心板是:ARM432_DDR340_OSC24;
6、DEVICE_PLL2Init(),PPL2的配置,使用同上,不同频率的值不同;
7、DEVICE_DDR2Init()的配置,市场上不同的DDR2内存芯片需要不同的参数配置,就在这个函数内。
8、DEVICE_EMIFInit(),这个针对NAND FLASH接口或NOR FLASH接口的访问时序配置;
9、DEVICE_UART0Init()的配置,这个就是我们调试DM36X串口的设置,我们使用UART0来调试LINUX,这里配置不好,后面的开发不用调试了。
10、DEVICE_TIMER0Init()定时器TIMER0的设置;
11、DEVICE_I2C0Init()的设置;
GNU的文件夹:
这个就是在LINUX环境下编译UBL的环境,修改dvsdk_dm368_4_02_00_06\psp\flash-utils\DM36x\GNU\ubl下的makefile,把
#$(MAKE) -C build TYPE=nor注释掉,只保留$(MAKE) -C build TYPE=nand,然后是make clean和 make生产ubl_DM36x_nand.bin的文件;
如果出现:device.c:(.text+0x2ec): undefined reference to `__aeabi_uidiv'和device.c:(.text+0x2e8): undefined reference to `__aeabi_uidivmod'的BUG,就是DDR_Get_Val()函数里边的除法和求余的语句和你的编译器不配置造成的。
result = ((parm * freq) / 10000) - 1;和if(((parm * freq) % 10000)),我们对参数的求值直接:
tRFC = xxx; //DDR_Get_Val(DDR_T_RFC, DDR_FREQ);
tRP = xxx; //DDR_Get_Val(DDR_T_RP, DDR_FREQ);
tRCD = xxx; //DDR_Get_Val(DDR_T_RCD, DDR_FREQ);
tWR = xxx; //DDR_Get_Val(DDR_T_WR, DDR_FREQ);
tRAS = xxx; //DDR_Get_Val(DDR_T_RAS, DDR_FREQ);
tRC = xxx; //DDR_Get_Val(DDR_T_RC, DDR_FREQ);
tRRD = xxx; //DDR_Get_Val(DDR_T_RRD, DDR_FREQ);
tWTR = xxx; //DDR_Get_Val(DDR_T_WTR, DDR_FREQ);
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。