1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #17225 from dylad/pr/cpu/nrf91/add_periph_flashpage_support

cpu/nrf9160: add periph_flashpage support
This commit is contained in:
benpicco 2021-11-18 22:10:18 +01:00 committed by GitHub
commit 2ffbcecbe1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 2 deletions

View File

@ -1,12 +1,12 @@
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_cpuid
FEATURES_PROVIDED += periph_flashpage
FEATURES_PROVIDED += periph_flashpage_pagewise
FEATURES_PROVIDED += periph_gpio periph_gpio_irq
FEATURES_PROVIDED += periph_timer_periodic
FEATURES_PROVIDED += periph_uart_modecfg
ifneq (nrf9160,$(CPU_MODEL))
FEATURES_PROVIDED += periph_flashpage
FEATURES_PROVIDED += periph_flashpage_pagewise
FEATURES_PROVIDED += periph_hwrng
FEATURES_PROVIDED += periph_rtt_overflow
FEATURES_PROVIDED += periph_temperature

View File

@ -23,6 +23,10 @@
#include "assert.h"
#include "periph/flashpage.h"
#ifndef NRF_NVMC
#define NRF_NVMC NRF_NVMC_S
#endif
void flashpage_erase(unsigned page)
{
assert(page < (int)FLASHPAGE_NUMOF);
@ -31,7 +35,14 @@ void flashpage_erase(unsigned page)
/* erase given page */
NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Een;
#ifndef NRF_NVMC_S
NRF_NVMC->ERASEPAGE = (uint32_t)page_addr;
#else
/* NRF_NVMC->ERASEPAGE doesn't exist on nRF9160 family, the proper
way to erase a page is to write 0xFFFFFFFF in the first 32-bit
word of the page to erase it (see Chap 4.4.2 from nRF9160 datasheet ) */
*page_addr = UINT32_MAX;
#endif
while (NRF_NVMC->READY == 0) {}
}

View File

@ -8,6 +8,8 @@ config CPU_FAM_NRF9160
bool
select HAS_CPU_NRF9160
select HAS_PERIPH_CPUID
select HAS_PERIPH_FLASHPAGE
select HAS_PERIPH_FLASHPAGE_PAGEWISE
select HAS_PERIPH_GPIO
select HAS_PERIPH_GPIO_IRQ
select HAS_PERIPH_TIMER_PERIODIC

View File

@ -42,6 +42,21 @@ extern "C" {
#define CPU_IRQ_NUMOF (65U) /**< nRF9160 specific IRQ count */
/** @} */
/**
* @name Flash page configuration
* @{
*/
#define FLASHPAGE_SIZE (4096U) /**< Size of a page in bytes */
#define FLASHPAGE_NUMOF (256U) /**< Total number of flash pages */
/* The minimum block size which can be written is 4B. However, the erase
* block is always FLASHPAGE_SIZE.
*/
#define FLASHPAGE_WRITE_BLOCK_SIZE (4U) /**< Minimum block size */
/* Writing should be always 4 bytes aligned */
#define FLASHPAGE_WRITE_BLOCK_ALIGNMENT (4U) /**< Mandatory alignment */
/** @} */
#ifdef __cplusplus
}
#endif