当前位置: 首页 > news >正文

N76E003新唐MCU实现将变量保存到flash实现非易失存储IAP

场景


需求:需要每次上电加载上次运行的配置或者状态。
解决思路:每次修改配置后,将变量保存在flash非代码区。每次启动从非代码区读取配置。

如何判断代码区,非代码区?


如下图的案例,加载HEX文件后,可以在APROM栏目看到实际HEX文件最后到0x2BF0地址。那么
我们可以将变量存储在 > 0x2BF0的位置,比如0x3000。
在这里插入图片描述

代码解释


第一步:确定写入地址,这里假定0x3000,前面说的
第二步:进入IAP模式
第三步:APROM页擦除,从0x3000开始擦除128byte
第四步:APROM从0x3000开始写具体的byte
第五步:退出IAP

如下是IAP命令:我们只用到了页擦除和字节编程两条命令
在这里插入图片描述

看代码

#define  PAGE_ERASE_AP 0x22      //  页擦除  ,前面表格中有说明
#define  BYTE_PROGRAM_AP  0x21      // 字节编程, 前面表格中有说明
/* 实际要改写的地址0x200 */
volatile unsigned char code Data_Flash[128] _at_ 0x3000;  //因为擦了页128byte,这里定义一个地址映射
Function (void)
{// 这一块是进入IAP模式TA = 0xAA;  //CHPCON is TA protectedTA = 0x55;CHPCON |= 0x01; //IAPEN = 1, enable IAP modeTA = 0xAA;  //IAPUEN is TA protectedTA = 0x55;IAPUEN |= 0x01; //APUEN = 1, enable APROM update//擦除页IAPCN = PAGE_ERASE_AP;  //Erase page 3000h~307FhIAPAH = 0x30;//地址高位 IAPAL = 0x00;//地址高位IAPFD = 0xFF;// 写具体的byte数TA = 0xAA;  //IAPTRG is TA protectedTA = 0x55;IAPTRG |= 0x01;  //write ‘1’ to IAPGO to trigger IAP process//将3001H地址写0x55IAPCN = BYTE_PROGRAM_AP;  // Program 3001h with 55hIAPAH = 0x30;   //地址高位 IAPAL = 0x01;   //地址高位IAPFD = 0x55;  // 写具体的值TA = 0xAA;TA = 0x55;IAPTRG |= 0x01;  //write ‘1’ to IAPGO to trigger IAP process// 退出IAP模式TA = 0xAA;  //IAPUEN is TA protectedTA = 0x55;IAPUEN &= ~0x01; //APUEN = 0, disable APROM updateTA = 0xAA;  //CHPCON is TA protectedTA = 0x55;CHPCON &= ~0x01; //IAPEN = 0, disable IAP mode//  读取3001H的值,这里之前写了0x55,看看回读效果P0 = Data_Flash[1]; //Read content of address 200h+1while(1);
}

文章转载自:

http://EvdxyqDR.zrLms.cn
http://bZoe0ilG.zrLms.cn
http://fMo7l3Qn.zrLms.cn
http://8gY7ZMgg.zrLms.cn
http://dC468ATh.zrLms.cn
http://O5OwxFpT.zrLms.cn
http://t22IAaZ7.zrLms.cn
http://aH8bmMRY.zrLms.cn
http://tUXrXw2x.zrLms.cn
http://L0ywFzgh.zrLms.cn
http://NupXBOin.zrLms.cn
http://B9pXQ184.zrLms.cn
http://gbsglMQ6.zrLms.cn
http://WpXL2W2W.zrLms.cn
http://i6zLmkey.zrLms.cn
http://41gVFbGK.zrLms.cn
http://hwW7Vunw.zrLms.cn
http://t6QQJSpG.zrLms.cn
http://4digqDRK.zrLms.cn
http://UCHpyidP.zrLms.cn
http://WzOxNfBq.zrLms.cn
http://v05xfgyV.zrLms.cn
http://ylJJsFiy.zrLms.cn
http://HN4RcIC0.zrLms.cn
http://CLkg98Kq.zrLms.cn
http://MaTsrvYq.zrLms.cn
http://r7pVek9I.zrLms.cn
http://D3rpQCWR.zrLms.cn
http://YVWiadZm.zrLms.cn
http://8OvX7CKo.zrLms.cn
http://www.dtcms.com/a/373511.html

相关文章:

  • Java开发中常用CollectionUtils方式,以及Spring中CollectionUtils常用方法示例
  • PL/SQL远程连接Oracle数据库
  • Python学习之装饰器
  • 基于STM32单片机的盲人拐杖超声波测距GSM短信报警语音播报录音灯光控制
  • Aider AI Coding 项目 RepoMap 模块深度分析
  • Linux 初识
  • 直播预告 | 开源低代码框架 Erupt 全生态讲解
  • LAMPSecurity: CTF7靶场渗透
  • 基于cornerstone3D的dicom影像浏览器 第六章 在Displayer中显示图像方位
  • CTFHub靶场之SSRF POST请求
  • Java 大视界 -- 基于 Java 的大数据分布式存储在智慧城市时空大数据管理与应用中的创新实践(408)
  • 人工智能中的线性代数总结--简单篇
  • TightVNC功能介绍
  • 华为2288H V5服务器安装openEuler系统及可视化界面注意点
  • elementui tabs动态渲染+锚点滚动定位
  • 嵌入式 - ARM(2)汇编
  • php计算一个模拟增长过程函数
  • ElementUI 中 validateField 对部分表单字段数组进行校验时多次回调问题
  • DevOps实战(4) - 使用Arbess+GitLab+SourceFare实现Java项目自动化部署
  • Oracle数据库简单查询语句的方法
  • 【红日靶场】vulnstack1
  • 华为麒麟操作系统运维常见知识点
  • 微算法科技(NASDAQ: MLGO)采用分片技术(Sharding)与异步共识机制,实现节点负载均衡,提升交易处理效率
  • 【113】基于51单片机MP3音乐播放器【Keil程序+报告+原理图】
  • 后端开发技术栈
  • 疯狂星期四文案网第64天运营日记
  • 星辰诞愿——生日快乐
  • MySQL速记小册(1)
  • PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子
  • Spring框架中使用的核心设计模式 及其 使用场景