nRF52832中对flash都读写操作
2018-01-22 17:40
1396 查看
使用SDK 12.2.0.
nRF52832应用程序的空间从0x0001F000开始。Flash的结构图:
协议栈提供了对flash操作的API,在\components\libraries中的fds和fstorage.
fds(Flash Data Storage)是一种极简的、面向记录的文件系统,用于芯片的闪存。文件存储为可变长度记录的集合。FDS支持同步读操作和异步写操作(写、更新和删除)。
Fstorage提供用来存储数据到flash、擦除flash的函数。
流程:
示例程序:
Main.c中添加程序;
#define NUM_PAGES 4 //分配四页
#define PAGE_SIZE_WORDS 256 //每页大小256字节
static uint8_t fs_callback_flag; //回调函数标识
static void fs_evt_handler(fs_evt_t const *const evt, fs_ret_t result)
{
if (result != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
else
{
NRF_LOG_INFO(" fstorage command successfullycompleted \n\r");
fs_callback_flag = 0;
}
}
static void fstorage_test(void)
{
staticuint32_t data;
uint32_tflash_data[4];
FS_REGISTER_CFG(fs_config_tfs_config) =
{
.callback = fs_evt_handler, //
Function for event callbacks.
.num_pages= NUM_PAGES, // Number of physicalflash
pages required.
.priority = 0xFE //
Priority for flash usage.
};
fs_ret_tret = fs_init();
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
//Readthe first 4 words of the page
SEGGER_RTT_printf(0,"Dataread from flash address 0x%X: \r\n", (uint32_t)fs_config.p_start_addr);
for(inti=0; i<4; i++)
{
flash_data[i]= *(fs_config.p_start_addr + i);
SEGGER_RTT_printf(0,"%X", flash_data[i]);
}
SEGGER_printf("\r\n");
//Erase one page (page 0).
SEGGER_RTT_printf(0,"Erasinga flash page at address 0x%X\r\n", (uint32_t)fs_config.p_start_addr);
fs_callback_flag= 1;
ret= fs_erase(&fs_config, fs_config.p_start_addr, 1, NULL);
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
while(fs_callback_flag== 1)
{
power_manage();
}
data= 0xAAAAAAAA;
SEGGER_RTT_printf(0,"Writingdata 0x%X to address 0x%X\r\n", data, (uint32_t)fs_config.p_start_addr);
fs_callback_flag= 1;
ret= fs_store(&fs_config, fs_config.p_start_addr, &data, 1, NULL); //Write
data to memory
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
while(fs_callback_flag== 1) { power_manage(); }
data= 0xBBBBBBBB;
SEGGER_RTT_printf(0,"Writingdata 0x%X to address 0x%X\r\n", data, (uint32_t)fs_config.p_start_addr +4);
fs_callback_flag= 1;
ret= fs_store(&fs_config, fs_config.p_start_addr + 1, &data, 1,NULL); //Write
data to memoryaddress
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
while(fs_callback_flag== 1) { power_manage(); }
//Readthe first 4 words of the page
SEGGER_RTT_printf(0,"Dataread from flash address 0x%X: \r\n", (uint32_t)fs_config.p_start_addr);
for(inti=0; i<4; i++)
{
flash_data[i]= *(fs_config.p_start_addr + i);
SEGGER_RTT_printf(0,"%X", flash_data[i]);
}
}
main()
{
.........
fstorage_test();
}
测试:
nRF52832应用程序的空间从0x0001F000开始。Flash的结构图:
协议栈提供了对flash操作的API,在\components\libraries中的fds和fstorage.
fds(Flash Data Storage)是一种极简的、面向记录的文件系统,用于芯片的闪存。文件存储为可变长度记录的集合。FDS支持同步读操作和异步写操作(写、更新和删除)。
Fstorage提供用来存储数据到flash、擦除flash的函数。
流程:
示例程序:
Main.c中添加程序;
#define NUM_PAGES 4 //分配四页
#define PAGE_SIZE_WORDS 256 //每页大小256字节
static uint8_t fs_callback_flag; //回调函数标识
static void fs_evt_handler(fs_evt_t const *const evt, fs_ret_t result)
{
if (result != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
else
{
NRF_LOG_INFO(" fstorage command successfullycompleted \n\r");
fs_callback_flag = 0;
}
}
static void fstorage_test(void)
{
staticuint32_t data;
uint32_tflash_data[4];
FS_REGISTER_CFG(fs_config_tfs_config) =
{
.callback = fs_evt_handler, //
Function for event callbacks.
.num_pages= NUM_PAGES, // Number of physicalflash
pages required.
.priority = 0xFE //
Priority for flash usage.
};
fs_ret_tret = fs_init();
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
//Readthe first 4 words of the page
SEGGER_RTT_printf(0,"Dataread from flash address 0x%X: \r\n", (uint32_t)fs_config.p_start_addr);
for(inti=0; i<4; i++)
{
flash_data[i]= *(fs_config.p_start_addr + i);
SEGGER_RTT_printf(0,"%X", flash_data[i]);
}
SEGGER_printf("\r\n");
//Erase one page (page 0).
SEGGER_RTT_printf(0,"Erasinga flash page at address 0x%X\r\n", (uint32_t)fs_config.p_start_addr);
fs_callback_flag= 1;
ret= fs_erase(&fs_config, fs_config.p_start_addr, 1, NULL);
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
while(fs_callback_flag== 1)
{
power_manage();
}
data= 0xAAAAAAAA;
SEGGER_RTT_printf(0,"Writingdata 0x%X to address 0x%X\r\n", data, (uint32_t)fs_config.p_start_addr);
fs_callback_flag= 1;
ret= fs_store(&fs_config, fs_config.p_start_addr, &data, 1, NULL); //Write
data to memory
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
while(fs_callback_flag== 1) { power_manage(); }
data= 0xBBBBBBBB;
SEGGER_RTT_printf(0,"Writingdata 0x%X to address 0x%X\r\n", data, (uint32_t)fs_config.p_start_addr +4);
fs_callback_flag= 1;
ret= fs_store(&fs_config, fs_config.p_start_addr + 1, &data, 1,NULL); //Write
data to memoryaddress
if(ret != FS_SUCCESS)
{
bsp_indication_set(BSP_INDICATE_FATAL_ERROR);
}
while(fs_callback_flag== 1) { power_manage(); }
//Readthe first 4 words of the page
SEGGER_RTT_printf(0,"Dataread from flash address 0x%X: \r\n", (uint32_t)fs_config.p_start_addr);
for(inti=0; i<4; i++)
{
flash_data[i]= *(fs_config.p_start_addr + i);
SEGGER_RTT_printf(0,"%X", flash_data[i]);
}
}
main()
{
.........
fstorage_test();
}
测试:
相关文章推荐
- nRF52832中对flash都读写操作
- nRF52832中对flash都读写操作遇到的问题一
- 封装对STM32的Flash读写操作
- MSP430F5438A 内存Flash 读写操作
- sTM32F10X SPI操作flash MX25L64读写数据
- niosII 对 FLASH 进行读写操作
- STM32F10X SPI操作flash MX25L64读写数据
- STM32 flash 读写操作
- MSP430F5438A 内存Flash 读写操作
- flash 读写、操作flash cookie的方法
- 基于arm7的(lpc2388)flash的读写操作
- STM32F10X SPI操作flash MX25L64读写数据(转)
- MSP430单片机学习(一)——Flash读写操作
- STM32:Flash擦除与读写操作(HAL库)
- STM32F10X SPI操作flash MX25L64读写数据
- EEPROM通过IIC协议进行读写操作
- Java IO操作——字节流进行读写操作
- 封装对excel的操作,包括本地读写 excel和流中输出excel
- GSL矩阵操作2-矩阵读写
- Android SD卡简单的文件读写操作