一起学nRF51xx 12 - flash

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhanglifu3601881/article/details/100187437

前言

在某些应用中需要固件升级功能及存储一些用户定义的标志位,或者存储一些传感器的数据,一般情况我们是用外挂FLASH、EEPROM,或者使用MCU内部的EEPROM来解决。但是外挂EEPROM或者FLASH会增加成本和产品的体积。NORDIC提供了一个比较实用的方法:把这些数据存放在芯片的FLASH中。FLASH起了两个作用:1)程序的存储空间   2)用户自定义的数据存储空间。

NRF51822中的CODE MEMORY有三个部分组成:

1)Code FLASH

用来存放我们编写的程序的存储空间。这一部分我们也可以用来存储自己的数据。

2)   FICR

Factory Information Configuration Register的缩写。存放的是芯片出厂的时候被烧进去的一些信息,比如芯片的FLASH分成多少个PAGE,每一个PAGE的大小是多少,工厂代码,RAM的块数,RAM块的大小,芯片地址等信息。FICR的信息是只读的,用户不可以修改或者擦除。

3)   UICR

是提供给用户存储自定义数据的存储区域。

 

相关寄存器介绍

 

在操作FLASH之前,需要通过配置寄存器来使能允许写或者允许擦除。当使能Wen以后,我们可以对FLASH进行写操作;当使能Een以后,我们可以对FLASH进行擦除。特别注意,Wen跟Een不能同时使能,否则会造成无法预见的后果。

 

 

程序编写

4.1  程序流程

1)配置串口,用来打印信息。

2)配置CONFIG寄存器的Een使能。

3)擦除FLASH PAGE。

4)获取串口输入的数据。

5)配置CONFIG寄存器的Wen使能,把串口获取的数据写入到FLASH中。

6)从刚才写数据的FLASH地址里面把数据读出,然后通过串口打印出来。

 

本例程介绍了NRF51822芯片内部FLASH的读写。

 

 

 

示例详解

基于硬件平台:nrf51822ek_tm开发板。

 

本示例所用的最小系统板原理图:

 

    1. 工程创建:
      1. 打开KEIL,新建一个空工程:Project->NewuVisionProject

工程名为nrfxx-flash确认后按下图选择芯片为nrf51822_xxAA->ok

在弹出的对话框中勾选CMSIS中的CORE;Device中的Startup(后面有nrf51Series字样的);在nrf_device中勾选nrf_gpio, nrf_uart, nrf_delay,nrf_err并在nrf_Libraries中勾选app_error,nrf_assert模块。

 

 

 

OK之后工程自动生成如下代码:

新建一个空白文档,保存为main.c,并加入工程中:

配置工程,选择使用MicroLIB库,可以减小程序体积:

加入NRF51定义,并选择化等级3,可以减小程序体积,但仿真运行时可能会出现与代码顺序不一致现象:

 

调试工具选择J-LINK,并将接口设置为SW口勾选下载程序后自动复位及运行:

 

 

    1. 工程代码
      1. OK之后在man.c中加入如下代码:

 

      把程序编译,可以看到串口助手中打印了以下输出内容:

关于nrf51xx及flash的更详细介绍可以参看《nRF51822_PS_v3.3.pdf》或https://infocenter.nordicsemi.com/index.jsp

 

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|一起学nRF51xx 12

 

关注十三公众号

 

猜你喜欢

转载自blog.csdn.net/zhanglifu3601881/article/details/100187437