summaryrefslogtreecommitdiff
path: root/controller/fw/src/spi_flash.h
blob: 6443f115bce725896ae15143edae1111c945d3bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef __SPI_FLASH_H__
#define __SPI_FLASH_H__

#include <stdbool.h>
#include <unistd.h>

#include <stm32f407xx.h>

struct spi_mem_id {
    size_t size;
    uint8_t mfg_id;
    uint8_t type;
};

struct spi_flash_if {
    struct spi_mem_id id;
    volatile SPI_TypeDef *spi;
    size_t page_size;
    void (*cs)(bool val);
};

void spif_init(struct spi_flash_if *spif, size_t page_size, SPI_TypeDef *spi, void (*cs)(bool val));

void spif_write(struct spi_flash_if *spif, size_t addr, size_t len, const char* data);
ssize_t spif_read(struct spi_flash_if *spif, size_t addr, size_t len, char* data);

void spif_clear_mem(struct spi_flash_if *spif);
void spif_clear_sector(struct spi_flash_if *spif, size_t addr);

void spif_deep_power_down(struct spi_flash_if *spif);
void spif_wakeup(struct spi_flash_if *spif);

#endif /* __SPI_FLASH_H__ */