QSPI Operation with parallel mode

Quadspi可以并行访问两次闪存。这可以将吞吐量性能提高两倍。
但请注意,在并行模式下只允许读取操作和x1模式写入
通过将QSPI_BFGENCR[par_en]位设置为“1”,使 AHB  flexible-buffers 在并行模式下工作,                                                       将QSPI_IPCR[par_en]位设置为“1”,使 IP 命令在并行模式下工作,从任何偶数地址读取提供两个串行闪存设备的位[7:4]和从任何奇数加法读取。RESS提供两个闪存设备的位[3:0]。

并行闪存模式适用于串行闪存单IO模式下与数据读取和数据写入相关的命令,这意味着它可以以并行模式写入数据,但仅限于1个PAD模式,并且读取数据完全支持1、2、4个PAD操作。

在并行模式下,当它向闪存设备发出命令时,它会同时在qspi a和b上发出命令,但如果同时以并行模式读取状态,它会得到错误的结果,因为它是qspi a和qspi b的总线数据的组合。
因此,使用并行模式进行命令读取状态是有限制的,需要临时将其改为单模式,单独读取状态寄存器,下面是Macronix(MU25L128)的读取状态寄存器示例。

添加以下下命令以读取qspi flash b状态寄存器。
您只需将IP地址更改为qspi flash b,例如: 

QSPI_DRV_SetIPCommandAddr(0,FLASH_B1_BASEADDRESS); //write QSPI flash B address to QuadSPI_SFAR 

To read the QSPI status, add the following snippet code.

 while(QSPI_DRV_GetQspiStatus(0, kQspiBusy));
 QSPI_DRV_ClearFifo(0, kQspiTxFifo);
 QSPI_HAL_ClearSeqId(QuadSPI0, kQspiBufferSeq);
 QSPI_HAL_ClearSeqId(QuadSPI0, kQspiIPSeq);

 //Set the address
 QSPI_DRV_SetIPCommandAddr(0,FLASH_A1_BASEADDRESS);
 while(QSPI_DRV_GetQspiStatus(0, kQspiBusy));
 while(QSPI_DRV_GetQspiStatus(0, kQspiIPAccess));

 QSPI_DRV_ClearFifo(0, kQspiTxFifo);
 QSPI_DRV_ClearFifo(0, kQspiRxFifo);

 QuadSPI0_IPCR = QuadSPI_IPCR_SEQID(3)|0x02;

 while(QSPI_DRV_GetQspiStatus(0, kQspiBusy));

 val = *(volatile uint32_t *)(FSL_FEATURE_QSPI_ARDB_ADDRESS);

通过编写quadspi_ipcr或quadspi_bfgencr将qspi模式恢复为并行模式。

QuadSPI0_IPCR = IpcrValue;
 while(QSPI_DRV_GetQspiStatus(0, kQspiBusy));
 while(QSPI_DRV_GetQspiStatus(0, kQspiIPAccess));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值