xflash: add xflash_multipage_program and documentation

Add a new high-level command to perform multipage writes quickly.
This commit is contained in:
Yuri D'Elia 2021-06-08 15:25:16 +02:00
parent 86e753fe37
commit b398a09a4f
2 changed files with 34 additions and 3 deletions

View file

@ -116,6 +116,28 @@ void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt)
_CS_HIGH();
}
void xflash_multipage_program(uint32_t addr, uint8_t* data, uint16_t cnt)
{
while(cnt)
{
xflash_enable_wr();
_CS_LOW();
xflash_send_cmdaddr(_CMD_PAGE_PROGRAM, addr);
while(1)
{
// send data
_SPI_TX(*(data++));
if(!--cnt || !(++addr & 0xFF))
{
// on a page boundary or end of write
_CS_HIGH();
xflash_wait_busy();
break;
}
}
}
}
void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt)
{
_CS_LOW();

View file

@ -34,16 +34,25 @@ extern uint8_t xflash_rd_status_reg(void);
extern void w25x20cl_wr_status_reg(uint8_t val);
#endif
extern void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt);
extern void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt);
extern void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt);
extern void xflash_sector_erase(uint32_t addr);
extern void xflash_block32_erase(uint32_t addr);
extern void xflash_block64_erase(uint32_t addr);
extern void xflash_chip_erase(void);
extern void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt);
extern void xflash_rd_uid(uint8_t* uid);
extern void xflash_wait_busy(void);
// write up to a single page of data (256bytes)
extern void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt);
// write up to a single page of data from program memory
extern void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt);
// xflash_multipage_program: high-level interface for multi-page writes.
// Write any amount of data, chunking writes to page boundaries as needed.
// Automatically enables writes and waits for completion.
extern void xflash_multipage_program(uint32_t addr, uint8_t* data, uint16_t cnt);
#if defined(__cplusplus)
}
#endif //defined(__cplusplus)