35 char name[DEVICE_NAME_LENGTH],
42 flash->pageSize = pageSize;
43 flash->pageCount = pageCount;
49 strcpy(handle.name, name);
50 handle.device = flash;
56#ifndef DOXYGEN_PRIVATE
67 SPI spi = flash->base;
69 spi.
port->ODR &= ~spi.cs;
70 spi.
transmit(&spi, FLASH_WRITE_ENABLE);
84 SPI spi = flash->base;
86 spi.
port->ODR &= ~spi.cs;
87 *status = spi.
transmit(&spi, FLASH_READ_STATUS_REGISTER_1);
102 SPI spi = flash->base;
104 spi.
port->ODR &= ~spi.cs;
105 *status = spi.
transmit(&spi, FLASH_READ_STATUS_REGISTER_2);
120 SPI spi = flash->base;
122 spi.
port->ODR &= ~spi.cs;
123 *status = spi.
transmit(&spi, FLASH_READ_STATUS_REGISTER_3);
142 SPI spi = flash->base;
146 spi.
port->ODR &= ~spi.cs;
147 spi.
transmit(&spi, FLASH_ERASE_CHIP);
153 }
while (status & 0x01);
169 SPI spi = flash->base;
171 spi.
port->ODR &= ~spi.cs;
174 spi.
transmit(&spi, FLASH_PAGE_PROGRAM);
175 spi.
transmit(&spi, (address & 0xFF0000) >> 16);
176 spi.
transmit(&spi, (address & 0xFF00) >> 8);
177 spi.
transmit(&spi, (address & 0xFF));
180 for (
int i = 0; i < 256; i++) {
189 }
while (status & 0x1);
203 SPI spi = flash->base;
205 spi.
port->ODR &= ~spi.cs;
208 spi.
transmit(&spi, FLASH_READ_DATA);
209 spi.
transmit(&spi, (address & 0xFF0000) >> 16);
210 spi.
transmit(&spi, (address & 0xFF00) >> 8);
211 spi.
transmit(&spi, (address & 0xFF));
213 for (
int i = 0; i < 256; i++) {
void _Flash_readStatus2(Flash *flash, uint8_t *status)
Read from Status Register 2.
void Flash_readPage(Flash *, uint32_t, volatile uint8_t *)
Read from flash.
void _Flash_readStatus1(Flash *flash, uint8_t *status)
Read from Status Register 1.
void _Flash_readStatus3(Flash *flash, uint8_t *status)
Read from Status Register 3.
void Flash_writePage(Flash *, uint32_t, uint8_t *)
Write page to flash.
DeviceHandle_t Flash_init(Flash *flash, char name[DEVICE_NAME_LENGTH], GPIO_TypeDef *port, unsigned long cs, int pageSize, long pageCount)
Initialise flash struct.
void _Flash_writeEnable(Flash *flash)
Send Write Enable instruction to the flash device.
void Flash_erase(Flash *)
Erase flash chip.
void SPI_init(SPI *, DeviceType, SPI_TypeDef *, DataFormat, GPIO_TypeDef *, unsigned long)
Initialiser for an SPI device interface.
@ MEMORY_FLASH
Flash memory.
Struct definition for SPI interface. Provides the interface for API consumers to interact with the SP...
uint16_t(* transmit)(struct SPI *, uint16_t)
SPI transmit method.
GPIO_TypeDef * port
Pointer to GPIO port struct.
unsigned long cs
Device chip select address.