46#include "px_at45d_cfg.h"
49#ifndef PX_AT45D_CFG_DEVICE
50#error "PX_AT45D_CFG_DEVICE not specified"
52#ifndef PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE
53#error "PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE not specified"
72#if (PX_AT45D_CFG_DEVICE == PX_AT45DB011)
73#define PX_AT45D_PAGES 512ul
74#define PX_AT45D_PAGE_SIZE (256 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 8 : 0))
75#elif (PX_AT45D_CFG_DEVICE == PX_AT45DB021)
76#define PX_AT45D_PAGES 1024ul
77#define PX_AT45D_PAGE_SIZE (256 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 8 : 0))
78#elif (PX_AT45D_CFG_DEVICE == PX_AT45DB041)
79#define PX_AT45D_PAGES 2048ul
80#define PX_AT45D_PAGE_SIZE (256 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 8 : 0))
81#define PX_AT45D_DENSITY 0x1C
82#elif (PX_AT45D_CFG_DEVICE == PX_AT45DB081)
83#define PX_AT45D_PAGES 4096ul
84#define PX_AT45D_PAGE_SIZE (256 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 16 : 0))
85#elif (PX_AT45D_CFG_DEVICE == PX_AT45DB161)
86#define PX_AT45D_PAGES 4096ul
87#define PX_AT45D_PAGE_SIZE (512 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 16 : 0))
88#elif (PX_AT45D_CFG_DEVICE == PX_AT45DB321)
89#define PX_AT45D_PAGES 8192ul
90#define PX_AT45D_PAGE_SIZE (512 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 16 : 0))
91#elif (PX_AT45D_CFG_DEVICE == PX_AT45DB642)
92#define PX_AT45D_PAGES 8192ul
93#define PX_AT45D_PAGE_SIZE (1024 + (PX_AT45D_CFG_PWR_OF_TWO_PAGE_SIZE==0 ? 32 : 0))
95#error "Invalid AT45D device specified"
99#define PX_AT45D_FLASH_SIZE_BYTES (PX_AT45D_PAGES * PX_AT45D_PAGE_SIZE)
102#define PX_AT45D_ADR_MAX (PX_AT45D_FLASH_SIZE_BYTES - 1)
106#define PX_AT45D_STATUS_READY 7
107#define PX_AT45D_STATUS_COMP 6
108#define PX_AT45D_STATUS_DENSITY_MASK 0x3C
109#define PX_AT45D_STATUS_PROTECT 1
110#define PX_AT45D_STATUS_PAGE_SIZE 0
114#define PX_AT45D_MAX_SPI_CLOCK_HZ 33000000
116#define PX_AT45D_SPI_MODE PX_SPI_MODE0
118#define PX_AT45D_SPI_DATA_ORDER PX_SPI_DATA_ORDER_MSB
122#if (PX_AT45D_ADR_MAX <= 0xffff)
212 uint16_t start_byte_in_page,
213 uint16_t nr_of_bytes);
251 uint16_t start_byte_in_page,
252 uint16_t nr_of_bytes);
void px_at45d_rd_page_offset(void *buf, uint16_t page, uint16_t start_byte_in_page, uint16_t nr_of_bytes)
Partial read of data in a page of DataFlash.
uint8_t px_at45d_get_status(void)
Read the status register of the DataFlash.
bool px_at45d_ready(void)
Check if DataFlash is ready for the next read or write access.
void px_at45d_wr_page(const void *buf, uint16_t page)
Write a page from DataFlash.
uint16_t px_at45d_rd(void *buf, px_at45d_adr_t adr, uint16_t nr_of_bytes)
Read data from DataFlash.
void px_at45d_resume_from_deep_power_down(void)
Power up device to resume communication.
bool px_at45d_set_page_size_to_pwr_of_two(void)
Sets the page size of the DataFlash to a power of two.
void px_at45d_erase(uint16_t page)
Erase a page of DataFlash.
void px_at45d_deep_power_down(void)
Power down device to minimise power consumption.
void px_at45d_ultra_deep_power_down(void)
Power down device to minimise power consumption.
void px_at45d_wr_page_offset(const void *buf, uint16_t page, uint16_t start_byte_in_page, uint16_t nr_of_bytes)
Partial write of data in a page of DataFlash.
uint32_t px_at45d_adr_t
Address size can be optimized, depending on maximum size of FLASH.
void px_at45d_init(px_spi_handle_t *handle)
Initialise driver.
bool px_at45d_page_size_is_pwr_of_two(void)
Check if page size of the DataFlash is a power of two.
void px_at45d_rd_page(void *buf, uint16_t page)
Read a page from DataFlash.
void px_at45d_resume_from_ultra_deep_power_down(void)
Power up device to resume communication.