STM8S——Flash program memory and data EEPROM

发布者:sclibin最新更新时间:2019-11-19 来源: eefocus关键字:STM8S  Flash  program  memory  data  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

1、简介


  STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的;所以我们可以通过这些通用寄存器来编程或擦除存储器的内容、设置写保护、或者配置特定的低功耗模式。我们也可以自己对器件的 option byte 进行编程。在这里我们只简单的讲解如何对STM8S内部的数据存储区域(data memory)进行写操作、读操作、擦除操作。


2、存储架构图


STM8S内部存储包括:FLASH程序存储器(FLASH program memory)和数据EEPROM(DATA EEPROM);


(1)数据EEPROM又包括:


数据存储区域(DATA MEMORY):指定从地址0x00 4000开始,其中包括 [1 block] 的option byte,数据存储区域用于存储应用数据;

(2)FLASH程序存储器又包括:


用户启动区域(USER BOOT CODE):指定从地址0x00 8000开始,其中包括UBC option bytes和 [128 byte] 的中断矢量(interrupt vectors);

程序存储区域(MAIN PROGRAM):用于存储应用程序代码;

  所以我们的操作是在DATA MEMORY里面,在该区域的指定地址进行读取内容、写入内容、擦除内容。


3、操作方法


(1)FLASH_ReadByte( ADDRESS ):读取地址ADDRESS处的1字节内容


(2)FLASH_ProgramByte( ADDRESS , DATA ):写1字节的内容到地址ADDRESS处


(3)FLASH_EraseByte( ADDRESS ):在地址ADDRESS处删除1字节的内容


4、操作步骤


使用操作前的配置


(1)配置选择编程时间,选择标准模式;


(2)解除数据存储区域的写保护;


说明:UBC和DATA MEMORY都有写保护,其中UBC的写保护是永远无法解锁的,而DATA MEMORY的写保护是可以通过连续写入两个MASS密钥值来解除该区域的写保护的;第一个密钥为0x56,第二个密钥为0xAE;只有当两个密钥输入正确(输入到寄存器FLASH_DUKR中)且输入密钥的先后顺序正确时,才会解除写保护;否则该区域在下一次系统复位之前都将一直保持写保护状态。


(3)读取、写入、擦除等操作;


5、代码实现



 1 /* Includes ------------------------------------------------------------------*/

 2 #include "stm8s.h"

 3 

 4 /* Private typedef -----------------------------------------------------------*/

 5 typedef enum { FAILED = 0, PASSED = !FAILED} TestStatus;

 6 

 7 /* Private variables ---------------------------------------------------------*/

 8 __IO TestStatus OperationStatus;

 9 

10 

11 /**

12   * @brief How to Read / Write / Erase one Byte on FLASH memory.

13   * @par   Examples description

14   *        - Read one byte at address 0x40A5

15   *        - Write its complement value at address + 1

16   *        - Check programed value

17   *        - Erase 2 byte (address 40A5 & 40A6)

18   *        - Check the 2 bytes value is 0x00.

19   * @param  None

20   * @retval None

21   */

22 void main(void)

23 {

24 

25     uint8_t val = 0x00, val_comp = 0x00;

26     uint32_t add = 0x00;

27 

28     /* Define FLASH programming time */

29         //Standard programming time fixed at 1/2 tprog

30     FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

31 

32     /* Unlock Data memory */

33         //compare to two hardware key value: 0x56 and 0xAE

34     FLASH_Unlock(FLASH_MEMTYPE_DATA); 

35 

36     /* Read a byte at a specified address */

37     add = 0x40A5;

38         //read one byte from the address

39     val = FLASH_ReadByte(add); 

40 

41     /* Program complement value (of previous read byte) at previous address + 1 */

42     val_comp = (uint8_t)(~val);

43         //modify one byte at the address

44     FLASH_ProgramByte((add + 1), val_comp); 

45 

46     /* Check program action */

47     val = FLASH_ReadByte((add + 1));

48     if (val != val_comp)

49     {

50         /* Error */

51         OperationStatus = FAILED;

52         /* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */

53         /* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */

54         while (1)

55         {

56         }

57     }

58 

59     /* Erase byte at a specified address & address + 1 */

60         //erase one byte at the address

61     FLASH_EraseByte(add);

62     FLASH_EraseByte((add + 1));

63     /* Erase action */

64     val = FLASH_ReadByte(add);

65     val_comp = FLASH_ReadByte((add + 1));

66     if ((val != 0x00) & (val_comp != 0x00))

67     {

68         /* Error */

69         OperationStatus = FAILED;

70         /* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */

71         /* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */

72         while (1)

73         {

74         }

75     }

76 

77     /* Pass */

78     OperationStatus = PASSED;

79     /* OperationStatus = PASSED, if the data written/read to/from DATA EEPROM memory is correct */

80     /* OperationStatus = FAILED, if the data written/read to/from DATA EEPROM memory is corrupted */

81     while (1)

82     {

83     }

84 }

FLASH

关键字:STM8S  Flash  program  memory  data  EEPROM 引用地址:STM8S——Flash program memory and data EEPROM

上一篇:M41T11-RTC(实时时钟)
下一篇:STM8S——Clock control(CLK)

推荐阅读最新更新时间:2024-11-03 22:53

