首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

QSPI 线性模式例子只能运行一次,设置为IO模式可以反复运

QSPI 线性模式例子只能运行一次,设置为IO模式可以反复运

QSPI 线性模式例子只能运行一次,设置为IO模式可以反复运行14.4带有一个QSPI工作在线性模式的例子,xqspips_flash_lqspi_example.c。它先假设QSPI工作在IO模式,读取QSPI的ID,再向QSPI写入数据,然后设置QSPI工作在线性模式,读取数据,并和写入的数据做校验。第一次运行正常。 如果单板不下电,第二次运行时,QSPI还工作在线性模式,读取ID的操作就不能完成,一直在循环,测试就会失败。 为了让QSPI测试程序可以多次运行,最好在程序结束前,重新设置其工作模式。设置工作模式的代码是:XQspiPs_SetOptions(QspiInstancePtr, XQSPIPS_FORCE_SSELECT_OPTION |XQSPIPS_MANUAL_START_OPTION |XQSPIPS_HOLD_B_DRIVE_OPTION );u32Option = XQspiPs_GetOptions( QspiInstancePtr );xil_printf("QSPI option: 0x%x before exit.\n\r", u32Option );ControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,XQSPIPS_CR_OFFSET);LinearControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,XQSPIPS_LQSPI_CR_OFFSET);xil_printf("ControlReg: 0x%08x, LinearControlReg: 0x%08x, .\r\n", ControlReg, LinearControlReg); 或者在进入测试时,检查QSPI的工作模式。如果没有工作在IO模式,则强制设置成IO模式。代码如下:ControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,XQSPIPS_CR_OFFSET);LinearControlReg = XQspiPs_ReadReg(QspiInstancePtr->Config.BaseAddress,XQSPIPS_LQSPI_CR_OFFSET);xil_printf("ControlReg: 0x%08x, LinearControlReg: 0x%08x, .\r\n", ControlReg, LinearControlReg);if ((LinearControlReg & XQSPIPS_LQSPI_CR_LINEAR_MASK) != 0) {xil_printf("QSPI works as linear mode before.\r\n");LinearControlReg &= 0x7fffffff;XQspiPs_WriteReg(QspiInstancePtr->Config.BaseAddress,XQSPIPS_LQSPI_CR_OFFSET, LinearControlReg);}  
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表