1. 程式人生 > >nrf51822教程系列 向nrf51822 flash中寫入資料(flash write )

nrf51822教程系列 向nrf51822 flash中寫入資料(flash write )

前言 暫存器介紹

0 .1 Non-Volatile Memory Controller (NVMC)

Functional description
The Non-volatile Memory Controller (NVMC) is used for writing and erasing Non-volatile Memory (NVM).
Before a write can be performed the NVM must be enabled for writing in CONFIG.WEN. Similarly, before an
erase can be performed the NVM must be enabled for erasing in CONFIG.EEN. The user must make sure
that writing and erasing is not enabled at the same time, failing to do so may result in unpredictable behavior.



0.2 Factory Information Configuration Registers (FICR)

Functional description
Factory Information Configuration Registers are pre-programmed in factory and cannot be erased by the
user. These registers contain chip specific information and configuration


1  確定寫入flash 的位置

     通過FICR 暫存器,讀取nrf51822的flash page size 和 the number of pages

    uint32_t * addr;    
    uint32_t   pg_size;
    uint32_t   pg_num;
    pg_size = NRF_FICR->CODEPAGESIZE;
    pg_num  = NRF_FICR->CODESIZE - 1;  // Use last page in flash
        // Start address:
        addr = (uint32_t *)(pg_size * pg_num);

2  擦除flash page(寫入資料前,先把該page資料擦除)

        // Erase page:
        flash_page_erase(addr);

/** @brief Function for erasing a page in flash.
 *
 * @param page_address Address of the first word in the page to be erased.
 */
static void flash_page_erase(uint32_t * page_address)
{
    // Turn on flash erase enable and wait until the NVMC is ready:
    NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Een << NVMC_CONFIG_WEN_Pos);

    while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    {
        // Do nothing.
    }

    // Erase page:
    NRF_NVMC->ERASEPAGE = (uint32_t)page_address;

    while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    {
        // Do nothing.
    }

    // Turn off flash erase enable and wait until the NVMC is ready:
    NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos);

    while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    {
        // Do nothing.
    }
}
3  資料寫入flash
flash_word_write(++addr, (uint32_t)patwr);

/** @brief Function for filling a page in flash with a value.
 *
 * @param[in] address Address of the first word in the page to be filled.
 * @param[in] value Value to be written to flash.
 */
static void flash_word_write(uint32_t * address, uint32_t value)
{
    // Turn on flash write enable and wait until the NVMC is ready:
    NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos);

    while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    {
        // Do nothing.
    }

    *address = value;

    while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    {
        // Do nothing.
    }

    // Turn off flash write enable and wait until the NVMC is ready:
    NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos);

    while (NRF_NVMC->READY == NVMC_READY_READY_Busy)
    {
        // Do nothing.
    }
}

相關推薦

nrf51822教程系列 nrf51822 flash寫入資料(flash write )

前言 暫存器介紹 0 .1 Non-Volatile Memory Controller (NVMC) Functional descriptionThe Non-volatile Memory Controller (NVMC) is used for writing a

