spi
Vitis Drivers API Documentation
xspi_winbond_flash_quad_example.c File Reference

Overview

This file contains a design example using the SPI driver (XSpi) and axi_qspi device with a Winbond quad serial flash device in the interrupt mode.

This example erases a Sector, writes to a Page within the Sector, reads back from that Page and compares the data.

This example has been tested with an W25Q64 device. The bytes per page (PAGE_SIZE) in W25Q64 is 256.

Note

None.

MODIFICATION HISTORY:
Ver   Who  Date     Changes


1.00a sdm 04/01/11 First release 4.2 ms 01/23/17 Added xil_printf statement in main function to ensure that "Successfully ran" and "Failed" strings are available in all examples. This is a fix for CR-965028. ms 04/05/17 Modified Comment lines to follow doxygen rules. 4.11 sb 07/11/23 Added support for system device-tree flow.

Macros

#define READ_WRITE_EXTRA_BYTES   4 /* Read/Write extra bytes */
 This definitions specify the EXTRA bytes in each of the command transactions. More...
 

Functions

int SpiFlashWriteEnable (XSpi *SpiPtr)
 This function enables writes to the Winbond Serial Flash memory. More...
 
int SpiFlashWrite (XSpi *SpiPtr, u32 Addr, u32 ByteCount, u8 WriteCmd)
 This function writes the data to the specified locations in the Winbond Serial Flash memory. More...
 
int SpiFlashRead (XSpi *SpiPtr, u32 Addr, u32 ByteCount, u8 ReadCmd)
 This function reads the data from the Winbond Serial Flash Memory. More...
 
int SpiFlashBulkErase (XSpi *SpiPtr)
 This function erases the entire contents of the Winbond Serial Flash device. More...
 
int SpiFlashSectorErase (XSpi *SpiPtr, u32 Addr)
 This function erases the contents of the specified Sector in the Winbond Serial Flash device. More...
 
int SpiFlashGetStatus (XSpi *SpiPtr)
 This function reads the Status register of the Winbond Flash. More...
 
int SpiFlashQuadEnable (XSpi *SpiPtr)
 This function sets the QuadEnable bit in Winbond flash. More...
 
int SpiFlashEnableHPM (XSpi *SpiPtr)
 This function enabled High Performance Mode in Winbond flash, so that data can be read from the flash using DIO and QIO commands. More...
 
void SpiHandler (void *CallBackRef, u32 StatusEvent, unsigned int ByteCount)
 This function is the handler which performs processing for the SPI driver. More...
 
int main (void)
 Main function to run the quad flash example. More...
 

Macro Definition Documentation

#define READ_WRITE_EXTRA_BYTES   4 /* Read/Write extra bytes */

This definitions specify the EXTRA bytes in each of the command transactions.

This count includes Command byte, address bytes and any don't care bytes needed.

Referenced by main().

Function Documentation

int SpiFlashBulkErase ( XSpi SpiPtr)

This function erases the entire contents of the Winbond Serial Flash device.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
The erased bytes will read as 0xFF.
int SpiFlashEnableHPM ( XSpi SpiPtr)

This function enabled High Performance Mode in Winbond flash, so that data can be read from the flash using DIO and QIO commands.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
None.

References SpiFlashWriteEnable(), and XSpi_Transfer().

Referenced by main().

int SpiFlashGetStatus ( XSpi SpiPtr)

This function reads the Status register of the Winbond Flash.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
The status register content is stored at the second byte pointed by the ReadBuffer.
int SpiFlashQuadEnable ( XSpi SpiPtr)

This function sets the QuadEnable bit in Winbond flash.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
None.

References SpiFlashWriteEnable(), and XSpi_Transfer().

Referenced by main().

int SpiFlashRead ( XSpi SpiPtr,
u32  Addr,
u32  ByteCount,
u8  ReadCmd 
)

This function reads the data from the Winbond Serial Flash Memory.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Addris the starting address in the Flash Memory from which the data is to be read.
ByteCountis the number of bytes to be read.
ReadCmdis the command used for reading data from flash.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
None
int SpiFlashSectorErase ( XSpi SpiPtr,
u32  Addr 
)

This function erases the contents of the specified Sector in the Winbond Serial Flash device.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Addris the address within a sector of the Buffer, which is to be erased.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
The erased bytes will be read back as 0xFF.
int SpiFlashWrite ( XSpi SpiPtr,
u32  Addr,
u32  ByteCount,
u8  WriteCmd 
)

This function writes the data to the specified locations in the Winbond Serial Flash memory.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Addris the address in the Buffer, where to write the data.
ByteCountis the number of bytes to be written.
WriteCmdis the command used for writing data to flash.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
None
int SpiFlashWriteEnable ( XSpi SpiPtr)

This function enables writes to the Winbond Serial Flash memory.

Parameters
SpiPtris a pointer to the instance of the Spi device.
Returns
XST_SUCCESS if successful else XST_FAILURE.
Note
None
void SpiHandler ( void *  CallBackRef,
u32  StatusEvent,
unsigned int  ByteCount 
)

This function is the handler which performs processing for the SPI driver.

It is called from an interrupt context such that the amount of processing performed should be minimized. It is called when a transfer of SPI data completes or an error occurs.

This handler provides an example of how to handle SPI interrupts and is application specific.

Parameters
CallBackRefis the upper layer callback reference passed back when the callback function is invoked.
StatusEventis the event that just occurred.
ByteCountis the number of bytes transferred up until the event occurred.
Returns
None.
Note
None.