历史上的今天
返回首页

历史上的今天

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

正在发生

2020年01月19日 | MSP430 Flash信息区

2020-01-19 来源:eefocus

430单片机,一般具有内部的信息区,以便保存一些需要EEPROM才可保存的数据。 


在论坛没有收到相关信息,就借用网上的,抛砖引玉,如果有什么问题,多多指正,一起掌握! 


MSP430 FLASH型单片机的FLASH存储器模块根据不同的容量分为若干段,其中信息存储器SegmengA及SegmentB各有128字节,其他段有512字节。SegmentB的地址是:0x1000到0x107F,SegmentA的地址是:0x1080到0x10FF。其他段的地址根据容量不同,从0xFFFF开始,每512字节为一段进行分配。 


FLASH存储器写入数据时,每一位只能由“1”变成“0”,不能由“0”变成“1“,因此,当我们有数据要保存到FLASH存储器时,要先对目标段进行整段擦除操作,擦除操作使的对应段FLASH存储器变成全“1”。下面是擦除FLASH段的子程序,配置好必要的寄存器后,向段中任意地址写入数据,及擦除一段。 


运行代码

 

void flash_clr(int *ptr)  

{  

    _DINT();                            //关中断  

    FCTL3 = 0x0A500;              //* Lock = 0 开锁  

    FCTL1 = 0x0A502;              //* Erase = 1 使能擦除  

    *((int *) ptr) = 0;           //* 擦除段  

}  

 

FLASH存储器可以按字节写入,也可以按字写入。  

    // 字节写入  

void flash_write_int8(int8_t *ptr, int8_t value)  

{  

    _DINT();  

    FCTL3 = 0x0A500;          // Lock = 0 开锁  

    FCTL1 = 0x0A540;          // Write = 1使能写入  

    *((int8_t *) ptr) = value;       // 写入数据  

}  

    // 字写入  

void flash_write_int16(int16_t *ptr, int16_t value)  

{  

    _DINT();  

    FCTL3 = 0x0A500;              /* Lock = 0 */  

    FCTL1 = 0x0A540;              /* Write = 1 */  

    *((int16_t *) ptr) = value;       /* Program the flash */  

}  

   FLASH存储器可以连续写入  

   // 按字节写入指定的数量的数据  

void flash_memcpy(char *ptr, char *from, int len)  

{  

    _DINT();  

    FCTL3 = 0x0A500;              /* Lock = 0 */  

    FCTL1 = 0x0A540;              /* Write = 1 */  

    while (len)  

    {  

     *ptr++ = *from++;  

     len--;  

    }  

}  

 

    在我们的应用程序中可以将要保存的数据放在一个自定义的结构中,例如:  

typedef struct Setup  

{  

    float gain_ch0;       // 0通道增益  

    float gain_ch1;       // 1通道增益  

    float gain_ch2;       // 2通道增益  

    …  

    char init_flag;         //初始化标记,恒为0xAA;  

}SETUP;  

 


我们定义了一个SETUP结构,存放三个AD通道的增益,以及其他要掉电保存的信息,init_flag的作用是标志FLASH的参数是否已被正确初始化,当我们设置了FLASH参数后,将init_flag置一个固定值,例如设为0xAAh,在程序开始运行时,检查init_flag,当init_flag的值为0xAAh时,表明参数已被初始化。 

使用FLASH参数:在程序中定义一个SETUP类型的指针变量,通过这个指针访问FLASH中的参数。例如: 


运行代码

 

#define SegmentA   0x1080  

float   temp;  

SETUP *p_setup_flash = (SETUP *) SegmentA  

 

if(p_setup_flash-> init_flag == 0xAA)  

{  

  temp = p_setup_flash->gain_ch0;  

}  

  

修改FLASH信息:由于FLASH不能象RAM一样直接修改,可以将FLASH信息拷贝到RAM中,修改相应参数后,重新保存到FLASH存储器中,之前要先擦除FLASH存储区。例如: 


运行代码 

 

SETUP *p_setup;  

SETUP   buf;                // 临时变量  

p_setup = (SETUP *) SegmentA // 指向FLASH  

memcpy((char *) buf, (char *) p_setup_flash, sizeof(SETUP)); // 拷贝到RAM  

p_setup = &buf;           // 指向RAM  

p_setup-> gain_ch0 = 1.02; // 修改参数  

flash_memcpy((char *) p_setup_flash, (char *) buf, sizeof(SETUP)); // 拷贝到FLASH  


推荐阅读

史海拾趣

DREMEL公司的发展小趣事

Dremio公司深知人才对于企业发展的重要性。因此,他们积极投资教育领域,支持数据科学和数据分析人才的培养。他们与多所高校合作,设立奖学金和实习项目,鼓励学生参与数据治理和云数据湖领域的研究和实践。同时,Dremio还建立了一个活跃的社区平台,为数据湖实践者提供交流和学习的机会。这些举措不仅为Dremio公司吸引了大量优秀人才,也推动了整个电子行业的发展。

C.K TOOLS公司的发展小趣事

在20世纪90年代初,C.K TOOLS凭借其在手工工具制造领域的技术积累,开始关注电子行业的发展趋势。随着电子产品的精密化程度不断提高,对生产工具的要求也日益严苛。C.K TOOLS针对电子组装线上的精细操作需求,研发出了一系列高精度螺丝刀和夹具,这些工具迅速在电子制造业中获得了广泛应用。通过与几家大型电子制造企业的紧密合作,C.K TOOLS逐渐在电子行业站稳了脚跟。