MongoDB實戰-操作分片叢集,分片叢集寫入資料

       本篇文章中,我們將向分片集合寫入資料,這樣你才能觀察塊的排列和移動。這是MongoDB分片的要素。每個示例文件都表示一個電子表格,看起來是這樣的。 { _id:ObjectId("4d6f29c0e4ef0123afdacaeb"), filename:"s

記錄檔案寫入資料

CString sockfilename; CFile sockfile; sockfilename = "sockfile.txt"; //那其他成員變數必須有預設初始化函式,為什麼這裡沒有賦值寬

nrf51822教程系列 第二課 nrf51822 softdevice GAP Advertising

The following figure describe how the advertising packet and scan response packet is sent. In some applications when we don't expect a connection and

WPF入門教程系列十七——WPF的數據綁定(三)

控件 命名空間 布局 獲得 key gif lns return 生日 四、 XML數據綁定 這次我們來學習新的綁定知識,XML數據綁定。XmlDataProvider 用來綁定 XML 數據,該XML數據可以是嵌入.Xmal文件的 XmlDataProvider

WPF入門教程系列十五——WPF的數據綁定(一)

不同 pan cnblogs 雙向 one tap copy msd tac 使用Windows Presentation Foundation (WPF) 可以很方便的設計出強大的用戶界面,同時 WPF提供了數據綁定功能。WPF的數據綁定跟Winform與ASP.NET

VS2013 c++連結資料庫,應用儲存過程,資料庫寫入資料

// ConsoleApplication1.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include "iomanip" using namespace std; #import "c:\Program Files\Common Files\S

『PHP學習筆記』系列八:MySQL資料庫新增資料

資料表結構: 資料表原有資料: 向MySQL資料庫寫入資料:  INSERT INTO 語句通常用於向 MySQL 表新增新的記錄: INSERT INTO table_name (column1, column2, column3,...) VALUES

POI分多次生成的EXCEL寫入資料

一:分多次將資料寫入EXCEL   1:這種方式效率比較低,資料量越大越明顯,4萬條資料要2分鐘左右 package com.test; import java.io.BufferedOutputStream; import java.io.File; import java.i

java檔案操作 (1)——判別指定檔案是否存在,讀取檔案修改時間和大小,讀取文字檔案內容,文字檔案寫入指定內容

任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某

C++檔案寫入資料

#include<iostream> #include<fstream> #include<ctime> using namespace std; int main() {time_t time_now; //定義一個time_t結構的物件time(&ti

Hadoop第一個程式,利用APIHDFS寫入資料

這時學習Hadoop以來寫的第一個成功的程式,程式仿照《Hadoop實戰》中的PutMerge程式,這裡有幾個要注意的地方: 1.hdfs的地址是一個網路地址,如下面的:hdfs://localhost:9000/test3 2.確保不會出現“許可權不足”的異常 im

Pythonexcel寫入資料

最近做了一項工作需要把處理的資料寫入到Excel表格中進行儲存,所以在此就簡單介紹使用Python如何把資料儲存到excel表格中。 資料匯入之前需要安裝 xlwt依賴包,安裝的方法就很簡單,直接 pip install xlwt ,如果電腦中安裝過就不需要重複安裝。 接下

Pythonexcel寫入資料

今天看到了一個關於使用python向execl中寫入資料的小demo 首先需要做的是下載xlwt第三方的庫才可以做,然而這個庫的下載也是浪費了我一段時間: 先需要將xlwt下載下來:下載地址 然後執行./setup.py install 這樣就將

使用C#word文件寫入資料

一、建立一個word模板,並在需要程式寫入資料的地方新增域。域的新增方法:插入->文件部件->域->Mergefield,並給域起個域名。二、新增Aspose.words引用  ——using aspose.words.三、寫入方法:1、word模板路徑2、

JavaProperties檔案寫入內容

String filePath = "H:\\final\\code\\Servlet_Ajax\\src\\test\\aa.txt"; Properties prop = new Properties(); try { InputStream fis

Python利用xlwtExcel寫入資料示例

#coding=utf-8 import xlwt workbook = xlwt.Workbook() sheet1=workbook.add_sheet('test',cell_overwrite

Qt單元格寫入日期資料

第一種,用QAxObject來實現,主要用單元格的屬性NumberFormatLocal,程式碼如下 QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); QAxObject

註冊表寫入信息

tar void click 註冊表 sender 代碼 com str object 實現效果:    知識運用:  Registry類的LocalMachine字段   RegistryKey類的OpenSubKey CreateSubKey SetValue方法

python2和python3csv檔案寫入Unicode字元

1、python2向csv檔案寫入中文或者unicode,可以參考UnicodeWriter類https://blog.csdn.net/qq_16912257/article/details/521277622、python3中字串都變成了unicode編碼,並且取消了cS