今天顺便研究了一下msp430的flash操作,很多人也许看了我的博客,会发现网站上有很多的人总结得比我要好,这点我承认,因为自己能力有限,但是,从这篇博客起,我会参照以前大神们写的博客,添加大神们写过的博客链接,分享给大家,注明:本人从不抄袭他人博客,博客只是个人技术的一个总结~~~,下面进入今天的正题

msp430F149有60k的flash,这个对于51来说,是相当的惊人的了,在涉及到flash的操作的时候,往往涉及到三个寄存器,FCTL1,FCTL2,FCTL3。突然间发现msp430的寄存器都有CTL这个字样,这对于记住不同的寄存器操作很有必要,这里我们要明白各个寄存器的用途

FCTL1是控制如何进行操作,比如读写,复制,擦除

FCLT2是控制读写的时钟频率,因为flash的操作频率必须是257K到476K之间

FCTL3用于控制FLASH存储器操作,保存相应的状态标志和错误条件

关于Flash控制寄存器的介绍

这里推荐一篇比较好的博客:http://www.cnblogs.com/sky1991/archive/2012/08/18/2645529.html

也可以参照这一篇博客:http://www.cnblogs.com/Engin/archive/2011/08/31/2160534.html

下面我们来总结一下如何对flash进行编程操作:

这里也总结下操作flash的三个寄存器的规律,所有的寄存器操作都是等于,所有的寄存器操作都要加上FWKEY,也就是密匙,了解这一点对编程这很重要

步骤1:设置时钟频率

这个时候,是对FCTL2进行操作,FCTL2 = FWKEY+FSSEL0+FN0;

这里解释一下,FSSELx他有5种选择格式,这里可以查看头文件

#define FSSEL0 (0x0040) /* Flash clock select 0 */ /* to distinguish from USART SSELx */

#define FSSEL1 (0x0080) /* Flash clock select 1 */

#define FSSEL_0 (0x0000) /* Flash clock select: 0 - ACLK */

#define FSSEL_1 (0x0040) /* Flash clock select: 1 - MCLK */

#define FSSEL_2 (0x0080) /* Flash clock select: 2 - SMCLK */

#define FSSEL_3 (0x00C0) /* Flash clock select: 3 - SMCLK */

FNx是分频比:这里有5种分频比:

#define FN0 (0x0001) /* Divide Flash clock by 1 to 64 using FN0 to FN5 according to: */

#define FN1 (0x0002) /* 32*FN5 + 16*FN4 + 8*FN3 + 4*FN2 + 2*FN1 + FN0 + 1 */

#ifndef FN2

#define FN2 (0x0004)

#endif

#ifndef FN3

#define FN3 (0x0008)

#endif

#ifndef FN4

#define FN4 (0x0010)

步骤2:设置完分频的基本操作之后,一般就不用在对FCTL2进行操作了,这个时候

一般是对FCTL1进行设置,需要明白的是,对flash的操作是以段位操作的,而且在对flash进行操作的时候,一般要采用指针,这个时候,就要进行强制转化,例如设置一个flash的写函数所用的指针为 unsigned *Flash_ptr; Flash_ptr = (unsigned char *)0x1080

先对一个段进行擦除前,要进行一个假写入,所以这个时候要配置FCTL3,FCTL1,因为flash只能是读权限,要更改她的权限,要对flash的写的标志位进行置位

也就是

FCTL1 = FWKEY+ERASE;

FCTL3 = FWEKY;//#define FWKEY(0xA500) /* Flash key for write */

这里要注意一个ERASE这个宏定义;这里是设置擦除的格式,查看头文件会发现有几种擦除格式

#define ERASE (0x0002) /* Enable bit for Flash segment erase */

#define MERAS (0x0004) /* Enable bit for Flash mass erase */

这个时候,假写入一个数据,就会使得cpu挂起,flash进行擦除

*Flash_ptr = 0; //从flash中启动一个擦除,这时候要假写入,启动擦除过程

步骤3:

启动擦除之后,就可以想flash中写入数据了,写入数据的格式:

FCTL1 = FWKEY+WRT;//擦除的话,因为从flash中进行擦除,

//设定写模式

for(i=0;i<128;i++)

{

*Flash_ptr ++ = value;//写入128个字节

}

步骤4:做完上述操作,要对flash进行锁保护,以防止误写

FCTL1 = FWKEY;//清掉写的操作位,防止写完后误操作

FCTL3 = FWKEY +LOCK;//安全恢复保护

在实际编程的过程中,用到flash高深的地步,还可以将flash作为一个内部的SD卡,用来存储数据,这个功能算是比较高级的应用了,推荐几篇博客介绍这种功能的使用

flash的扩展使用http://www.cnblogs.com/hrj2012/archive/2012/05/17/2506306.html

版权所有,转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3408218.html

