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线读。因为写结果错乱,所以读的结果都是错乱的)