历史上的今天
返回首页

历史上的今天

今天是:2025年01月22日(星期三)

正在发生

2021年01月22日 | MSP430的Flash存储器

2021-01-22 来源:eefocus

FLASH存储器的主要功能部件

 

控制寄存器:控制FLASH存储器的檫除与写入

FLASH存储器阵列:存储体

地址数据锁存器:檫除与编程时执行锁存操作

编程电压发生器:产生编程电压

时序发生器:产生檫除与编程所需所有时序控制信号

 

擦除操作

 
选择适当的时钟源和分频因子,为时序发生器提供正确时钟输入 
如果Lock=1,则将它复位 
监视BUSY标志位只有当BUSY=0时才可以执行下一步,否则一直监视BUSY。 
如果擦除一段,则设置ERASE=1。 
如果擦除多段,则设置MERAS=1 
如果整个FLASH全擦除,则设置RASE=1同时MERAS=1。 
对擦除的地址范围内任意位置作一次空写入,用以启动擦除操作。如果空写的地址在不能执行擦除操作的段地址范围内,则写入操作不起作用

 

FLASH编程操作

 

选择适当的时钟源以及合适的分频因子 
如果Lock=1,将它复位 
监视BUSY位,直到BUSY=0是才可进入下一步 
如果写入单字或单字节,则将设置WRT=1 
如果是块写或多字、多字节顺序写入,则将设置WRT=1,BLKWRT=1 
将数据写入选定地址时启动时序发生器,在时序发生器的控制下完成整个过程

 

FLASH错误操作的处理

 

如果写入高字节口令码错误,则引发PUC信号:小心操作可以避免; 
在对FLASH操作期间读FLASH内容,会引发ACCVFIG状态位的设置:小心操作可以避免 
因为在对FLASH操作期间,需要较长的时间,如果这时看门狗定时器的数据将近尾声,则看门狗定时器溢出:建议用户程序在进行FLASH操作之前先停掉看门狗定时器,等操作结束之后再打开看门狗 
所有的FLASH类型的MSP430器件的0段都包含有中断向量等重要的程序代码,如果对其进行擦除操作,将会引起严重的后果:建议用户程序在进行FLASH操作之前,先将该段的重要数据(或程序代码)保存到RAM中或写入到其他暂时未用的段中,等待该段操作完毕再还原那些数据(或程序代码);同时一定不要使正在执行的程序处在正要被擦除的段中;也不要在FLASH操作期间允许中断的发生。

 

下面这个图是Flash储存器的组织

 

 flash储存器组织

 

 

 

这个图示flash的周期时序

 

周期时序

 

 

 

 

EXAMPLE:

信息段A和B的擦和写操作。现将内存中的double型数据和int型数据保存到信息段A中,再将其从信息段A复制到信息段B中。

#include
double data[8];
int add;
void write_SegA(void);
void Copy_A2B(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;//STOP THE WATCHDOG
FCTL2 = FWKEY + FSSEL0 + FN0;// initialize the clock
for(int i=0;i<8;i++ )
{
data[i] = i;
}                          //initialize unsigned int data
add = 8;
write_SegA();
Copy_A2B();
for(;;);
}

void write_SegA(void)
{
double* Flash_data_ptr;
unsigned int* Flash_int_ptr;
unsigned int i;

Flash_data_ptr = (double*)0x1080; //intialize 
FCTL1 = FWKEY + ERASE; //允许擦出
FCTL3 = FWKEY;        //解锁
*Flash_data_ptr = 0;//空写,启动擦除
FCTL1 = FWKEY + WRT;//允许写

for(i=0;i<8;i++)
{
  *Flash_data_ptr++ = data[i];
}
Flash_int_ptr = (unsigned int*)Flash_data_ptr; //initialize
*Flash_int_ptr = add;                         //写入unsigned int


FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}

 

void Copy_A2B(void)
{
double *Flash_data_ptrA;    //信息段A double型 Flash 指针
double *Flash_data_ptrB;    //信息段B double型 Flash 指针
unsigned int *Flash_int_ptrA;
unsigned int *Flash_int_ptrB;
unsigned int i;


Flash_data_ptrA = (double *)0x1080;
Flash_data_ptrB = (double *)0x1000;

FCTL1 = FWKEY + ERASE; // 允许擦除
FCTL3 = FWKEY;         //解锁
*Flash_data_ptrB = 0;  //空写
FCTL1 = FWKEY + WRT;  // 允许写

for(i = 0;i<8;i++)
{
*Flash_data_ptrB++ = *Flash_data_ptrA++;//COPY
}
Flash_int_ptrA = (unsigned int*)Flash_data_ptrA;//初始化信息段 A unsigned int 型指针
Flash_int_ptrB = (unsigned int*)Flash_data_ptrB;//初始化信息段 B unsigned int 型指针
*Flash_int_ptrB = *Flash_int_ptrA;

FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;                            //锁定
}

下面贴上运行的结果(在449下的调试结果)

初始化状态


开始

void write_SegA(void)后

第一个函数写完后
void Copy_A2B(void)后

第二个函数后

 

另外,不同型号的Flash区别只在于主存储器的地址范围不一样!


推荐阅读

史海拾趣

APEM公司的发展小趣事

在20世纪末和21世纪初,APEM通过一系列收购和技术合作,不断增强自身的技术实力和市场竞争力。例如,APEM收购了丹麦的高性能PCB轻触开关制造商MEC,以及美国的开关面板制造商UNIFAB。这些收购不仅使APEM获得了先进的技术和知识产权,也为其在全球市场的竞争中赢得了先机。

