1 #ifndef DRIVER_SPI_MEMORY_H 2 #define DRIVER_SPI_MEMORY_H 58 #define SPI_MEMORY_HINT_GENERIC 0 59 #define SPI_MEMORY_HINT_GENERIC_SRAM 1 61 #define SPI_MEMORY_DATA_BUFFER_COMMAND_SIZE 4 75 struct spi_memory_state_t
89 struct spi_memory_state_t *
State;
96 uint32_t AddressBytes : 3;
97 uint32_t HasPowerControl : 1;
98 uint32_t HasProtection : 1;
99 uint32_t HasChipErase : 1;
100 uint32_t HasWriteEnable : 1;
101 uint32_t HasProgrammingTime : 1;
102 uint32_t HasPowerPort : 1;
103 uint32_t Reserved1 : 3;
104 uint32_t PowerPin : 5;
105 uint32_t PowerActiveHigh : 1;
106 uint32_t Reserved2 : 6;
130 #define SPI_MEMORY_DATA_BUFFER_TYPE(type, size) \ 131 typedef struct type \ 133 struct spi_memory_data_buffer_header Header; \ 134 uint8_t Data[(size)]; \ 180 enum spi_memory_protection_t Protection);
195 uint32_t SectorIndex);
208 uint32_t SectorIndex);
223 uint32_t BlockIndex);
236 uint32_t BlockIndex);
435 const void *SrcBuffer,
539 extern bool SpiMemoryChecksum(
const struct spi_memory_t *Memory,
571 #endif // DRIVER_SPI_MEMORY_H static bool SpiMemoryReadPageWithOffset(const struct spi_memory_t *Memory, void *DstBuffer, uint32_t PageIndex, uint32_t PageOffset, uint32_t ByteCount)
Name: SpiMemoryReadPageWithOffset Reads the page PageIndex with offset from SPI memory to DstBuffer...
bool SpiMemoryDisable(const struct spi_memory_t *Memory)
Name: SpiMemoryDisable Sets SPI memory in deep powerdown. Called from main program level...
static bool SpiMemoryVerifyPage(const struct spi_memory_t *Memory, uint32_t PageIndex, const void *SrcBuffer)
Name: SpiMemoryVerifyPage Verifies data in page PageIndex in SPI memory with SrcBuffer. Called from main program level.
uint8_t BlockSizeExponent
bool SpiMemoryInit(const struct spi_memory_t *Memory)
Name: SpiMemoryInit Waits for power on and then release SPI memory from deep powerdown. KŲ!! ???????????? Called from main program level.
uint8_t SectorSizeExponent
bool SpiMemorySetWriteProtection(const struct spi_memory_t *Memory, enum spi_memory_protection_t Protection)
Name: SpiMemorySetWriteProtection Sets write protection for SPI memory and waits for completion...
bool SpiMemoryIsBusy(const struct spi_memory_t *Memory)
Name: SpiMemoryIsBusy Checks if the memory write or erase operation is in progress Called from main p...
bool SpiMemoryEraseBlock(const struct spi_memory_t *Memory, uint32_t BlockIndex)
Name: SpiMemoryEraseBlock Erases given block in SPI memory and waits for completion. Called from main program level.
bool SpiMemoryWriteAsync(const struct spi_memory_t *Memory, uint32_t DstAddress, struct spi_memory_data_buffer_header *SrcBuffer, uint32_t ByteCount, spi_memory_completion_callback_t Callback)
Name: SpiMemoryWriteAsync Writes bytes from SrcBuffer to SPI memory. It the SPI memory is page based...
uint16_t VccPowerUpTimeUs
void(* spi_memory_completion_callback_t)(const struct spi_memory_t *Memory, struct spi_memory_data_buffer_header *BufferHeader)
bool SpiMemoryEraseBlockAsync(const struct spi_memory_t *Memory, uint32_t BlockIndex)
Name: SpiMemoryEraseBlockAsync Begines erasing given block in SPI memory. Called from main program le...
struct spi_memory_state_t * State
bool SpiMemoryWrite(const struct spi_memory_t *Memory, uint32_t DstAddress, const void *SrcBuffer, uint32_t ByteCount)
Name: SpiMemoryWrite Writes bytes from SrcBuffer to SPI memory. It the SPI memory is page based...
static bool SpiMemoryWritePage(const struct spi_memory_t *Memory, uint32_t PageIndex, const void *SrcBuffer)
Name: SpiMemoryWritePage Writes page data from SrcBuffer to page PageIndex in SPI memory...
uint8_t MemorySizeExponent
Driver for the MCU's SPI blocks.
uint16_t ReleasePdTimeAfterCommandUs
#define SPI_MEMORY_DATA_BUFFER_TYPE(type, size)
bool SpiMemoryErase(const struct spi_memory_t *Memory)
Name: SpiMemoryErase Erases the whole SPI memory and waits for completion. Called from main program l...
bool SpiMemoryVerify(const struct spi_memory_t *Memory, uint32_t SrcAddress, const void *SrcBuffer, uint32_t ByteCount)
Name: SpiMemoryVerify Verifies data in SPI memory with SrcBuffer. Called from main program level...
bool SpiMemoryReadAsync(const struct spi_memory_t *Memory, struct spi_memory_data_buffer_header *DstBuffer, uint32_t SrcAddress, uint32_t ByteCount, spi_memory_completion_callback_t Callback)
Name: SpiMemoryReadAsync Reads bytes from SPI memory to DstBuffer. Called from main program level...
static bool SpiMemoryReadPageAsync(const struct spi_memory_t *Memory, struct spi_memory_data_buffer_header *DstBuffer, uint32_t PageIndex, spi_memory_completion_callback_t Callback)
Name: SpiMemoryReadPageAsync Reads the page PageIndex from SPI memory to DstBuffer. Called from main program level. Does not wait for completion, the completion callback is called instead when transfer is finished. Calling code should not use SPI bus until the completion callback is called.
uint16_t ReleasePdTimeAfterCsActiveUs
static bool SpiMemoryReadPage(const struct spi_memory_t *Memory, void *DstBuffer, uint32_t PageIndex)
Name: SpiMemoryReadPage Reads the page PageIndex from SPI memory to DstBuffer. Called from main progr...
#define SPI_MEMORY_DATA_BUFFER_COMMAND_SIZE
bool SpiMemoryEraseAsync(const struct spi_memory_t *Memory)
Name: SpiMemoryEraseAsync Begines erasing the whole SPI memory. Called from main program level...
static bool SpiMemoryReadPageWithOffsetAsync(const struct spi_memory_t *Memory, struct spi_memory_data_buffer_header *DstBuffer, uint32_t PageIndex, uint32_t PageOffset, uint32_t ByteCount, spi_memory_completion_callback_t Callback)
Name: SpiMemoryReadPageWithOffsetAsync Reads the page PageIndex with offset from SPI memory to DstBuf...
void SpiMemoryPowerUp(const struct spi_memory_t *Memory)
Name: SpiMemoryPowerUp Power up VCC for SPI memory. SpiEnable() must be called after this function to...
bool SpiMemoryEraseSector(const struct spi_memory_t *Memory, uint32_t SectorIndex)
Name: SpiMemoryEraseSector Erases given sector in SPI memory and waits for completion. Called from main program level.
bool SpiMemoryEraseSectorAsync(const struct spi_memory_t *Memory, uint32_t SectorIndex)
Name: SpiMemoryEraseSectorAsync Begines erasing given sector in SPI memory. Called from main program ...
void SpiMemoryPowerDown(const struct spi_memory_t *Memory)
Name: SpiMemoryPowerDown Power down VCC for SPI memory. SpiDisable() must be called prior to this fun...
bool SpiMemoryRead(const struct spi_memory_t *Memory, void *DstBuffer, uint32_t SrcAddress, uint32_t ByteCount)
Name: SpiMemoryRead Reads bytes from SPI memory to DstBuffer. Called from main program level...
static bool SpiMemoryWritePageAsync(const struct spi_memory_t *Memory, uint32_t PageIndex, struct spi_memory_data_buffer_header *SrcBuffer, spi_memory_completion_callback_t Callback)
Name: SpiMemoryWritePageAsync Writes page data from SrcBuffer to page PageIndex in SPI memory...