Zynq-7000的256KB OCM应用程序运行

某些应用程序小,可以全部放在zynq-7000的256kb ocm上运行。这时,修改fsbl,可以把app和fsbl编译成一个可执行文件,fsbl初始化硬件后,就直接运行应用程序。
这种情况下,单板没有ddr。
1. ddr
缺省的fsbl,使用宏xpar_ps7_ddr_0_s_axi_baseaddr屏蔽了很多代码,不会初始化存储设备,比如qspi flash,也不会加载fpga。
对于只使用ocm上运行程序的场景,需要减少宏xpar_ps7_ddr_0_s_axi_baseaddr屏蔽的代码,也就是只屏蔽ddrinitcheck()的定义和调用就可以了。
下面屏蔽ddrinitcheck()的调用
int main(void) { ... ... #ifdef xpar_ps7_ddr_0_s_axi_baseaddr /* * ddr read/write test */ status = ddrinitcheck(); if (status == xst_failure) { fsbl_printf(debug_general,ddr_init_fail /r/n); /* error handling here */ outputstatus(ddr_init_fail); /* * calling fsblhookfallback instead of fallback * since, devcfg driver is not yet initialized */ fsblhookfallback(); } #endif // xpar_ps7_ddr_0_s_axi_baseaddr ... ... } 下面屏蔽ddrinitcheck()的定义
#ifdef xpar_ps7_ddr_0_s_axi_baseaddr u32 ddrinitcheck(void) { ... ... } #endif // xpar_ps7_ddr_0_s_axi_baseaddr 2. 初始化qspi
qspi flash大于16mb时,超出了线性模式的寻址范围。fsbl会把qspi初始化为io模式。
如果没有ddr,会导致不能加载fpga。为了解决这个问题,在加载fpga前,强行把qspi flash设置成16mb大小,初始化为线性模式。加载fpga后,再按正常模式初始化qspi flash。因此,fpga的bit文件,必须放在qspi flash的前16mb里。
在第一次初始化qspi flash时,强行把qspi flash初始化为线性模式,可以正常加载fpga。
int main(void) { ... ... if (bootmoderegister == qspi_mode) { fsbl_printf(debug_general,boot mode is qspi/n/r); initqspi(1); moveimage = qspiaccess; fsbl_printf(debug_info,qspi init done /r/n); } ... ... } 3. 运行应用程序
在fsblhandoff()里,关闭看门狗后,执行应程序。执行应用程序前,按原来的模式初始化qspi flash,也就是小于等于16mb时,初始化为线性模式;大于16mb时,初始化为io模式。
void fsblhandoff(u32 fsblstartaddr) { ... ... /* * fsbl user hook call before handoff to the application */ status = fsblhookbeforehandoff(); if (status != xst_success) { fsbl_printf(debug_general,fsbl_handoff_hook_fail/r/n); outputstatus(fsbl_handoff_hook_fail); fsblfallback(); } #ifdef xpar_xwdtps_0_baseaddr xwdtps_stop(&watchdog); #endif // hank: add customer's application code here // we can access fpga register here. int main_app(); initqspi( 0 ); main_app(); /* * clear our mark in reboot status register */ clearfsblin(); ... ... } 4. 进一步优化
还可以根据单板情况,进一步优化。比如,可以屏蔽nor flash的代码,pcw_silicon_version_1和pcw_silicon_version_2的数据和代码。fsbl的初始化代码和数据,只在上电时被使用,也可以释放出来更应用程序使用。


美国新规:鼓励清洁能源汽车和电池供应链回流
骨传导耳机音质怎么样?音质不错的骨传导耳机推荐
DTU知识普及丨替代”GPRS DTU”的产品
物流仓储、车辆管理的物联网解决方案
领夹式麦克风[常规使用方法及方案说明]
Zynq-7000的256KB OCM应用程序运行
单片机和Arduino有什么区别
人工智能只有统计学吗
防爆手电筒的误解点,LED防爆手电筒主要预防什么
华为mate40pro价格官网报价
BCC分裂后连跌 冲击价格新高地 比特币创新高突破2.2万
罗姆新增SiC和IGBT模型,可提供超3,500种LTspice®模型
力晶建12寸晶圆厂,半导体制造厂进驻铜锣园
DNA存储技术又有新突破
单相电机的工作原理 单相电机正反转的三种接法
软件互操作性为尖端光学设计架起了互补能力的桥梁
5G标准和产业进程进入实质性加速阶段
航空线束线缆测试系统解决方案
基于Simulink防抱死制动系统的设计方案
深度剖析开短路测试原理