一起学nRF51xx 12 - flash
前言
在某些应用中需要固件升级功能及存储一些用户定义的标志位,或者存储一些传感器的数据,一般情况我们是用外挂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开发板。
本示例所用的最小系统板原理图:
- 工程创建:
- 打开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口勾选下载程序后自动复位及运行:
- 工程代码
- OK之后在man.c中加入如下代码:
把程序编译,可以看到串口助手中打印了以下输出内容:
关于nrf51xx及flash的更详细介绍可以参看《nRF51822_PS_v3.3.pdf》或https://infocenter.nordicsemi.com/index.jsp
。
OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!
文中源码资料下载,在公众号里给十三发消息:
下载|一起学nRF51xx 12
关注十三公众号
一起学nRF51xx 12 - flash相关推荐
- 一起学nRF51xx 15 - spis
前言 SPIS是一个从SPI,它与EasyDMA一起支持与外部的主SPI超低功耗串行通信.EasyDMA使得SPIS交互无需CPU的介入.在提高数据传输效率的同时还减轻了CPU的负担. SPIS即是S ...
- 一起学nRF51xx 20 - 移植SDK蓝牙例程
前言 Nordic公司为nRF51系列SOC提供有完整的开发SDK包,里面有大量的例程,通过学习官方例程并最终应用到自己项目工程中是一个比较高效的学习与项目开发技巧,本节将与大家一起完成蓝牙例程的移植 ...
- 一起学nRF51xx 19 - 移植SDK普通接口例程
一起学nRF51xx 19 - 移植SDK普通接口例程 张十三 前言 Nordic公司为nRF51系列SOC提供有完整的开发SDK包,里面有大量的例程,通过学习官方例程并最终应用到自己项目工程中是一 ...
- 一起学nRF51xx 18 - 蓝牙协议栈烧录
前言 在讲协议栈前我们先简要介绍一下NORDIC公司的协议栈特点: 1 协议栈和应用程序代码没有链接时间依存性,并可独立编译和更新 2 堆栈受运行时保护,应用程序访问受限或被阻止 3 堆栈为 100% ...
- 一起学nRF51xx 17 - lpcomp
前言 nRF51系列SOC内部低功耗比较器(LPCOMP)的使用.此比较器类似于用运放搭建的比较器,当VIN+输入的电压大于VIN-输入的电压,输出结果为高电平:当VIN+输入的电源小于VIN-输入的 ...
- 一起学nRF51xx 16 - adc
前言 nRF51的ADC设计得比较简单,它有几个可配置的部分: 1)PSEL(pinselection):nRF51系列芯片有8个模拟输入通道,并且这几个脚是固定的,不能像GPIO那样可以重新映射.P ...
- 一起学nRF51xx 14 - temp
前言 温度传感器测量芯片DIE温度.通过触发START任务来启动TEMP.当温度测量完成后,一个数据将生成事件,并且可以从临时寄存器读取测量结果为了保证测量的准确性,必须在选择HFCLK晶体振荡器作为 ...
- 一起学nRF51xx 11 - ficr
前言 工厂信息配置寄存器(FICR)是在工厂中预先编程的,不能被用户删除.这些寄存器包含芯片特定的信息和配置.实际上FICR是一个寄存器组,下面有很多个独立的寄存器,各个寄存器用来存放表征芯片特性的一 ...
- 一起学nRF51xx 7 - spi
前言 SPI 总线是 Motorola 公司推出的三线同步接口, 以同步串行 3 线方式进行通信. SPI 接口有 4 条信号线: SCK, MOSI, MISO, SCS. SPI 总线支持一主多从 ...
最新文章
- Qt最新版5.14在Windows环境静态编译安装和部署的完整过程 VS 2019-Qt static link build Windows 32 bit/64 bit
- 让神经网络给符号AI“打工”,MIT和IBM联合解决深度学习痛点,未来将用于自动驾驶...
- jQuery1.6以上attr改用prop
- Qualcomm式创新融入中国 有何深层逻辑?
- Vue.js说说组件
- mysql 安装测试ok_tpcc-mysql安装测试与使用的实例教程
- GD32 使用stm32 固件库
- Pytest框架集成Allure定制测试报告详解(一)
- linux 驱动线程与进程,Linux内核学习之二-进程与线程
- php学到什么程度可以学thinkphp,thinkphp学习一
- 将Python字符串转换为Int,将Int转换为String
- Oracle查询成绩高于成绩,oracle认证考试成绩如何查询?
- 「查漏补缺」2020 截止9月2日 秋招前端面试经历 (已整理答案)
- 红亚太学链之区块链技术深度剖析第7章
- 二级c语言标学教育,标学教育软件下载-标学教育 安卓版v2.9.0-PC6安卓网
- 由Jack Dorsey背书支持的CoinList进军DeFi市场
- 一种非极大值抑制(non_max_suppression, nms)的代码实现方式
- 2021年中国互联网广告市场年度分析
- 窗口切换_Sinno_Song_新浪博客
- win7开机登录界面的壁纸怎样更换修改