【FLASH 操作】FLASH 读写等操作 学习

近似型号中文资料:

IC型号:N25Q128 http://www.soiseek.cn/NUMONYX/N25Q128/2.htm

官方文档:F5438中文全集.pdf_免费高速下载|百度网盘-分享无限制   第60页
//******************************************************************************
// 参数: adr 为地址 , 范围 0x1000~0xFFFF
void  FlashRead(long adr,uint8 *bBuf,uint8 bLen)
{
   while (bLen--)
     *bBuf++=*(uint8 *)adr++;
   return;
}

// 写入地址 adr  写入数据:*pc_byte

void FlashWrite(long adr,uchar *Datain,uint len)
{

//FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//MCLK  16*FN4 + 8*FN3
  FCTL3 = FWKEY;
  FCTL1 = FWKEY + WRT;

while(FCTL3 & BUSY);                //如果处于忙状态,则等待
  while(count--)
  {

while(FCTL3 & BUSY);
    *(uchar*)adr++ = *Datain++;
  }
  FCTL1 = FWKEY;
  FCTL3 = FWKEY + LOCK;
  while(FCTL3 & BUSY);
}

EraseSectorFlash  过程

void EraseSectorFlash(unsigned int adr)
{
     
      _DINT();
      uchar *p0;
      //FCTL2 = FWKEY + FSSEL_1 + FN3 + FN4;//选择时钟源,分频
      FCTL3 = FWKEY;//清除LOCK
      while(FCTL3 & BUSY);//如果出于忙,则等待
      FCTL1 = FWKEY + ERASE;//使能段操作  每段512字节
      p0 = (unsigned char *)adr;//数值强制转换成指针
      *p0 = 0;            //向段内任意地址写0,即空写入,启动擦除操作
      FCTL1 = FWKEY;
      FCTL3 = FWKEY + LOCK;
      while(FCTL3 & BUSY);
      _EINT();                       //开总中断
}

查看空闲的FLASH 地址,避免擦除代码所在的地址。每次擦除均是一段一段的擦除,每段512字节。

找不到datasheet,不知道段的起止地址的,可以打开memory ,在内存窗口,用代码尝试随便写入一个任意地址,看哪些地方被改写成0xFF 就知道段的起止,如:

我们在0x15000写入(EraseSectorFlash(0x15000);),那里原本有非0xFF数据,好辨认(是FF的可以先写再擦)。看到段的起止是15000-151ff 刚好是512 。

0x15000+0x200->0x15200 所以下一段的起始地址是 0x15200 以此类推。

验证代码:

EraseSectorFlash(0x2A000);
              EraseSectorFlash(0x2A200);
              EraseSectorFlash(0x2A400);
              EraseSectorFlash(0x2A600);
             
              FlashWrite(0x2A000,origin_protect_data,512);
              memset(origin_protect_data,0xCB,900);
              FlashWrite(0x2A200,origin_protect_data,512);
              memset(origin_protect_data,0xCA,900);
              FlashWrite(0x2A400,origin_protect_data,512);
              memset(origin_protect_data,0xC9,900);
              FlashWrite(0x2A600,origin_protect_data,512);

编译地址分配:
在IAR窗口中,点击view》memory ,在内存窗口,点下拉框选择 SER 可知,SFR地址为  0x0000-0fff
RAM地址为:0x1c00-5bff
FLASH地址:0x5c00-45bff
结合看下面的地址分配图,即可知道各部分代码和数据被分配到什么地方。
****************************************
                *                                      *
                *      SEGMENTS IN ADDRESS ORDER       *
                *                                      *
                ****************************************

SEGMENT              SPACE    START ADDRESS   END ADDRESS     SIZE  TYPE  ALIGN
=======              =====    =============   ===========     ====  ====  =====
DATA16_AN                              0102 - 0103               2   rel    0
                                       0120 - 0121               2
                                       0140 - 0141               2
                                       0144 - 0145        

