sam0: Adapt to flashpage/flashpage_pagewise API

This commit is contained in:
Koen Zandberg 2020-11-09 16:44:37 +01:00
parent 61052dbed7
commit 72d7a903a2
No known key found for this signature in database
GPG Key ID: 0895A893E6D2985B
4 changed files with 8 additions and 23 deletions

View File

@ -10,7 +10,7 @@ config CPU_COMMON_SAM0
select HAS_PERIPH_CPUID
select HAS_PERIPH_DMA
select HAS_PERIPH_FLASHPAGE
select HAS_PERIPH_FLASHPAGE_RAW
select HAS_PERIPH_FLASHPAGE_PAGEWISE
select HAS_PERIPH_FLASHPAGE_RWEE
select HAS_PERIPH_GPIO
select HAS_PERIPH_GPIO_IRQ

View File

@ -3,7 +3,7 @@ CPU_FAM := $(shell echo $(CPU_MODEL) | cut -c -6)
FEATURES_PROVIDED += periph_cpuid
FEATURES_PROVIDED += periph_dma
FEATURES_PROVIDED += periph_flashpage
FEATURES_PROVIDED += periph_flashpage_raw
FEATURES_PROVIDED += periph_flashpage_pagewise
FEATURES_PROVIDED += periph_flashpage_rwee
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
FEATURES_PROVIDED += periph_i2c_reconfigure

View File

@ -111,9 +111,9 @@ as shown in the NVM Row Organization figure. */
/* The minimum block size which can be written is 16B. However, the erase
* block is always FLASHPAGE_SIZE (SAM0 row).
*/
#define FLASHPAGE_RAW_BLOCKSIZE (16)
#define FLASHPAGE_WRITE_BLOCK_SIZE (16)
/* Writing should be always 4 byte aligned */
#define FLASHPAGE_RAW_ALIGNMENT (4)
#define FLASHPAGE_WRITE_BLOCK_ALIGNMENT (4)
/* Add RWWEE memory if supported by revision of the chip
* On some chips it is called RWW EEPROM while on some DATAFLASH, try to
* catch all without relying on the CPU model but on the named defines

View File

@ -284,28 +284,13 @@ static void _write_row(uint8_t *dst, const void *_data, size_t len, size_t chunk
}
}
void flashpage_write(int page, const void *data)
void flashpage_erase(unsigned page)
{
assert((unsigned)page < FLASHPAGE_NUMOF);
_erase_page(flashpage_addr(page), _cmd_erase_row);
if (data == NULL) {
return;
}
/* One RIOT page is FLASHPAGE_PAGES_PER_ROW SAM0 flash pages (a row) as
* defined in the file cpu/sam0_common/include/cpu_conf.h, therefore we
* have to split the write into FLASHPAGE_PAGES_PER_ROW raw calls
* underneath, each writing a physical page in chunks of 4 bytes (see
* flashpage_write_raw)
* The erasing is done once as a full row is always erased.
*/
_write_row(flashpage_addr(page), data, FLASHPAGE_SIZE, NVMCTRL_PAGE_SIZE,
_cmd_write_page);
}
void flashpage_write_raw(void *target_addr, const void *data, size_t len)
void flashpage_write(void *target_addr, const void *data, size_t len)
{
/* ensure the length doesn't exceed the actual flash size */
assert(((unsigned)target_addr + len) <=
@ -368,7 +353,7 @@ static void _cmd_write_page_rwwee(void)
#endif
}
void flashpage_rwwee_write_raw(void *target_addr, const void *data, size_t len)
void flashpage_rwwee_write(void *target_addr, const void *data, size_t len)
{
assert(((unsigned)target_addr + len) <=
(CPU_FLASH_RWWEE_BASE + (FLASHPAGE_SIZE * FLASHPAGE_RWWEE_NUMOF)));
@ -376,7 +361,7 @@ void flashpage_rwwee_write_raw(void *target_addr, const void *data, size_t len)
_write_row(target_addr, data, len, NVMCTRL_PAGE_SIZE, _cmd_write_page_rwwee);
}
void flashpage_rwwee_write(int page, const void *data)
void flashpage_rwwee_write_page(unsigned page, const void *data)
{
assert((unsigned)page < FLASHPAGE_RWWEE_NUMOF);