【经验】以国产32位MCU N32G455VEL7为例简述如何将片内Flash模拟EEPROM?
由于国民技术的N32G455系列没有EEPROM功能,但是在一些项目中需要在断电情况下对数据进行保存,以便下次上电工作时能够恢复之前的工作状态。一般会在系统中外挂 EEPROM芯片来实现,芯片内部Flash保存的数据也具有掉电不丢失功能,在保存的数据量不大的情况下(用户代码空间 + 保存数据空间不超过芯片Flash空间大小) 可以用芯片内部Flash作为用户存储空间,以节省一定硬件成本。本文介绍如何利用N32G455VEL7芯片内部Flash来模拟EEPROM功能。N32G455VEL7拥有512KB的片内Flash,其结构如下图:
根据上图可知,在主存储区,Flash被划分为256页,每页2K字节,起始地址是0x08000000。可以根据【经验】国民技术MCU片内Flash操作指南和注意事项介绍的内容,来对Flash进行读写操作,用户可以利用文章中介绍的函数来实现应用层对于保存数据的功能。
由于Flash的特性,我们也发现了使用链接文章中官方库函数的一些局限性:Flash在写入数据前,先要将数据全擦除为0xFF,且最小擦除单位是页,占2K字节空间,这个特性决定了不能简单的将旧数据擦除然后写新数据,因为这样会导致存储在这个扇区内的其他数据也被擦除,并且也会导致Flash频繁擦除而降低其使用寿命;擦写Flash之前都要先解锁,完成后还要上锁;写入数据需要按字操作,不支持半字和字节操作;数据保存时还需要考虑地址跨页的问题。这些局限都是相较于EEPROM不便的地方,为了解决以上问题,国民官方基于库函数进行了二次封装,实现了能在任意起始地址写入任意长度的Flash操作函数,代码如下:
#define FLASH_PAGE_SIZE 2048 // flash一页空间为2048字节
static FLASH_STS FLASH_ProgramPage(uint32_t* SrcAddr, uint32_t DstAddr, uint16_t Len)
{
uint32_t i;
for (i = 0; i < Len; i += 4)
{
FLASH_ProgramWord(DstAddr + i, *(uint32_t*)((uint32_t)SrcAddr + i));
#if (0) // 是否开启擦除校验
if (*(uint32_t*)(DstAddr + i) != *(uint32_t*)((uint32_t)SrcAddr + i))
{
return FLASH_ERROR_PG;
}
#endif
}
return FLASH_COMPL;
}
FLASH_STS FLASH_Program_User(uint32_t addr, // 起始地址
uint8_t *src, // 写入的数据指针
uint32_t len) // 数据字节长度
{
uint8_t FLASH_PAGE_BUF[FLASH_PAGE_SIZE];
uint32_t i, flag = 0;
uint32_t pageAddr, pageCount;
uint32_t tmpAddr, tmpLen;
uint32_t startAddr, endAddr;
FLASH_Unlock();
startAddr = addr % FLASH_PAGE_SIZE;
endAddr = (addr + len) % FLASH_PAGE_SIZE;
if (startAddr == 0)
{
pageAddr = addr;
pageCount = len / FLASH_PAGE_SIZE;
for (i = 0; i < pageCount; i++)
{
if (FLASH_COMPL != FLASH_EraseOnePage(pageAddr) != 0)
{FLASH_Lock(); return FLASH_ERROR_WRP;}
if (FLASH_COMPL != FLASH_ProgramPage((uint32_t*)(src + (i * FLASH_PAGE_SIZE)), pageAddr, FLASH_PAGE_SIZE))
{FLASH_Lock(); return FLASH_ERROR_WRP;}
pageAddr += FLASH_PAGE_SIZE;
}
if (endAddr != 0)
{
for (i = 0; i < FLASH_PAGE_SIZE; i++)
{FLASH_PAGE_BUF[i] = ((uint8_t*)pageAddr)[i];}
tmpAddr = len % FLASH_PAGE_SIZE;
for (i = 0; i < tmpAddr; i++)
{FLASH_PAGE_BUF[i] = ((uint8_t*)(src + (pageCount * FLASH_PAGE_SIZE)))[i];}
if (FLASH_COMPL != FLASH_EraseOnePage(pageAddr))
{FLASH_Lock(); return FLASH_ERROR_WRP;}
if (FLASH_COMPL != FLASH_ProgramPage((uint32_t*)FLASH_PAGE_BUF, pageAddr, FLASH_PAGE_SIZE))
{FLASH_Lock(); return FLASH_ERROR_WRP;}
}
}
else
{
pageAddr = (addr / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE;
tmpAddr = addr % FLASH_PAGE_SIZE;
tmpLen = FLASH_PAGE_SIZE - tmpAddr;
if (tmpLen > len) { tmpLen = len; flag = 0; }
else { flag = 1; }
for (i = 0; i < FLASH_PAGE_SIZE; i++)
{FLASH_PAGE_BUF[i] = ((uint8_t*)pageAddr)[i]; }
for (i = 0; i < tmpLen; i++)
{ FLASH_PAGE_BUF[tmpAddr + i] = ((uint8_t*)src)[i]; }
if (FLASH_COMPL != FLASH_EraseOnePage(pageAddr))
{FLASH_Lock(); return FLASH_ERROR_WRP; }
if (FLASH_COMPL != FLASH_ProgramPage((uint32_t*)FLASH_PAGE_BUF, pageAddr, FLASH_PAGE_SIZE))
{FLASH_Lock(); return FLASH_ERROR_WRP; }
pageCount = (len - tmpLen) / FLASH_PAGE_SIZE;
pageAddr += FLASH_PAGE_SIZE;
for (i = 0; i < pageCount; i++)
{
if (FLASH_COMPL != FLASH_EraseOnePage(pageAddr))
{ FLASH_Lock(); return FLASH_ERROR_WRP; }
if (FLASH_COMPL != FLASH_ProgramPage((uint32_t*)(src + tmpLen + (i * FLASH_PAGE_SIZE)), pageAddr, FLASH_PAGE_SIZE))
{FLASH_Lock(); return FLASH_ERROR_WRP; }
pageAddr += FLASH_PAGE_SIZE;
}
if ((endAddr != 0) && (flag == 1))
{
for (i = 0; i < FLASH_PAGE_SIZE; i++)
{FLASH_PAGE_BUF[i] = ((uint8_t*)pageAddr)[i]; }
tmpAddr = (len - tmpLen) % FLASH_PAGE_SIZE;
for (i = 0; i < tmpAddr; i++)
{FLASH_PAGE_BUF[i] = ((uint8_t*)(src + tmpLen + (pageCount * FLASH_PAGE_SIZE)))[i]; }
if (FLASH_COMPL != FLASH_EraseOnePage(pageAddr))
{FLASH_Lock(); return FLASH_ERROR_WRP; }
if (FLASH_COMPL != FLASH_ProgramPage((uint32_t*)FLASH_PAGE_BUF, pageAddr, FLASH_PAGE_SIZE))
{FLASH_Lock(); return FLASH_ERROR_WRP; }
}
}
FLASH_Lock();
return FLASH_COMPL;
}
注意事项:此函数需要占用2K SRAM作为Flash缓存。以上就是如何利用N32G455VEL7芯片内部Flash来模拟EEPROM功能。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由hide on bush提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】国产32位MCU N32G457VEL7替换STM32F407VET6的硬件设计注意事项
国民技术推出的32位MCU N32G457VEL7采用32-bit ARM Cortex-M4内核,广泛应用于网络打印,工业控制等领域,在货源紧张时完全可以替换STM32F407VET6,但封装引脚定义上还是有些许差异,需要注意。
【经验】国民技术32位MCU N32G455使用RTC的操作步骤
对于国民技术32位MCUN32G455的RTC使用步骤,很多人会产生疑惑或者一知半解。本文带您进行详细的了解和剖析,相信您看完后会恍然大悟。
【经验】32位MCU EFM32系列中断分组及优先级设置方式
Silicon Labs的32位MCU EFM32系列广泛应用于物联网、智能家居、无线抄表、智能照明、可穿戴设备等领域。中断是一个MCU中比较核心的部分,在实时性要求比较高、功耗低的场合经常需要中断的配合,中断优先级是根据中断事件的重要性和紧迫程度做出的一个设置,系统先响应优先级高的中断请求,再响应优先级低的中断请求。
国民技术MCU选型表
国民技术提供车规MCU,电控MCU,高性能MCU和通用MCU的参数选型,内核:Arm® Cortex®-M0和Arm® Cortex®-M4F,主频(MHz):48~144,Flash(KB):16~512,SRAM(KB):3~144。
产品型号
|
品类
|
内核
|
主频(MHz)
|
Flash(KB)
|
SRAM(KB)
|
I/O
|
工作电压(V)/工作温度(°C)
|
高级定时器
|
通用定时器
|
基础定时器
|
低功耗定时器
|
RTC
|
PWM
|
互补PWM
|
ADC个数x精度
|
ADC通道数
|
DAC
|
USART/ISO7816/LIN
|
UART/LIN
|
SPI/I2S
|
I2C
|
CAN-FD
|
DMA/通道数
|
Cryptographic algorithm
|
封装
|
SPQ(PCS)
|
N32H487REL7
|
高性能MCU
|
Arm® Cortex®-M4F
|
240
|
512
|
196
|
54
|
1.8V~3.6V/-40~+105°C
|
3
|
10
|
2
|
2
|
1
|
47
|
30
|
4x12bit
|
26
|
2x12bit
|
4
|
4
|
5/2
|
4
|
3
|
2/16
|
DES/3DES、AES、SHA1/SHA224/SHA256、SM3、SM4、MD5、CRC16/CRC32、TRNG
|
LQFP64
(10mm*10mm)
|
160/盘
|
选型表 - 国民技术 立即选型
灵动微电子扎根张江造“芯”,打造本土32位MCU知名品牌
灵动微电子成立于2011年,2016年进军MCU市场,2019年积极向工业、大家电、汽车等领域发力,目前已涵盖消费电子、电机与电源、家电、汽车、计算机与通信、工业控制等应用领域,客户群体包括飞利浦、小米、汇川、海尔、海信、美的等,是中国本土领先的通用32位MCU 产品及解决方案供应商。
工业增强级MCU优势赋能,国民技术加快布局机器人控制领域“新蓝海”!
作为工业机器人核心控制器件,MCU等控制芯片必将受惠于工业机器人市场的快速增长。 当前,国民技术32位工业增强级MCU,如N32G45X、N32G43X和N32G030等系列,已经在机械臂、机器骨骼、步进电机、伺服电机等工业应用领域获得批量应用。
【IC】32位MCU HK32C030家族,业界创新,12寸迭代超高性价比
航顺芯片新推出的32位MCU HK32C030,12寸迭代具有超高性价比。适用于工业应用,物联网,PC外设,智能家居,医疗设备,大小家电,手持设备等领域
2024年版国民技术N32 MCU选型,全面覆盖新能源、工控、汽车、消费、医疗、物联网等各主流应用场景
N32系列MCU是国民技术基于安全SoC技术平台架构,采用32位Arm® Cortex®-M处理器内核,创新打造的以高性能、高集成度、安全、低功耗、高可靠性为特色的MCU产品。产品内置嵌入式高速加密闪存、低功耗电源管理,集成数模混合电路,以及多种密码算法硬件加速引擎和安全单元,全面覆盖新能源、工控、汽车、消费、医疗、物联网等各主流应用场景。
为物联网开发选择最佳的MCU架构
微控制器(MCU)如何在物联网设备中使用?开发人员又该如何为产品选择最合适的MCU解决方案?Silicon Labs产品营销高级经理Gopinath Krishniah先生将通过本篇博文说明MCU的应用知识和开发技巧,并介绍评估选用8位和32位MCU的关键考量。
【应用】国民技术32位MCU N32G455VEL7用作扫地机器人主控,算力高于STM32
多数扫地机器人用STM32系列的MCU做为主控, 但遇到疫情影响,STM32的供货出了很大问题,替代方案的需求势在必行。本文推荐国民技术的32位MCU N32G455VEL7,已经成功替代了STM32在扫地机器人的应用中大批量出货。
国产M4内核32位MCU,240M高主频、集成以太网口,独有安全库保护核心算法 | 国产物联网及消费电子专场 世强硬创新产品研讨会
型号- SXX32F103RET6,AT32F413,SXX32F103RGT6,AT32F415,SXX32F103VGT6,SXX32F103VET6,AT32F407XX,SXX32F103VCT6,SXX32F107RBT6,SXX32F107VBT6,DM9051,AT32F421,AT32F403ARGT7,AT32F4XX,SXX32F207VCT6,AT32F403ARET7,SXX32F207VET6,AT32F403,AT32F403ARCT7,AT32F407,AT32F403AVET7,AT32F403AVGT7,AT32F403ACGT7,AT32F403AXX,AT32F403ACET7,421系列,AT32F407AXX,SXX32F207VGT6,AT32F403ACCT7,SXX32F107,AT32F403AVCT7,AT32L031,DM9162,AT32F407AVCT7,SXX32 SERIES,AT32F435,AT32F437,AT32F407VCT7,AT32F407AVGT7,AT32F403AXXU7,AT32F407VGT7,AT32F407XXT7,AT32F407RCT7,AT32F403ACGU7,AT32F407VET7,AT32F407RET7,AT32F403ACEU7,AT32F407RGT7,AT32F403ACCU7,AT32 SERIES,413系列,415系列,SXX32F407VET6,SXX32F107RCT6,SXX32F407VGT6,SXX32F107VCT6,AT32F403A 系列,403A系列,AT32F425,DM8203,AT32F403AXXT7,AT32F407 系列,403系列,SXX32F207,407系列,SXX32F407,AT32F413XX,SXX32,AT32F403A,AT32L415,AT32F407A
【IC】芯科科技新品PG26 32位MCU系列,大容量存储 + 快速AI/ML推理满足未来的物联网需求
SILICON LABS最新发布的EFM32PG26(PG26)32位微控制器系列通过提升两倍的闪存和RAM容量,以及GPIO的数量来满足各种低功耗和高性能嵌入式物联网应用需求。面向无线连接功能的需求,PG26可作为EFR32xG26多协议无线SoC平台的软件兼容MCU版本,有助于开发人员基于同一平台设计快速且无缝地升级低功耗蓝牙、Matter、Thread、Zigbee或专有无线连接设计。
【经验】国产32位MCU N32G43X上移植CoreMark的步骤及结果测试
MCU的性能是选型过程中一个重要的指标,通常描述MCU性能的指标有DMIPS和CoreMark,DMIPS数据手册一般会给出。那么CoreMark就需要用户自己通过移植程序进行跑分测试。本文以国民技术的N32G43X为例,简述移植步骤及测试结果。
【经验】32位MCU EFM32系列在Keil中接收SWO信息的配置步骤
Silicon Labs的32位MCU EFM32系列广泛应用于物联网、智能家居、无线抄表、智能照明、可穿戴设备等领域。在研发过程中会有很多繁杂的调试过程,本文主要介绍如何将Jlink的SWO接口上输出的调试信息在Keil中显示出来。
航顺芯片并购32位MCU研发公司成都蓉芯微,将围绕HK32 MCU生态和愿景快速扩张、赋能生态!
航顺芯片经过多年发展后为更快速的人才集聚和弥补核心技术商业化,采取先投资,双方团队磨合后并购32位MCU研发公司成都蓉芯微;将持续布局采取投资控股和并购等方式,围绕航顺HK32 MCU生态和愿景快速扩张赋能生态企业得以更加快速发展。
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可定制PCB最高层数:32层;板材类型:罗杰斯高频板/泰康尼高频板/ZYF中英天线板/F4B高频板/高频电路板/高频混压板/高频纯压板等;最大加工尺寸:609*889mm。
最小起订量: 1 提交需求>
登录 | 立即注册
提交评论