硬件:zynq7045+双片micro512Mb并联
一、例程
qspi单片大于16MB的参照SDK中例程xqspips_g128_flash_example.c,操作时需要先选中相应的BANK,再进行读写。
二、单双片flash切换
在Block Design不变的情况下,通过软件切换flash访问模式,只需要在flash初始化之前,修改QspiConfig->ConnectionMode
| ConnectionMode | 模式 |
| XQSPIPS_CONNECTION_MODE_SINGLE | 单片 |
| XQSPIPS_CONNECTION_MODE_STACKED | 双片堆叠 |
| XQSPIPS_CONNECTION_MODE_PARALLEL | 双片并联 |
QspiConfig = XQspiPs_LookupConfig(QspiDeviceId);
if (NULL == QspiConfig) {
return XST_FAILURE;
}
//在XQspiPs_CfgInitialize之前修改模式
QspiConfig->ConnectionMode = XQSPIPS_CONNECTION_MODE_PARALLEL; //XQSPIPS_CONNECTION_MODE_SINGLE;
Status = XQspiPs_CfgInitialize(QspiInstancePtr, QspiConfig,
QspiConfig->BaseAddress);
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
注意:使用parallel模式写入的数据在single模式下不能正确读出。
双片存储parallel模式读取:

single模式读取:

可以看到并不是网上说的偶数地址放flash1,奇数地址放flash2。双片存储不是简单的各一半(具体存放形式暂不清楚)
三、JTAG烧写bin
如果想要将程序烧写到flash里并且正常启动,需要fsbl中的flash参数和烧写时的Flash Type一致,否则烧写成功,但是不能正常启动。
paramaters.h
/* Definitions for peripheral PS7_QSPI_0 */
#define XPAR_PS7_QSPI_0_DEVICE_ID 0
#define XPAR_PS7_QSPI_0_BASEADDR 0xE000D000
#define XPAR_PS7_QSPI_0_HIGHADDR 0xE000DFFF
#define XPAR_PS7_QSPI_0_QSPI_CLK_FREQ_HZ 125000000
#define XPAR_PS7_QSPI_0_QSPI_MODE 2 //0-single 2-parallel
#define XPAR_PS7_QSPI_0_QSPI_BUS_WIDTH 3 //2-single 3-parallel
/******************************************************************/
/* Canonical definitions for peripheral PS7_QSPI_0 */
#define XPAR_XQSPIPS_0_DEVICE_ID XPAR_PS7_QSPI_0_DEVICE_ID
#define XPAR_XQSPIPS_0_BASEADDR 0xE000D000
#define XPAR_XQSPIPS_0_HIGHADDR 0xE000DFFF
#define XPAR_XQSPIPS_0_QSPI_CLK_FREQ_HZ 125000000
#define XPAR_XQSPIPS_0_QSPI_MODE 2 //0-single 2-parallel
#define XPAR_XQSPIPS_0_QSPI_BUS_WIDTH 3 //2-single 3-parallel
如果参数为parallel模式,但是烧写BOOT.bin使用qspi-x4-single,会因为fsbl启动时无法读取BIN导致启动失败。


1万+

被折叠的 条评论
为什么被折叠?



