Flash program memory and 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

时间: 2024-12-26 20:50:17

Flash program memory and data EEPROM的相关文章

The differentiation program with abstract data

#!r6rs ( import ( rnrs base ( 6 ) ) ( rnrs io simple ( 6 ) ) ) ( define ( deriv exp var ) ( define ( variable? x ) ( symbol? x ) ) ( define ( =number? exp num ) ( and ( number? exp ) ( = exp num ) ) ) ( define ( same-variable? x1 x2 ) ( and ( variabl

PIC24F08KA101 Link Error: Could not allocate program memory[解决办法]

使用 mplab x 3.5 验证SM4 的时间成本时遇到: build/default/production/_ext/1472/sm4.o: Link Error: Could not allocate section .text, size = 2260 PC units, attributes = code Link Error: Could not allocate program memory 目前有两种方案: 1)删除不相关代码 2)工程配置优化级别为s

Using Internal EEPROM of PIC Microcontroller

There are commonly three types of memories in a PIC Microcontroller, Flash Program Memory, Data Memory (RAM) and EEPROM Data Memory. We write Programs in the Flash Program Memory of a microcontroller. Flash memory makes it possible to program a micro

Arduino M0 的一个坑(2015-12-25)

前几天收到 Arduino M0,试各项功能都正常,可就是串口监视器/串口助手不能显示程序里打印的输出,好生奇怪,各种换波特率各种PC串口程序换着试,资料不多,官方资料也只说到 Serial1 用于 pin 0 1 的(实际上测试的时候提示 Serial1 没有声明),Serial 用于 USB 通信,根本只字未提 SerialUSB 的事,直到今天,哦不,是昨天了,下午在群里提问,“忠忠”回复有一个 SerialUSB 用于 USB 的串口通信,这才知道了这个事.真是好坑人啊. 官网链接:ht

语音开关设计

关键字 ASR - Auto speech recognition VAD - voice activity detection/语音活动检测 FIFO - First in First out/先进先出 设计导入 2016年春节过后,赵师傅提供了一个<智能照明语音控制>的设计要求文档.赵师傅希望能够开发一款语音控制灯光亮度的开关设备,相关信息写在了该文档中. 春节前,赵师傅去了一趟重庆.在那里,有一个销售经理询问赵师傅是否可以设计一款用语音来控制开关等的设备.并且,提供了一款相关的产品宣传视

Nios II 系统从EPCS器件中启动的设置过程

先Reset Vector EPCS Exception Vector Ram工程Program memory ,Read-only data memory...均为RAM.Hardware Image选择 EPCS编译.编译:先把POF文件下载到EPCS中.放到最底层后通过FLASH PROGRAMER 将工程和.SOF文件下载到EPCS中复位启动即可. Nios II 系统从EPCS器件中启动的设置过程,布布扣,bubuko.com

初识DSP

1.TI DSP的选型主要考虑处理速度.功耗.程序存储器和数据存储器的容量.片内的资源,如定时器的数量.I/O口数量.中断数量.DMA通道数等.DSP的主要供应商有TI,ADI,Motorola,Lucent和Zilog等,其中TI占有最大的市场份额.TI公司现在主推四大系列DSP1)C5000系列(定点.低功耗):C54X,C54XX,C55X 相比其它系列的主要特点是低功耗,所以最适合个人与便携式上网以及无线通信应用,如手机.PDA.GPS等应用.处理速度在80MIPS--400MIPS之间

RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器区别

常见存储器概念:RAM.SRAM.SDRAM.ROM.EPROM.EEPROM.Flash存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失. 在单片机中,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据. FLASH:单片机运行的程序存储的地方. SRAM:存储单片机运行过程中产生的了临时数据.

为什么单片机中既有Flash又有EEPROM

单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现. 插播一段:ROM最初不能编程,出厂什么内容就永远什么内容,不灵活.后来出现了PROM,可以自己写入一次,要是写错了,只能换一片.随着不断改进,终于出现了可多次擦除写入的EPROM,每次擦除要把芯片拿到紫外线上照一下,想一下你往单片机上下了一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后