迅维网

查看: 1845|回复: 0
打印 上一主题 下一主题

【NV32F100x试用体验】No.12 EEPROM的初步使用

[复制链接]
跳转到指定楼层
1#
发表于 2016-12-28 15:45:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 山东青岛 来自 山东青岛

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
很高兴,还有人来看我的报告,谢谢你的支持。
    现在很多单片机都自带了一些EEPROM空间,这是一个很有用的东西,我们大概都知道这点EEPROM就是它的一点FLASH。
虽然不大,但却是很有用,一般我们拿来存储一些启动配置文件或者断电前的一些信息
    比如一种简单的方式保护自己的系统,我们程序开始的时候根据MCU的ID用自己的算法计算得到一个解锁码,放在EEPROM里面,每次程序开始都去根据自己的ID去检查解锁码,如果不对就需要输入解锁码。这样的话如果别人通过硬解的方式得到你的程序二进制码,批量复制烧写到新的MCU 。由于很多款的MCU都是只有唯一ID的,这样得到的代码写进去也是徒劳。
    好了,话不多说。进入主题。
主角依然是Navota。
根据库函数说明。

                               
登录/注册后看高清大图

这个函数是一定要放在SRAM区的
这也是关键啊,我就是因为这里不懂,上一篇报告才没有写存储。

因为我使用KEIL并没有经过培训,完全都是自己学的。至于keil的一些配置和很多功能其实都不曾知晓。

当看到这一句的时候懵逼了!什么是放在SRAM运行?程序不都是在RAM跑的吗?

好了,现在我想现学现卖,讲讲我的个人理解。
拿51单片机来说事吧。
我们知道51的RAM从0X00-0XFF,什么8字节工作寄存器四组R0-R7还有SFR,像P0,TMOD这些都是在RAM里面的,他们有固定的位置,所以叫特殊寄存器啊。RAM里还有普通的就用来存放我们定义的数组啊,变量啊一类的。
平时我们说程序是在RAM中跑的,是因为程序从ROM一条一套读出来在RAM中的这些寄存器之间运算处理,也就是说,单片机在跑程序的时候离不开ROM,在NV32都叫FLASH了。
51ROM地址从0000H开始,我们程序就从0000H开始往里面写入。PC指针就在ROM区跳来跳去。

在来看NV32是ARM_M0+内核,flash从0x0000 0000开始,RAM从0x1fff f800开始RAM有8K。
这8K  RAM都是相当于51里面的普通RAM,因为NV的特殊寄存器还有它们的位置。
那这8KRAM可不是小空间啊,甚至比大部分51的ROM都要大。
而如果一段程序编译完成后发现RAM只会占用2K,flash只占用3K。那么在KEIL里我么甚至可以设置我们的RAM从0X2000 1000开始。那从0x1fff f800到0X2000 0000中间的6K就浪费了吗?

No No No,我们都知道RAM运行速度快,当我们程序在放在FLASH运行的时候每一条指令都需要去FLASH读取,然后在RAM里面进行计算处理等等。。那如果我们把部分程序加载到空闲的RAM中去运行不就快了很多!
想想我们整个占用FLASH才3K,而我们的RAM还有6K剩余,完全都可以加载到RAM中运行。

这里你或许会说RAM不是断电不保存吗?怎么能把程序放在RAM中呢?

如果这样问,那就是你理解错了,我们并不是把程序存到RAM中,还是放在flash中。单片机上电后,可以把我们指定的一些函数从FLASH中搬到了RAM中,所以刚才我说加载。这样当执行到这些函数的时候PC指针就不用跳到FLASH中读取指令,而是在RAM中读取,一个好处是速度快了,另外一个好处是,当运行这些函数的时候已经完全脱离了flash,这个时候甚至可以修改FLASH了。

好了,NV32能擦写FLASH 的原因,或许到这里就清楚了,为什么这个函数要放在RAM中运行,或许读者也能明白了。

至少我自己说服了我自己。

那下面就讲一下如何把指定的函数放到RAM中运行吧。

                               
登录/注册后看高清大图

首先看一下自己的RAM配置

                               
登录/注册后看高清大图

从图中我们看到,我的目前主程序运行在0X2000 0000-0x2000 1800这6K的空间中,上面还有我们剩余的0x1fff f800-0x2000 0000这2K空间我配置成IRAM1。
接下来,在DRIVER里找到flash.c这个官方库。
在flash.c上右键

                               
登录/注册后看高清大图

选择配置flash.c


                               
登录/注册后看高清大图

把整个FLASH.C里面的函数到时候都加载到RAM中运行,自然flash.c中的那个EFM_LaunchCMD函数也被加载进去啦。这回符合要求了吧。

好了,我就讲这么多,希望对你有所帮助。也或许你已经知道了,如果我理解的不对,还请指正。

这里放上一个简单的EEPROM读取写入的代码,下一篇再写详细的EEPROM应用和FLASH的读写

NV32demoEEPROM.zip

231.8 KB, 下载次数: 0, 下载积分: 下载分 -2 分, 下载 1 次


您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图 AI维修
助手



芯片搜索

快速回复