单片机
返回首页

MSP430 flash 操作

2020-05-08 来源:eefocus

关于flash具体说明,可以参照msp430 user guide中的具体章节。


介绍

一般,在单片机中的flash是用于存放程序代码的,属于只读型存储器(ROM)。但是在许多单片机中内部,都会专门留有一小段flash控制区,用于存放重要的配置参数,使得这些参数在掉电后仍然可以保存在单片机上面。


硬件介绍

430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间,没有代码空间和数据空间之分。


一般430的单片机都统一在0-64k地址范围中,只有少数高端的型号才能突破64k。地址的大概编码方式见msp430 user guide。(msp430f22x4的是在P310处)

以msp430f22x4为例,它的information memory大小为256个字节,分成4端,分别为segment A、B、C、D。对应的地址从0x010ff-0x01000。每块64个字节。

flash操作包括:字或字节写入;字符串写入;段擦除;主flash擦除。

flash操作时需要把flash时钟的范围控制在257kHz到476kHz。如果不在这个范围内,将会产生不可预料的结果。


擦除:擦除的最小单位是段,有三种擦除模式

    MERAS    ERASE    Erase Mode
    0        1        Segment erase
    1        0        Mass erase(all main memory segments)
    1        1        Erase all flash memory(main and information segments)

通过MERAS、ERASE位来设置擦除模式:段擦除,主flash擦除,全部擦除。

写入:写入的模式由WRT和BLKWRT位来确定

BLKWRT    WRT    Write Mode
    0        1    Byte/word write
    1        1    Block write

这两种模式中块写入要比字或字节写入操作速度大约快两倍,因为在块写入完成之前,变成电压一直维持直到块写入完成。


程序实现

设置Flash时钟,初始化Flash控制器

void flash_init(void)
    {
        FCTL2 = FWKEY + FSSEL_2 + FN1;    //默认SMCLK/3
    }

擦除函数

void flash_erase(unsigned int addr)
    {
        unsigned char *paddr;
        paddr = (unsigned char *)addr;
        FCTL1 = FWKEY + ERASE;
        FCTL3 = FWKEY;
        DINT;
        *paddr = 0;
        flash_wait_for_enable();
        EINT;
    }
    
    void flash_wait_for_enable(void)
    {
        while((FCTL3&BUSY)==BUSY);    //Busy
    }

写入字节

void flash_write_char(unsigned int addr,char data)
    {
        unsigned char * paddr;
        paddr = (unsigned char *)addr;
        FCTL1 = FWKEY + WRT;
        FCTL3 = FWKEY;
        DINT;
        *paddr = data;
        flash_wait_for_enable();
        EINT;
        FCTL1 = FWKEY;
        FCTL3 = FWKEY + LOCK;
    }

读取字

unsigned char flash_read_char(unsigned int addr)
    {
        unsigned char data;
        unsigned char *paddr = (unsigned char *)addr;
        data = *paddr;
        return data;
    }

实际使用事项

向information memory中写入字时,必须是偶数地址,奇数地址会写在这个地址的前一个偶数地址。

程序可以在flash中运行,也可以在RAM中运行,如果在RAM中运行,那么要把程序先从flash中移到RAM中,然后跳转到RAM中运行。(在430这款单片机中,没有必要将程序移到RAM中)

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 开关电源的基本组成及工作原理

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何构建一个触摸传感器电路

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章