软件方面:
在SDK-05.06.00.00及之后的版本的U-boot中已经添加了Nor flash启动的代码。在使用时,需要注意
nor flash为XIP memory,其启动时不需要将SPL拷贝到RAM中运行,而可以直接在nor flash进行。由于nor flash启动,ROM CODE只对低16位地址进行了初始化,所以启动时只能访问0x08000000起始的64K x 16bit的地址空间。在此初始化中,u-boot.bin会执行对nor flash高位地址的初始化,以便后续AM335X能访问nor flash的整个地址空间。
在u-boot/board/ti/am335x/board.c中的s_init函数中有对高地址线进行初始化的代码:
#ifdef CONFIG_NOR_BOOT
asm("stmfd sp!, [r2 - r4]");
asm("movw r4, #
0x8A4");
asm("movw r3, #0x44E1");
asm("orr r4, r4, r3, lsl #16");
asm("mov r2,
#9");
asm("mov r3,
#8");
asm("gpmc_mux: str r2, [r4], #4");
asm("subs r3, r3, #1");
asm("bne gpmc_mux");
asm("ldmfd sp!, [r2 - r4]");
#endif
在选择上述表中的pinmux mode 1时,即nor flash的高位地址线连接的GPMC_A[10:1]是pinmux mode1组对应的管脚,则u-boot中不需要做修改。而如果连接的是表中的pinmux mode 0组对应的管脚,即需要修改代码如下:
#ifdef CONFIG_NOR_BOOT
asm("stmfd sp!, [r2 - r4]");
asm("movw r4, #
0x844"); Start point Change from LCD_DATA1 to GPMC_A1
asm("movw r3, #0x44E1");
asm("orr r4, r4, r3, lsl #16");
asm("mov r2,
#8"); Change #9 to #8, GPMC_A1 to GPMC_A11 as mode0
asm("mov r3,
#11"); Change #8 to #11, because there are 11 lines.
asm("gpmc_mux: str r2, [r4], #4");
asm("subs r3, r3, #1");
asm("bne gpmc_mux");
asm("ldmfd sp!, [r2 - r4]");
#endif
另外,对应上述两组不同的连接时,SYSBOOT对应的设置也不相同。如选择pinmux mode0组的连接,则需要配置SYSBOOT,选择XIP(mux1)或者XIP(mux1) w/WAIT0启动。而选择pinmux mode1时,则需要配置SYSBOOT,选择XIP(mux2)或者XIP(mux2) w/WAIT0启动。
软件方面:
在SDK-05.06.00.00及之后的版本的U-boot中已经添加了Nor flash启动的代码。在使用时,需要注意
nor flash为XIP memory,其启动时不需要将SPL拷贝到RAM中运行,而可以直接在nor flash进行。由于nor flash启动,ROM CODE只对低16位地址进行了初始化,所以启动时只能访问0x08000000起始的64K x 16bit的地址空间。在此初始化中,u-boot.bin会执行对nor flash高位地址的初始化,以便后续AM335X能访问nor flash的整个地址空间。
在u-boot/board/ti/am335x/board.c中的s_init函数中有对高地址线进行初始化的代码:
#ifdef CONFIG_NOR_BOOT
asm("stmfd sp!, [r2 - r4]");
asm("movw r4, #0x8A4");
asm("movw r3, #0x44E1");
asm("orr r4, r4, r3, lsl #16");
asm("mov r2, #9");
asm("mov r3, #8");
asm("gpmc_mux: str r2, [r4], #4");
asm("subs r3, r3, #1");
asm("bne gpmc_mux");
asm("ldmfd sp!, [r2 - r4]");
#endif
在选择上述表中的pinmux mode 1时,即nor flash的高位地址线连接的GPMC_A[10:1]是pinmux mode1组对应的管脚,则u-boot中不需要做修改。而如果连接的是表中的pinmux mode 0组对应的管脚,即需要修改代码如下:
#ifdef CONFIG_NOR_BOOT
asm("stmfd sp!, [r2 - r4]");
asm("movw r4, #0x844"); Start point Change from LCD_DATA1 to GPMC_A1
asm("movw r3, #0x44E1");
asm("orr r4, r4, r3, lsl #16");
asm("mov r2, #8"); Change #9 to #8, GPMC_A1 to GPMC_A11 as mode0
asm("mov r3, #11"); Change #8 to #11, because there are 11 lines.
asm("gpmc_mux: str r2, [r4], #4");
asm("subs r3, r3, #1");
asm("bne gpmc_mux");
asm("ldmfd sp!, [r2 - r4]");
#endif
另外,对应上述两组不同的连接时,SYSBOOT对应的设置也不相同。如选择pinmux mode0组的连接,则需要配置SYSBOOT,选择XIP(mux1)或者XIP(mux1) w/WAIT0启动。而选择pinmux mode1时,则需要配置SYSBOOT,选择XIP(mux2)或者XIP(mux2) w/WAIT0启动。
举报