AXI QSPI寄存器调试w25q64(续) - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki
AXI QSPI模式,目前调试的结果:
- 编程:1线0x02正确。4线0x32错误(完全错乱)。
- 读:1线0x02/0x0b正确,2线0x3b正确,4线0x6b正确。
- 库函数也是可以的,也是可以拆分为多个发送,在一个cs里面完成。
- 注意w25q64的参数:block=64kB,sector=4kB, page=256B
用库函数法(1线写,1线/2线/4线读。结果正确的)
void test_flash2()
{
//s0: read sr
//pulling_sr();
//s2: sector erase(sector_size=4kB)
txBuffer[0]=0x06;
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 1);
txBuffer[0]=0x20;
txBuffer[1]=0x00;
txBuffer[2]=0x00;
txBuffer[3]=0x00;
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 4);
//pulling_sr();
usleep(100*1000);
//s3: page program(page_size=256B)
for(int i=0; i<8; i++){
txBuffer[0]=0x06;
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 1);
u32 addr=0x000000+i*128;
txBuffer[0]=0x02;
txBuffer[1]=(addr>>16)&0xff;
txBuffer[2]=(addr>>8)&0xff;
txBuffer[3]=(addr>>0)&0xff;
for(int i=0; i<128; i++){
txBuffer[4+i]=4+i;
}
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 4+128);
usleep(100*1000);
}
//s4: spi/dspi/qspi read
txBuffer[0]=0x0b;
txBuffer[1]=0x00;
txBuffer[2]=0x00;
txBuffer[3]=0x00;
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 1024);
usleep(100*1000);
for(int i=0; i<32; i++) xil_printf("%d\r\n", rxBuffer[i]);
xil_printf("*******************\r\n");
txBuffer[0]=0x3b;
txBuffer[1]=0x00;
txBuffer[2]=0x00;
txBuffer[3]=0x00;
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 1024);
usleep(100*1000);
for(int i=0; i<32; i++) xil_printf("%d\r\n", rxBuffer[i]);
xil_printf("*******************\r\n");
txBuffer[0]=0x6b;
txBuffer[1]=0x00;
txBuffer[2]=0x00;
txBuffer[3]=0x00;
AXI_SPI_Transfer(&AXI_SPI0, 0, rxBuffer, txBuffer, 1024);
usleep(100*1000);
for(int i=0; i<32; i++) xil_printf("%d\r\n", rxBuffer[i]);
xil_printf("*******************\r\n");
}
用库函数法(4线写,1线/2线/4线读。因为写结果错乱,所以读的结果都是错乱的)