AM335x裸机开发:如何加载运行不同的工程;
需求: 在SPL后的BOT工程里,实现APP的升级更新功能; 需要在BOT工程里,加载APP工程并运行;
开发硬件: AM3352,SPI0.SPIFLASH;
开发软件: CCS;
参考AM335X_StarterWare,建立CCS裸机工程:
工程1:SPL工程:ROM上电启动(从SPI FLASH里加载代码到内部RAM运行); 内部RAM空间;
工程2:BOT工程:SPL工程代码实现从SPI FLASH里加载BOT并跳转运行; 外部DDR.BOT空间;
工程3:APP工程:BOT工程代码实现从SPI FLASH里加载APP并跳转运行; 外部DDR.APP空间;
注1:SPL工程是没有开启MMU和CACHE; BOT和APP有开启;
注2:APP工程用仿真器下载能正常工作;
SPL加载并跳转,能正常运行BOT工程;
BOT加载并跳转,不能正常运行APP工程: 正常一般是在BOT加载APP代码到DDR.APP空间后,用指令跳转:
int JumpApp(void)
{
CacheDisable(CACHE_ALL); // 调试测试,关闭CACHE;
IntMasterIRQDisable();//调试测试,关闭总中断;
IntAINTCInit();//调试测试,初始化中断;
(*(void (*)(void))(0x81C00000);// 跳转到APP
for(;;);
return 0;
}
但实际没有正常工作(APP工程没有运行);
分析:
可能是MMU和CACHE原因,但尝试过在跳转前失效和回写CACHE等操作,再跳转也不行;
谢谢!
Shine:
请问为什么要SPL和BOT两个工程?这两个工程不能合并成一个吗? 一个二次bootloader代码就能加载app工程。starterware里有一次bootloader,请参考下面的wiki网站。
processors.wiki.ti.com/…/AM335X_StarterWare_Booting_And_Flashing
user4467014:
回复 Shine:
SPL工程有代码限制,貌似说不能大于109K; 因此设计了个BOT来实现产线测试代码和APP升级代码等;
连接那个应该是相当于我SPL工程.谢谢!
Shine:
回复 user4467014:
109K是SPI flash的限制?二次bootloader代码做一些的外设初始化,一般不会很大,您的二次bootloader代码做很多事吗?
user4467014:
回复 Shine:
TRM里:
26.1.9.2 Boot Image Location and SizeThe boot image is downloaded directly into internal RAM at the location 0x402F0400 on GP devices. Themaximum size of downloaded image is 109 KB.
应该就是SPL加载的最大为109K的代码;
您说的二次bootloader ,应该就是SPL工程.
需要做板卡生产是的板卡的产线测试代码,以及APP升级更新等代码. 肯定超过109K大小的.
因此我才设计SPL(SRAM)—BOT(DDR)—APP(DDR) 这样;
谢谢!