快捷搜索:

MSP430系列Flash存储器C语言环境下的参数保存和擦写技巧 测控论文 自动化论文 测控技术文库

  ti公司出品的msp430系列单片机,是一种具有超低功耗特性的功能强大的单片机。msp430系列正是由于具有以下一些特点:超低功耗;强大的处理能 力;中断源较多,并且可以任意嵌套,使用时灵活方便;丰富的片上外围模块;方便高效利用jtag接口或片内boot rom的开发方式;适应工业级运行环境;日益受到市场的推崇。

  尤其值得一提的是:ti公司的msp430系列flash型单片机内部集成有flash控制器,可以采用外部编程器进行烧写,也可以利用自己的程序修改 flash的内容,且不用外加编程电压。flash的可自编程性(self-programmability)是指,用flash存储器中的驻留软件或程 序对flash存储器进行擦除/编程,但是,要求运行程序代码的存储区与待编程的存储区不在同一模块中。由于msp430系列单片机只有一个片上 flash存储器模块的微处理器,因此不能同时进行擦除/编程flash的操作。目前,在擦除/编程flash的过程中,通常将cpu置于空闲状态。因此 在进行系统设计时,可以利用片内的flash保存一些运行数据,实现掉电保护;还可以修改flash中的整个程序或局部程序,实现在系统升级。

  本文详细举例介绍了在msp430系列c语言环境下如何高效地完成对flash存储器的参数在线保存和擦写技巧

  2 msp430芯片flash存储器的结构

  msp430的flash型芯片采用flash存储器作为程序代码及信息的存储,可以实现多次擦除和写入,也可以实现在线写入,其写入可以由jtag接口 来完成,也可以由芯片内的驻留软件实现,只需运行的程序代码存储区与待编程的存储区不在同一模块中。flash存储器的基本功能有:在程序执行时提供代码 和数据;在软件或jtag接口控制下作一段、多段或整个模块的擦除;在软件或jtag接口控制下写入数据,在x000h~x1ffh的512字节区域内可 实现双倍编程速度。flash存储器模块是一个可独立操作的物理存储器单元。全部模块安排在同一个线性地址空间中,一个模块又可以分为多个段[4]。

  当对flash存储器段中的某一位编程时,就必须对整个段擦除,因此,flash存储器必须分为较小的段,以方便地实现擦除和编程。如图1所示是 msp430芯片上flash存储器模块的结构框图。该flash存储器模块包含如下部分:

  图1 flash存储器结构图

  (1) 控制逻辑—控制flash擦除和编程时的机器状态和时序发生器;

  (2) flash保护逻辑—避免意外的flash擦除和编程操作;

  (3) 编程电压发生器—提供flash擦除和编程所需全部电压的集成电荷泵;

  (4) 3个16位控制寄存器—fctl1、fctl2、fctl3控制flash模块的全部操作;

  (5) 存储器本身。

  3 flash存储器的擦除和编程操作

  以msp430系列的msp430f149为例,msp430f149的一个flash存储器模块包含3个控制寄存器、时序发生器、提供编程及擦除电压的 电压发生器和存储器本身。flash存储器绝大多数时间工作在读模式。这时数据、地址锁存器是透明的,时序发生器和电压发生器关闭。当数据写入flash 存储器模块,或者它的全体或部分被擦除时,flash存储器改变它的工作模式。这时需要在控制寄存器fctl1、fctl2和fctl3中设置适当的参数以保证编程/擦除操作的正确执行。一旦控制寄存器设置后,编程/擦除操作开始,时序发生器即控制全部执行过程,产生全部内部控制信号。如果busy位为 “1”,就表明时序发生器还在工作,编程/擦除操作正在进行。对于段编程还有第二个控制位wait。

  编程/擦除操作有三个基本阶段:准备编程/擦除电压阶段、时序控制编程/擦除操作及关闭编程/擦除电压。一旦编程/擦除操作开始,在busy位变为“0” 之前无法对flash存储器访问。若有异常情况,则正在进行的编程/擦除操作要立即停止,可以用紧急退出位emex置位来实现。但是,这时操作并未完成, 结果可能是不正确的。

  msp430系列芯片中只集成了一个flash模块用作程序和数据存储器。这就意味着在对flash进行编程时,中断向量是不起作用的,任何中断请求都得 不到响应。所有可能的中断源(包括看门狗)在对flash进行擦除/编程操作前,都应该被屏蔽掉。

 4 参数设置的保存和提取

  msp430系列微处理器的信息存储器为每段128字节,取名为信息存储器a和b,主存储器每段为512字节。所有型号器件的信息存储器的地址完全相同,从1000h~10ffh.。这里给出满足所有flash型号器件的每一段起始和结束地址。

  信息存储器a段的起始地址在1080h,结束地址在 10ffh。

  信息存储器b段的起始地址在1000h,结束地址在107fh。

  主存储器第段的起始地址为:

  主存储器第段的结束地址为:

  值得注意的是:运行的程序代码存储区与待编程的存储区应不在同一段中。

  5 对flash存储器的操作介绍

  由于flash存储器由很多相对独立的段组成,因此可在一个段中运行程序,而对另一个段进行擦除或写入数据等操作。

  5.1 对flash存储器的擦除操作

  对flash段的擦除操作的顺序如 下:

  (1) 选择适当的时钟源和分频因子,为时序发生器提供正确的时钟输入;

  (2) 如果lock=1,则将它复位;

  (3) 监视busy标志位,只有当busy=0时才可以执行下一步,否则一直监视busy;

  (4) 如果擦除一段,则设置erase=1;

  (5) 如果擦除多段,则设置meras=1;

  (6) 如果整个flash全擦除,则设置erase=1同时meras=1;

您可能还会对下面的文章感兴趣: