某些应用程序小,可以全部放在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防抱死制动系统的设计方案
深度剖析开短路测试原理