通过以上五个故事,我们可以看到APEM公司在电子行业的发展历程中,始终坚持创新、扩张和合作的战略,不断壮大自身实力,成为行业内的佼佼者。

Boyd Corporation公司的发展小趣事

Boyd Corporation自创立之初,便致力于研发创新的热管理和环境密封解决方案。公司不断投入研发资源,推出了一系列高效、可靠的产品,这些产品在电子行业中迅速获得了广泛应用。通过持续创新,Boyd Corporation逐渐在市场中树立了技术领先的形象,吸引了众多合作伙伴和客户的关注。

博流(Bouffalo Lab)公司的发展小趣事

博流公司的卓越表现引起了业界的广泛关注。2019年,公司荣获了Red Herring Top 100 Asia大奖,这是对其在AIoT/边缘计算SOC芯片研发领域的快速成长和技术实力的高度认可。此外,博流还获得了多项国内外专利和荣誉,证明了公司在行业内的领先地位。

Dresden Elektronik公司的发展小趣事

在Dresden Elektronik公司创立之初,其创始人看中了电子行业中嵌入式系统技术的巨大潜力。他们凭借对技术的深刻理解和敏锐的市场洞察力,开发出了一系列高性能、低成本的嵌入式系统解决方案。这些创新产品迅速在市场上获得了认可,为公司赢得了第一桶金,也为后续的发展奠定了坚实的基础。

Corporation Soneet公司的发展小趣事

随着国内市场的饱和,Soneet开始将目光投向国际市场。公司积极开拓海外市场,与国外的电子设备制造商建立合作关系。通过参与国际项目合作和技术交流,Soneet不断吸收国际先进的技术和管理经验,提升自身实力。如今,Soneet已经成为一家具有国际化视野和竞争力的电子企业。

请注意,以上故事均为虚构内容,旨在展示一个电子行业内新兴公司可能经历的发展历程。实际情况中,每家公司的发展路径都会因其自身的特点和市场环境而有所不同。

CITIZEN公司的发展小趣事

近年来,西铁城公司在市场推广方面也进行了一些大胆的尝试。其中,与著名花样滑冰选手羽生结弦的跨界合作尤为引人注目。双方共同推出了限量版签名腕表“四周半”,这一产品以羽生结弦的经典动作为灵感,融合了西铁城独特的光动能技术,展现了技术与艺术的完美结合。这一合作不仅提升了西铁城品牌的市场影响力,也展示了公司在产品创新和市场推广方面的新思路和新策略。

这些故事只是西铁城公司发展过程中的一部分,但它们都充分展示了公司在电子行业中的创新实力和市场竞争力。从最初的维修和销售到如今的全球知名品牌,西铁城的发展历程充满了挑战和机遇,也为我们提供了一个观察电子行业发展和变革的窗口。

问答坊 | AI 解惑

PCB设计,地线的分类与作用

1.信号“地”;     信号“地”又称参考“地”,就是零电位的参考点,也是构成电路信号回路的公共段,图形符号“⊥”。         1) 直流地:直流电路“地”,零电位参考点。     2) 交流地:交流电的 ...…

查看全部问答>

PIC实现4位数码管扫面显示不正常

小弟在初学PIC时候遇到了这个难处。 我用PIC扫描时总是不能实现正常显示。以下是我的代码 unsigned int k; void delay(ms) {         int a,b;         for(a=ms;a>0;a--)         & ...…

查看全部问答>

在推挽电路中什么是从负载吸入电流 吐出电流

在推挽电路中什么是从负载吸入电流 吐出电流 …

查看全部问答>

【紧急求助】PC 与 C51串行通信问题

PC机与多个C51进行通信时,在51中怎么样判断数据是否发送给自己的呢? 如何将数据精确到发送到指定的51单片机上呢? 有效立即给分,绝不 食言而肥…

查看全部问答>

LED照明与功率因数之间的关系

交流电流过负载时,加在该负载上的交流电压与通过该负载的交流电流产生相位差,人们便从中引出功率因数这一概念。人们生产、生活用电来自电网,电网提供频率为50Hz或60Hz的交流电。作为交流电的负载有电阻、电感、电容三种类型: 1、当交流电通过 ...…

查看全部问答>

具有 6 位点校正功能的 16 通道 12 位 PWM LED 驱动器

[url=https://www.eeworld.com.cn/LED$(\'swf_K2S\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'\'), \'quality\', \'hi ...…

查看全部问答>

DIY建议+ 阻抗测试仪

AD5933是一款功能有强的12位ADC,里面集成了1024点的DFT,并有DDS型频率发生器。可以测试被测元件的实部和虚部。-----电感、电阻、电容都能测量。 外加个I2C接口的显示部分,就可以组成一个好的阻抗测试仪。 缺点:芯片太贵(淘宝价70~110)…

查看全部问答>

对比方案赛+12V开关电源的设计分析

本帖最后由 accboy 于 2014-8-25 11:56 编辑 (一) WEBENCH设计目标与缘由及设计思路; 开关电源的基本设计有很多的种类, 使用的电路的不同, 拓朴的不同, 设计思路的不同, 使用芯片的不同,周边元件的不同, 变压器设计的不同, 也包括变压器设计 ...…

查看全部问答>

求一个SST烧写程序

求一个SST烧写程序 我的芯片是SST89E51…

查看全部问答>

摄像头ov9650的控制

请问用arm7能不能对ov9650摄像头进行实时监控,然后对图像进行压缩处理,能够用无线传输,在pc上显示。。。…

查看全部问答>