本文主要是介绍【dsPIC33E】内部Flash读写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基于某些安全考虑或者降成本,我们不希望使用外部存储器件,但有时我们由需要记录一下参数,确保断电不丢失,这时,富余的内部代码存储Flash就派上用场了。
不同于外部存储器,几乎所有的内部Flash读写都十分麻烦,甚至需要使用到汇编。
下面我们将讲述dsPIC33E如何读写内部Flash,此处以dsPIC33EP256GP506为例。
示例代码下载:https://download.csdn.net/download/u010875635/10821230
在操作Flash之前,我们有必要下了解一下Flash的结构,注意以下几点:
1、dsPIC33E/PIC24E闪存程序存储器被分段为页和行,每页1024个指令字,每行128个指令字,部分器件不支持行
2、dsPIC33E/PIC24E闪存程序存储器支持128/2个保持寄存器以一次对存储器的一行/双指令字进行编程
3、dsPIC33E/PIC24E每个指令字为24位,占2个16为,最高8位为虚字节
4、 dsPIC33E/PIC24E每个指令字占2个地址,例如0x000000和0x000001都是表示第一个指令字
5、对于大多数应用,24位中的高8位不用于存储数据,建议便成为NOP指令或者非法操作码值
6、地址总是偶数呈现,读取奇数地址获取到的与前一个偶数时一致的,所以读取奇数地址没有意义
dsPIC33E/PIC24E操作Flash相关的几个寄存器。
1、TBLPAG:表地址页位,8位表地址页位与W寄存器组组合形成23位有效程序存储器地址加上一个字节选择位
2、 每个地址数据由2个字合并而成,由以下四个寄存器操作
TBLRDL:表读低位字
TBLWTL:表写低位字
TBLRDH:表读高位字
TBLWTH:表写高位字
程序存储器分为很多个表页,表页地址为TBLPAG,占据地址高8位(共24位),表页不同于Flash的擦除页。表页内部地址为16位的有效地址,占据低16位,所以一个表页大小为0x010000
表操作地址生成,有TBLPAG和来自Wn的16位组合成24位的有效地址,7-->0 15------>0
读相关操作较为简单,只需要写入TBLPAB和TBLRDL或TBLRDH然后读取即可
写相关操作较为复杂,允许一次擦除1页(8行),运行一次编程1行,或者编程2个指令字字。
注意擦除和编程都是边沿对齐的,从存储器起始开始,分别以1024指令字和128或2指令字作为边界,即,擦除的地址单位长度为0x400,例如擦除0-0x0003ff,0x000400-0x0007ff;编程的地址单位长度为0x80或者0x04,例如,编程0-0x00007f,0x000080-0x0000ff或者0x000080-0x000083
在程序存储器的最后一页上执行页擦除操作会清零闪存配置字,从而使能代码保护。因此,用户应避免在程序存储器的最后一页上执行页擦除操作。
要执行编程操作,必须先将其对应的整页(1024个指令字)全部擦除,然后重新编程,所以一般操作流程如下:
1、读取闪存程序存储器的一页,并将其作为数据镜像存储到RAM中,RAM镜像必须从1024字程序存储器的偶地址边界读取
2、用新的数据更新RAM中的数据镜像
3、擦除闪存存储器页
a)设置NVMCON寄存器以擦除一页
b)禁止中断
c)将要擦除页的地址写入NVMADRU和NVMADR寄存器(可以是该页任意地址)
d)将秘钥序列吸入NVMKEY寄存器,以使能擦除
e)将NVMCON<15>的WR位置1,启动擦除周期
f)擦除周期结束时WR位清零
g)允许中断
4、用表写操作将128或者2个指令字的一行或双指令字从RAM装入写锁存器
5、对一行或者2个指令字进行编程
a)设置NVMCON以编程一行
b)禁止中断
c)将要编程行或第一个字的地址写入NVMADRU和NVMADR寄存器
d)将秘钥序列吸入NVMKEY寄存器,以使能编程周期
e)将NVMCON<15>的WR位置1,启动编程周期
f)编程周期结束时WR位清零
g)允许中断
6、重复4-6步骤,对多个数据进行编程,直到一页编程完成
7、根据需要,重复1-6,对多页进行编程
关联寄存器如下:
NVMCON:主控制寄存器,选择执行擦出还是编程操作
NVMKEY:只写寄存器,防止闪存被误写或者误擦除,编程或擦除前必须执行解锁序列,解锁期间禁止中断,①将0x55写入NVMKEY;②将0xAA写入NVMKEY;③执行2条NOP指令④一个周期中写入NVMCON寄存器
写锁存器长度与器件有关,要参考对应器件的Datasheet。
dsPIC33E通用flash存储结构如下:
dsPIC33EP256GP506存储结构如下:
这篇关于【dsPIC33E】内部Flash读写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!