EZ-USB® FX3 USB SPI (DMA Mode) Example | 赛普拉斯半导体
EZ-USB® FX3 USB SPI (DMA Mode) Example
This example illustrates the use of the FX3 firmware APIs to implement a USB SPI flash programming example.
The device enumerates as a vendor specific USB device with only the control endpoint and provides a set of vendor commands to read/write the data on SPI flash devices.
A SPI flash write requires the following sequences:
- Erase the required sector: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue as 1 and length as 0.
- Wait for erase to complete: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue as 0 and IN length as 1. Repeat this until the returned value has WIP zero.
- Write data to page: CY_FX_RQT_SPI_FLASH_WRITE with correct parameters.
- Wait for write to complete: CY_FX_RQT_SPI_FLASH_ERASE_POLL with wValue as 0 and IN length as 1. Repeat this until the returned value has WIP zero.
Vendor Commands implemented:
-
Read Firmware ID
bmRequestType = 0xC0 bRequest = 0xB0 wValue = 0x0000 wIndex = 0x0000 wLength = 0x0008 Data response = "fx3 spi"
-
Write to SPI flash
bmRequestType = 0x40 bRequest = 0xC2 wValue = 0x0000 wIndex = SPI flash page address (Each page is assumed to be of 256 bytes and the byte address is computed by multiplying wIndex by 256) wLength = Length of data to be written (Should be a multiple of 256 and less than or equal to 4096) Data phase should contain the actual data to be written
-
Read from SPI flash
bmRequestType = 0xC0 bRequest = 0xC3 wValue = 0x0000 wIndex = SPI flash page address (Each page is assumed to be of 256 bytes and the byte address is computed by multiplying wIndex by 256) wLength = Length of data to be read (Should be a multiple of 256 and less than or equal to 4096) Data phase will contain the data read from the flash device
-
Erase SPI flash sector
bmRequestType = 0x40 bRequest = 0xC4 wValue = 0x0001 wIndex = SPI flash sector address (Each sector is assumed to be of 64 KB and the byte address is computed by multiplying wIndex by 65536) wLength = 0x0000 No data phase is associated with this command.
-
Check SPI busy status
bmRequestType = 0xC0 bRequest = 0xC4 wValue = 0x0000 wIndex = 0x0000 wLength = 0x0001 Data phase will indicate SPI flash busy status
0x00 means SPI flash has finished write/erase operation and is ready for next command.
Non-zero value means that SPI flash is still busy processing previous write/erase command.
注意:bmRequestType, bRequest, wValue, wIndex, wLength are fields of setup packet. Refer USB specification for understanding format of setup data.
Pre-built binaries are provided in the Release and Debug folders in the zip file. FX3 SDK should be installed in the system to rebuild the example project with any modifications made.