flash读取程序 msp430_MSP430 flash的操作相关推荐

  1. flash读取程序 msp430_MSP430读写擦除FLASH程序

    1-简介 MSP430单片机对片内FLASH的读写操作程序范例. 2-程序例程 //********************************************************** ...

  2. flash读取程序 msp430_MSP430单片机对片内FLASH的读写操作程序范例

    原标题:MSP430单片机对片内FLASH的读写操作程序范例 // 参数: wAddr 为地址 , 范围 0x1000~0xFFFF void ReadFlash(U16 wAddr,U8 *bBuf ...

  3. flash读取程序 msp430_MSP430读写flash程序

    //****************************************************************************** //***************** ...

  4. flash读取程序 msp430_转载 msp430程序库  flash控制器

    硬件介绍: 要对Flash读写,首先要了解MSP430的存储器组织.430单片机的存储器组织结构采用冯诺依曼结构,RAM和ROM统一编址在同一寻址空间中,没有代码空间和数据空间之分. 一般430的单片 ...

  5. STM32操作访问flash,包括写入数据到flash和从flash读取数据

    文章目录 序言:flash相关知识背景 一.FLASH操作流程与操作选址 1.1 FLASH操作流程 1.2 如何查找并选定要写入Flash十六进制地址 二.Flash基本知识点 2.1 Flash容 ...

  6. c语言中读取flash值的作用,flash读写程序

    原标题:flash读写程序 在电子工程世界为您找到如下关于"flash读写程序"的新闻 msp430F149单片机的flash读写程序 //基于msp430F149单片机的flas ...

  7. 利用Flash读取SQL Server数据库的值

    本节我们来练习用 Flash读取SQL Server数据库中的值,思路如下:用 ASP .NET连接读取数据库,并生成XML列表,Flash去读取XML列表并且格式化结果显示在组件中. 在Visual ...

  8. stm32f103c8t6的内部Flash读取

    目录 1.stm32内部框架图 二.SD卡读写 2.1 要求 2.2 实验过程截图 2.3 查看hello.txt 2.4 从SD卡读出 2.4.1 修改代码 2.4.2 输出结果 三.写入flash ...

  9. STM32系列单片机SPI速度研究(flash读取写入速度提高,液晶显示屏刷新率提高)

    STM32系列单片机SPI速度研究(flash读取写入速度提高,液晶显示屏刷新率提高) 前言 设备参数 测试内容 1.软件模拟SPI 1). 程序代码 2). 示波器波形采集 2.HAL库SPI函数 ...

  10. STM32F103C8T6音频数据的Flash读取与DAC播放

    目录 一.Flash地址空间的数据读取 1.Flash简介 2.Flash的硬件实现机制 3.使用到的硬件及软件 4.STM32CubeMX工程配置 5.keil代码 6.STlink调试说明 7.调 ...

最新文章

  1. MySQL能够运行于多种操作系统平台_快速的掌握可以运行MySQL的操作系统
  2. 诸法无我-悉达多 乔达摩
  3. linux常用ogg脚本,ogg基本监控脚本
  4. 传统存储方式_分布式存储 vs 传统SAN、NAS 的优缺点分析
  5. MySQL COUNT函数优化及count(1)/count(*)/count(列名)的区别
  6. Maven + Eclipse + Tomcat - 开启项目调试之旅(转载)
  7. python的函数代码块_Python从菜鸟到高手(8):print函数、赋值与代码块
  8. “碰瓷”特斯拉翻船,卡车界明星创企Nikola身陷“骗局”危机
  9. 持续集成部署Jenkins工作笔记0002---认识Jenkins和Hudson
  10. 37.django基础概念
  11. yuv422sp to yuv422p
  12. 使用UnityShader实现2D流光效果
  13. ai面试的优缺点_AI面试需要注意哪些问题?
  14. eovs实训报告总结心得_实训报告心得体会
  15. UG NX 12 草图设计
  16. HTML5+CSS3小实例:全屏导航栏菜单
  17. MySql 格式化时间(包括正常时间格式与unix时间戳的互相转换)
  18. java lua_请问该如何在Java中使用Lua脚本语言?
  19. 服务器安全部署文档(转载)
  20. Eigen求解大型稀疏对称矩阵(Cholesky分解)

热门文章

  1. 增量式光电编码器原理及其结构
  2. 《时代周刊》:投资者为何争相购买虚拟土地?
  3. html关联程序怎么设置,Win10预览版10102系统中如何设置IE浏览器的关联程序【图文】...
  4. 苹果手机没声音了显示耳机模式_Airpods Pro 安卓苹果双机体验
  5. LANP环境编译设置
  6. C++11 时间编程(3)时间点表示time_point,时钟类型,当前时间获取
  7. 红包算法-二倍均值法
  8. 微信们开放外链,互联网“圈地”成历史?
  9. Chrome书签删除恢复
  10. 那些年,我们一起玩过的儿童游戏