Bootloader升级方式一————擦、写flashRAM中运行
在汽车ECU软件运行中,软件代码运行安全性是第一,在代码中尽可能的不要固化有flash_erase、flash_write操作存在,主要是防止当出现异常情况时,程序跑飞,误调用erase、write对flash操作,使得原软件受到破坏,以致ECU不能正常工作。 Bootloader也称为启动引导加载程序,这段程序是硬件设备在上电复位之后执行的第一段软件代码。 方式一、为了实现在线更新功能,Bootloader程序需要对flash进行操作。一般情况下,我们将FLASH操作程序作为Bootloader组件的一部分固化在存储器中,在需要执行flash擦除或烧写操作时,先将该部分代码复制到RAM中,再做调用。操作代码的复制工作也可
[单片机]
Bootloader升级方式一————擦、写<font color='red'>flash</font>在<font color='red'>RAM</font>中运行
NAND Flash 5月上旬合约价小涨 未来价格区间震荡
研究机构集邦科技(DRAMeXchange)表示,5月上旬NAND Flash(储存型快闪记忆体)合约均价上涨0%到12%,但现在市场出现多空交杂情况,面对季底结帐效应,估计未来合约价走势呈现区间震荡。 集邦科技表示,虽然一些供应商表态将持续缓涨5月份合约价,但是自5月下旬到6月份部份供应商也可能因为面临季底结帐效应,此外,目前H1N1新流感尚未对 NAND Flash市场消费产生明显的影响,但这项潜在的不确定变数,可能对未来NAND Flash市场产生不利的影响,估计合约价未来走势震荡。 集邦科技表示,4月底到5月初,韩国、日本供应商及中国的客户多在处在假期中,近期市场的成交比较清淡, 5月上旬的市况与4月
[半导体设计/制造]
一种嵌入式系统的内存分配方案
摘要:实时性、可靠性的要求,使得许多嵌入式应用使用自己的内存管理程序。本文探讨嵌入式系统中对内存管理的要求、存在的问题以及可能的解决策略;介绍一种“一次分配,多次使用”的动态内存分配方法,并给出2个例子。 关键词:嵌入式系统 内存管理 一次分配多次使用 1 嵌入式系统中对内存分配的要求 ①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。 ②可靠性。也就是内存分配的
[嵌入式]
双口RAM在组合导航系统中的应用
摘要:介绍了双口RAM器件CY7C028的内部结构及工作原理,详细讨论了CY7C028在INS/GPS组合导航系统中的具体应用,给出了CY70C28与TMS320F240和TMS320VC33之间的接口电路,并对CY7C028的分区处理进行了独特的软件设计,提高了实时性。 关键词:双口RAM TMS320VC33 TMS320F240 组合导航系统 CY7C028 导航系统是负责将载体从起始点引导到目的地的系统装置。近年来,随着微型计算机技术和卫星通信技术的发展和实际应用,使得导航系统的精确性和可靠性达到了更高的要求,促使导航系统向综合化和容错化方法发展,进而发展了以惯性导航为主体的各种组合导航系统。在众多组合导般系统中,I
[应用]
AMD计划扩大基于Opteron处理器的系统内存
AMD日前表示,正在与IC厂商合作开发有关技术,预计该技术将增强未来基于Opteron处理器的系统内存。 这种名为“Socket G3 Memory Extender(G3MX)”的技术,计划在2009年用于处理器平台生态系统。预计它会增强企业级服务器的性能,比如用于数据库、虚拟化和多核计算的服务器。 据介绍,G3MX支持DDR3内存规格。AMD正在与IC供应商IDT和Inphi联合开发这种技术,后两家公司计划在其产品中集成G3MX。 AMD表示,G3MX提供一种基于DDR3的手段来扩大服务器系统的总体内存,因此提高了计算的灵活性。AMD计划2009年在它的下一代架构增强中采用这项技术。 AMD计划在大约两年后推出其首款4
[焦点新闻]
修复内存溢出问题 Android 5.1.1来了
    要知道Android系统因为内存溢出问题导致手机越用越卡,不过这个好几个版本都没有修复的大BUG即将和我们say goodbye了。有消息称谷歌即将发布Android 5.1.1,而这个版本将重点修复安卓系统饱受人诟病的内存溢出问题。     有外媒报道称,在谷歌的Android工作室网站上,已经出现了Android 5.1.1的SDK工具包,现在开发者已经可以下载了。此外,我们还从中得知,最先拥有升级Android 5.1.1的资格的产品是Nexus 7和Nexus 9。   内存溢出是困扰安卓平台多年的BUG,当用户打开手机中的应用程序之后,系统会占用一部分RAM,而当用户关闭它们之后,这部分内存依然还会被
[手机便携]
让STM8使用cosic编译器时显示ram flash stack占用信息
mapinfo v0.4 for cosmic map 功能介绍: 1. 对cosmic编译器生成的map文件进行分析,显示ram flash eeprom stack的占用量 ps:ram仅指ram变量(全局+静态+局部变量),不包括栈(stack) eeprom仅能统计由@eeprom定义出的变量或常量 2011-03-24: 1. 修正_Bool类型定义出的变量占用ram不正确的BUG 2010-10-28: 1. 增加堆栈占用(stack)显示 2. 增加对自定义(未定义)段的显示,一起统计到unknown显示 使用方法如下: 1. 将附件压缩包中的mapinfo.exe解压并解压到stvd的安装路径S
[单片机]
让STM8使用cosic编译器时显示<font color='red'>ram</font> <font color='red'>flash</font> stack占用信息
MEMORY CONTROLLER
1.S3C6410 地址空间 For memory at the table details 2. SDRAM图解 3. SDRAM 芯片容量计算: L_BANK 数目 * 一个 L_BANK 中的单元数目 * 每个单元的位宽 4. 根据芯片手册分别完成 SDRAM 控制器初始化 ,以及 SDRAM 芯片初始化
[单片机]
<font color='red'>MEMORY</font> CONTROLLER
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved