ospipsv
Xilinx SDK Drivers API Documentation
xospipsv_flash_intr_example.c File Reference

Overview

This file contains a design example using the OSPIPSV driver (xospipsv) The example writes to flash in IO mode and reads it back in DMA mode.

It runs in interrupt mode. The hardware which this example runs on, must have an octal serial Flash (Micron) for it to run.

This example has been tested with the Micron Octal Serial Flash (mt35xu01gbba).

Note

None.

 MODIFICATION HISTORY:
 Ver   Who Date     Changes


1.0 sk 01/09/19 First release 1.0 akm 03/29/19 Fixed data alignment issues on IAR compiler 1.1 sk 07/23/19 Based on RX Tuning, updated the dummy cycles. sk 08/08/19 Issue device reset to bring back to default state.

 

Functions

int OspiPsvInterruptFlashExample (XScuGic *IntcInstancePtr, XOspiPsv *OspiPsvInstancePtr, u16 OspiPsvDeviceId)
 The purpose of this function is to illustrate how to use the XOspiPsv device driver using OSPI flash devices greater than or equal to 128Mb. More...
 
void OspiPsvHandler (void *CallBackRef, u32 StatusEvent)
 Callback handler. More...
 
int FlashReadID (XOspiPsv *OspiPsvPtr)
 Reads the flash ID and identifies the flash in FCT table. More...
 
int FlashErase (XOspiPsv *OspiPsvPtr, u32 Address, u32 ByteCount, u8 *WriteBfrPtr)
 This function erases the sectors in the serial Flash connected to the OSPIPSV interface. More...
 
int FlashIoWrite (XOspiPsv *OspiPsvPtr, u32 Address, u32 ByteCount, u8 *WriteBfrPtr)
 This function writes to the serial Flash connected to the OSPIPSV interface. More...
 
int FlashLinearWrite (XOspiPsv *OspiPsvPtr, u32 Address, u32 ByteCount, u8 *WriteBfrPtr)
 This function writes to the serial Flash connected to the OSPIPSV interface. More...
 
int FlashRead (XOspiPsv *OspiPsvPtr, u32 Address, u32 ByteCount, u8 *WriteBfrPtr, u8 *ReadBfrPtr)
 This function performs read. More...
 
int BulkErase (XOspiPsv *OspiPsvPtr, u8 *WriteBfrPtr)
 This functions performs a bulk erase operation when the flash device has a single die. More...
 
int DieErase (XOspiPsv *OspiPsvPtr, u8 *WriteBfrPtr)
 This functions performs a die erase operation on all the die in the flash device. More...
 
int FlashEnterExit4BAddMode (XOspiPsv *OspiPsvPtr, int Enable)
 This API enters the flash device into 4 bytes addressing mode. More...
 
int FlashSetSDRDDRMode (XOspiPsv *OspiPsvPtr, int Mode)
 This API enters the flash device into Octal DDR mode or exit from octal DDR mode (switches to Extended SPI mode). More...
 
int main (void)
 Main function to call the OSPIPSV Flash Interrupt example. More...
 
u32 XOspiPsv_Get_Proto (XOspiPsv *OspiPsvInstancePtr, int Read)
 The purpose of this function is to determine the number of lines used for command, address and data. More...
 

Function Documentation

int BulkErase ( XOspiPsv OspiPsvPtr,
u8 *  WriteBfrPtr 
)

This functions performs a bulk erase operation when the flash device has a single die.

Works for both Spansion and Micron

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
WritBfrPtris the pointer to command+address to be sent
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, and XOspiPsv_IntrTransfer().

Referenced by FlashErase().

int DieErase ( XOspiPsv OspiPsvPtr,
u8 *  WriteBfrPtr 
)

This functions performs a die erase operation on all the die in the flash device.

This function uses the die erase command for Micron 512Mbit and 1Gbit

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
WritBfrPtris the pointer to command+address to be sent
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, and XOspiPsv_IntrTransfer().

Referenced by FlashErase().

int FlashEnterExit4BAddMode ( XOspiPsv OspiPsvPtr,
int  Enable 
)

This API enters the flash device into 4 bytes addressing mode.

As per the Micron spec, before issuing the command to enter into 4 byte addr mode, a write enable command is issued.

Parameters
OspiPtris a pointer to the OSPIPSV driver component to use.
Enableis a either 1 or 0 if 1 then enters 4 byte if 0 exits.
Returns
- XST_SUCCESS if successful.
  • XST_FAILURE if it fails.

References XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, and XOspiPsv_IntrTransfer().

Referenced by OspiPsvInterruptFlashExample(), and OspiPsvPolledFlashExample().

int FlashErase ( XOspiPsv OspiPsvPtr,
u32  Address,
u32  ByteCount,
u8 *  WriteBfrPtr 
)

This function erases the sectors in the serial Flash connected to the OSPIPSV interface.

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
Addresscontains the address of the first sector which needs to be erased.
ByteCountcontains the total size to be erased.
Pointerto the write buffer (which is to be transmitted)
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References XOspiPsv_Msg::Addr, XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, BulkErase(), XOspiPsv_Msg::ByteCount, DieErase(), XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, and XOspiPsv_IntrTransfer().

Referenced by OspiPsvInterruptFlashExample(), and OspiPsvPolledFlashExample().

int FlashIoWrite ( XOspiPsv OspiPsvPtr,
u32  Address,
u32  ByteCount,
u8 *  WriteBfrPtr 
)

This function writes to the serial Flash connected to the OSPIPSV interface.

All the data put into the buffer must be in the same page of the device with page boundaries being on 256 byte boundaries. This can be used in IO or DMA mode.

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
Addresscontains the address to write data to in the Flash.
ByteCountcontains the number of bytes to write.
Pointerto the write buffer (which is to be transmitted)
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References XOspiPsv_Msg::Addr, XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, XOspiPsv_Get_Proto(), and XOspiPsv_IntrTransfer().

Referenced by OspiPsvInterruptFlashExample(), and OspiPsvPolledFlashExample().

int FlashLinearWrite ( XOspiPsv OspiPsvPtr,
u32  Address,
u32  ByteCount,
u8 *  WriteBfrPtr 
)

This function writes to the serial Flash connected to the OSPIPSV interface.

All the data put into the buffer must be in the same page of the device with page boundaries being on 256 byte boundaries. This can be used when controller is in Linear mode.

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
Addresscontains the address to write data to in the Flash.
ByteCountcontains the number of bytes to write.
Pointerto the write buffer (which is to be transmitted)
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References XOspiPsv_Msg::Addr, XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, XOspiPsv_Get_Proto(), and XOspiPsv_PollTransfer().

Referenced by OspiPsvPolledFlashExample().

int FlashRead ( XOspiPsv OspiPsvPtr,
u32  Address,
u32  ByteCount,
u8 *  WriteBfrPtr,
u8 *  ReadBfrPtr 
)

This function performs read.

DMA is the default setting.

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
Addresscontains the address of the first sector which needs to be erased.
ByteCountcontains the total size to be erased.
Pointerto the write buffer which contains data to be transmitted
Pointerto the read buffer to which valid received data should be written
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References XOspiPsv_Msg::Addr, XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, XOspiPsv_Get_Proto(), and XOspiPsv_IntrTransfer().

Referenced by OspiPsvInterruptFlashExample(), and OspiPsvPolledFlashExample().

int FlashReadID ( XOspiPsv OspiPsvPtr)
int FlashSetSDRDDRMode ( XOspiPsv OspiPsvPtr,
int  Mode 
)

This API enters the flash device into Octal DDR mode or exit from octal DDR mode (switches to Extended SPI mode).

Parameters
OspiPtris a pointer to the OSPIPSV driver component to use.
Enableis either 1 or 0 if 1 then enter octal DDR mode if 0 exits.
Returns
- XST_SUCCESS if successful.
  • XST_FAILURE if it fails.

References XOspiPsv_Msg::Addr, XOspiPsv_Msg::Addrsize, XOspiPsv_Msg::Addrvalid, XOspiPsv_Msg::ByteCount, XOspiPsv_Msg::Dummy, XOspiPsv_Msg::Flags, XOspiPsv_Msg::IsDDROpCode, XOspiPsv_Msg::Opcode, XOspiPsv::OpMode, XOspiPsv_Msg::Proto, XOspiPsv_Msg::RxBfrPtr, XOspiPsv::SdrDdrMode, XOspiPsv_Msg::TxBfrPtr, XOspiPsv_ConfigureAutoPolling(), XOspiPsv_IntrTransfer(), and XOspiPsv_SetSdrDdrMode().

Referenced by OspiPsvInterruptFlashExample(), and OspiPsvPolledFlashExample().

int main ( void  )

Main function to call the OSPIPSV Flash Interrupt example.

Parameters
None
Returns
XST_SUCCESS if successful, otherwise XST_FAILURE.
Note
None

References OspiPsvInterruptFlashExample().

void OspiPsvHandler ( void *  CallBackRef,
u32  StatusEvent 
)

Callback handler.

Parameters
None.
Returns
None
Note
None.

Referenced by OspiPsvInterruptFlashExample().

int OspiPsvInterruptFlashExample ( XScuGic *  IntcInstancePtr,
XOspiPsv OspiPsvInstancePtr,
u16  OspiPsvDeviceId 
)

The purpose of this function is to illustrate how to use the XOspiPsv device driver using OSPI flash devices greater than or equal to 128Mb.

This function reads data in either DMA or DAC mode.

Parameters
None.
Returns
XST_SUCCESS if successful, else XST_FAILURE.
Note
None.

References FlashEnterExit4BAddMode(), FlashErase(), FlashIoWrite(), FlashRead(), FlashReadID(), FlashSetSDRDDRMode(), OspiPsvHandler(), XOspiPsv_CfgInitialize(), XOspiPsv_DeviceReset(), XOspiPsv_LookupConfig(), XOspiPsv_SelectFlash(), XOspiPsv_SetClkPrescaler(), XOspiPsv_SetOptions(), and XOspiPsv_SetStatusHandler().

Referenced by main().

u32 XOspiPsv_Get_Proto ( XOspiPsv OspiPsvInstancePtr,
int  Read 
)

The purpose of this function is to determine the number of lines used for command, address and data.

Parameters
OspiPsvPtris a pointer to the OSPIPSV driver component to use.
Readis to tell whether a read or write
Returns
returns value to program the lines for command, address and data.
Note
None.

References XOspiPsv::OpMode.

Referenced by FlashIoWrite(), FlashLinearWrite(), and FlashRead().