【FLASH】写MSP430片内flash|FLASH 读写等操作 学习相关推荐

  1. 【FLASH 操作】FLASH 读写等操作 学习

    近似型号中文资料: IC型号:N25Q128  http://www.soiseek.cn/NUMONYX/N25Q128/2.htm

  2. Python零基础入门(五)——文本文件读写和操作[学习笔记]

    目录 一.文件读写 1.文件读写模式 2.文件读写方法 3.使用with简化异常处理 4.使用json库从文件读取和写入数据到文件 5.使用csv库读写csv格式文件 二.文件相关操作 1.文件定位 ...

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

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

  4. Keil(MDK)下用仿真器烧程序的同时烧写附加数据到SPI FLASH

    之前在i.MX rt板块经常看到i.MX RT最新支持XXX Flash的下载算法,于是冒出一个问题,下载算法是啥.故花时间研究了一下. 一.了解下载算法 研究过程中参考了这篇文章:更进一步的了解Ke ...

  5. STM32F4内的FLASH和RAM

    STM32F4内的FLASH和RAM(CCM) 单片机的flash和RAM,可以简单理解为电脑的硬盘和内存条. FLASH 什么是FLASH?FLASH的作用? 掉电不丢失数据,能够存储数据的存储器, ...

  6. U盘GPIO文件系统映射-STM32利用内置FLASH做U盘

    受到linux对一切设备的控制都当成文件对待的启发 于是便有了这个将GPIO映射到U盘中的想法,这样一来便可以在任何支持U盘的设备中扩展系统的硬件功能了 我的QQ是243786753,这属于原创作品, ...

  7. 通过keil编译明白自己的程序占用的内存大小。堆栈大小分配,32单片机片内存储flash的使用。

    目录 1.通过keil编译程序,得到自己代码需要单片机的flash和RAM大小 2.在程序中调整堆栈的大小 3.单片机片内flash的使用 1.通过keil编译程序,得到自己代码需要单片机的flash ...

  8. 解决STM32F0/F1内部FLASH写操作导致中断程序无法响应的问题

    必看链接:试图搞懂MDK程序下载到flash(二)–分散加载文件scatter 参考链接:STM32F10x单片机Flash写操作导致中断不响应问题 最近本人在写STM32F0系列的FLASH写操作的 ...

  9. CC2640之OAD固件升级(内置Flash)

    转自:http://blog.csdn.net/zzfenglin/article/details/52336612 什么是OAD OAD是TI在BLE协议栈基础上扩展的一种无线更新技术.OAD使用客 ...

最新文章

  1. [小梅的体验课堂]Microsoft edge canary mac版本体验
  2. iOS9中如何在日历App中创建一个任意时间之前开始的提醒(一)
  3. C#之windows桌面软件第十二课:电脑ADC值显示(上位机),记忆上次串口号,并用TrackBar控件显示ADC值
  4. 视觉、概念、故事——角色设计三原色
  5. 一个html5流星雨源码
  6. 使用java将字符串写入到指定的文件中
  7. FPGA初学者入门相关概念知识点
  8. 万事开头难,用HTML写的第一个界面,收获颇多
  9. AJAX设置光标离开自动提交,Ajax自动提交和刷新页面
  10. python实现简单算法
  11. NSUserDefault
  12. 27. 搭建Git服务器
  13. java.lang.integer_java 中 关于java.lang.ArrayStoreException: java.lang.Integer异常,是什么原因?...
  14. 萤火虫小程序_线上服务不断档 萤火虫水洞·地下大峡谷推出“云旅游”新体验...
  15. MP3免费音频文件下载
  16. 注册表删除方式解决Navicat到期问题
  17. 巴法云 mixly 扩展库
  18. 运行vs2017安装程序自动退出的解决
  19. SNMP配置:view配置中mask参数的详解
  20. php yii 微信支付宝,Yii使用easywechat实现微信支付

热门文章

  1. 2019年度上海市计算机软件考试报名须知
  2. Python 之使用模板生成周报
  3. 将postman文件直接换成jmeter的文件
  4. 数字音频总线A2B开发详解三(A2B系统的Flash Program详解)
  5. 三次元操作规范及注意事项
  6. P2300 合并神犇(单调队列优化dp)
  7. 复习C语言随笔 十二
  8. VirtuaNES.v0.97源码探究3 卷轴查看器
  9. 文件格式-CVS:CVS
  10. Foxmail 账号无法登陆、无法收取邮件等问题