关于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中)
上一篇:MSP430读写片内FLASH保存数据
下一篇:关于MSP430F5438程序升级介绍--防迷路
推荐阅读最新更新时间:2024-11-07 19:50
设计资源 培训 开发板 精华推荐
- 使用具有 B 类 EMI 滤波(双输出)的 RP10-4815DA DC/DC 转换器的典型应用
- LT3758A、8V 至 72V 输入、12V 输出 SEPIC 转换器的典型应用电路
- AVR控制AD7390实现DA转换源程序及原理图
- 汽车收音机 TDA2005 20W 桥式放大器静音应用的典型示例
- LT1172CS8、1.25A 驱动高压 FET 的典型应用,适用于离线应用
- LT3755IMSE-2 汽车降压-升压型 LED 驱动器的典型应用电路
- 使用 Silicon Labs 的 Si4463 的参考设计
- 遥控开关
- 自制linux小电脑
- 使用 Diodes Incorporated 的 PAM2701JER 的参考设计