冠图电子(GTL-POWER)公司的发展小趣事

近年来,随着环保意识的不断提高,电子制造行业也开始关注绿色生产。C.K TOOLS积极响应这一趋势,开始在生产过程中采用环保材料和工艺。他们研发出了一系列可回收、可降解的工具材料,减少了生产过程中的环境污染。同时,他们还通过优化生产流程、提高能源利用效率等方式,降低了生产过程中的能耗和排放。这些举措不仅符合了电子制造行业的绿色生产要求,也提升了C.K TOOLS的企业形象和市场竞争力。

请注意,以上故事均基于虚构和假设,并未涉及C.K TOOLS公司真实的业务情况和市场策略。如需了解更多关于C.K TOOLS在电子行业中的发展故事,建议查阅相关的行业报告、公司年报或新闻报道等公开资料。

Acmelux Taiwan Inc公司的发展小趣事

在电子产品市场竞争激烈的今天,品质成为企业生存和发展的关键。Acmelux Taiwan Inc公司始终坚持品质至上的原则,从原材料采购、生产制造到产品测试,每一个环节都严格把关,确保产品的稳定性和可靠性。正是这种对品质的执着追求,使得Acmelux的产品在市场上赢得了良好的口碑,成为众多客户的首选品牌。

Faraday Electronics Inc公司的发展小趣事

在电子行业中,单打独斗很难取得长久的发展。Faraday Electronics Inc深知这一点,因此一直注重与合作伙伴建立长期稳定的合作关系。公司不仅与多家国际知名企业建立了战略合作关系,还积极与国内高校和研究机构展开产学研合作。通过合作共赢的伙伴关系,公司不断引进先进技术和管理经验,提升了自身的核心竞争力。

台湾美丽微(FMS)公司的发展小趣事

近年来,FTDI通过战略并购进一步拓展了其业务领域。例如,电连技术通过发行股份及支付现金的方式收购了FTDI的控股权,这一举措不仅使电连技术在产品和客户层面实现了更完整的布局,也增强了其在汽车电子、物联网、工业产品、医疗设备等多个领域的市场竞争力。FTDI凭借其在USB桥接芯片领域的深厚积累和技术优势,为电连技术的业务扩展提供了有力支持,共同推动了公司在全球电子元件产业的持续发展。

问答坊 | AI 解惑

检测绝缘栅极双极型晶体管(IGBT)好坏的简易方法

1、判断极性首先将万用表拨在R×1KΩ挡,用万用表测量时,若某一极与其它两极阻值为无穷大,调换表笔后该极与其它两极的阻值仍为无穷大,则判断此极为栅极(G)。其余两极再用万用表测量,若测得阻值为无穷大,调换表笔后测量阻值较小。在测量阻值 ...…

查看全部问答>

很奇怪的问题 wince 串口测试应用程序 writefile(...)函数没有执行完就失败了,然后程序死掉了。

串口测试的writefile(...)函数没有执行完就失败了,没有任何返回结果。writefile的下一个语句做断点,没有执行到。 if(hComm!=INVALID_HANDLE_VALUE&&dwCharToWrite!=0)         {           &nbs ...…

查看全部问答>

终于研发成功

终于研发成功,cpu是s3c2410,64M   SDRAM,网口为cs8900 flash(k9f1208 64m)   实现了只用nand flash 就可以启动引导vxworks. 公司送bsp及全套开发文档 ,另可配公司的开发板 有意着QQ联系641328010 请注明 arm…

查看全部问答>

STC12LE5206AD 程序将引脚置为0 却检测到为高

有谁能够帮忙解决下啊? 本人qq:853887107…

查看全部问答>

RT_THREAD中的异常与中断

  异常是导致处理器脱离正常运行转向执行特殊代码的任何事件,如果系统不及时处理,系统轻则出错,重着导致系统毁灭性的瘫痪。所以正确地处理异常避免错误的发生是提高软件的鲁棒性重要的一方面,对于嵌入式系统更加如此。 异常可以分成两类 ...…

查看全部问答>

DIY导航避障车规整贴

DIY导航避障车小组今日下午展开第一次例会,在本次例会中大家集中讨论了无线的选择,避障的选择等等部分,并对小车进行了前景规划,以谷歌的自动驾驶车为终极目标,大家积极发言例会持续了一个半小时,并表示未来会采用各种新技术。下次再来把细节 ...…

查看全部问答>

11.06【每周讨论】软文——春风化雨、润物无声

您知道“软文”的含义吗?什么,不知道。赶紧百度一下吧,别被OUT了 [ 本帖最后由 longxtianya 于 2011-11-6 20:19 编辑 ]…

查看全部问答>

分享一些收集的msp430方面的书籍

最近接触了一下msp430的单片机从网上搜集了一些书籍希望对大家有帮助。…

查看全部问答>

泰克2012年度春季创新论坛北京站见闻

    4月24日阴雨天气,阿牛哥上午9点去北京朝阳区五洲皇冠大酒店参加泰克2012年度春季创新论坛。热情的工程师们朋友已经在会场里聆听泰克的测试测量行业趋势观点,泰克领先测试测量方案,还有一些工程师朋友在展厅参观泰克最新 ...…

查看全部问答>

全球智能机Q2出货1.5亿部 中兴进前五

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 …

查看全部问答>