历史上的今天
今天是:2025年05月08日(星期四)
2020年05月08日 | 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中)
史海拾趣
|
张二狗是偶的同学。一直以来,偶们都是被人拿来作为对比的两个极端,偶曾经是他的梦魇,现在他却是偶的梦魇。现将偶和他的人生历程列出来,再一次深刻感受风水轮流转这一永恒真理。 1、小学入学第一天,偶对老师说会背301首唐诗做100以 ...… 查看全部问答> |
|
生活中,你肯定在为你的手机电量是否充足、是否要马上充电等问题而操心劳神,所以,如果给你一块几个月都不需要充电的电池,你马上会高兴起来,如果给你一块你一辈子都不用充电的电池,你会不会惊讶万分?如果给你一块几百代人都不用充电的电池,你 ...… 查看全部问答> |
|
我还是个在校学生,刚学模电没多久,很喜欢,但每天也有很多这样那样的问题... 在提到多级放大电路的耦合时有一种说法,阻容耦合的低频特性限制了其集成化...这是为什么啊?… 查看全部问答> |
|
replyreload += \',\' + 1460671;我的微信公共账号是 \"电子设计思路\", 微信号 eedesign, 每周发一到两个最好的设计电路,这几天明明放假,但是还有好多人关注,难道电工清明节都上班? 在汽车电路中,没有蒸汽,没有压缩机,怎样控制管子口的叶 ...… 查看全部问答> |
|
我用的是ME3的电化学酒精传感器,但是厂家给的datashit非常简单,所以不知道他的输出模型是否包含结电容,可能会使之后电路的输入端带有容性,哪位大神能说一下ME3的输出模型是不是容性的?@wyzh1994 ,@wangzs611 … 查看全部问答> |
|
差不多一周多的时间就已经收到TI的样片,相当的高效。TPS65980 是一款直流/直流开关稳压器,此稳压器由电压范围介于 2.5V 至 15.75V 之间的 Thunderbolt™ 或 Thunderbolt™ 2 电源总线供电,并且生成 3 个独立 3.3V 电源输出。TBT_OUT ...… 查看全部问答> |
|
vxwork的开发环境谁有啊????请大侠们指条下载的道,或者传给我(QQ303949042 邮箱:whwshiyuan@126.com 有偿)。 万分感谢!!!!!!!!! … 查看全部问答> |
|
分享TMS320F2812 DSP编程之AD采样精度的校准算法 F2812内部集成了ADC转换模块。该模块是一个12位、具有流水线结构的模数转换器,内置双采样保持器(S/H),可多路选择16通道输入,快速转换时间运行在25 MHz、ADC时钟或12.5 Msps,16个转换结果寄存器可工作于连续自动排序模式或启动/停止模式。在实 ...… 查看全部问答> |




