FLASH首要特性
STM8内部的FLASH程序存储器和数据EEPROM由一组通用寄存器来操控。用户能够运用这些寄存器来编程或擦除存储器的内容、设置写维护、或许装备特定的低功耗形式。用户也能够对器材的选项字节(Option byte)进行编程。
- STM8S EEPROM分为两个存储器阵列:
- 最多至 128K字节的FLASH程序存储器,不同的器材容量有所不同。请参阅4.4存储器安排结构了解更多细节。
- 最多至 2K字节的数据EEPROM(包括option byte-挑选字节),不同的器材容量有所不同。请参阅4.4存储器安排结构了解更多细节。
- 编程形式
- 字节编程和主动快速字节编程(没有擦除操作)
- 字编程
- 块编程和快速块编程(没有擦除操作)
- 在编程/擦除操作结束时和发生不合法编程操作时发生中止
- 读一起写(RWW)功用。该特性并不是一切STM8S器材都具有。请参阅ATM8详细的数据手册了解更多细节。
- 在运用编程(IAP)和在线编程(ICP)才能。
- 维护特性
- 存储器读维护(ROP)
- 依据存储器存取安全体系(MASS密钥)的程序存储器写维护
- 依据存储器存取安全体系(MASS密钥)的数据存储器写维护
- 可编程的用户发动代码区域(UBC)写维护
- 在待机(Halt)形式和活泼待机(Active-halt)形式下,存储器可装备为运转状况和掉电状况。
存储器安排结构
STM8S的EEPROM以32位字长(每字4字节)为根底安排起来。依据不同的器材,存储器安排机 构有所不同:
- 小容量STM8S器材
- 8K FLASH程序存储器,每页 64字节,共 128页
- 640字节数据 EEPROM,每页 64字节,共 10页。数据 EEPROM包括一页的选项字节(64字节)。
- 中容量STM8S器材
- 从 16K到 32K FLASH程序存储器,每页 512字节,最多 64页
- 1K字节数据EEPROM,每页 512字节,共 2页。数据 EEPROM包括一页的选项字节(512字节)。
- 大容量STM8S器材
- 从 64K到 128K FLASH程序存储器,每页 512字节,最多 256页
- 从 1K到 2K字节数据 EEPROM,每页 512字节,共 4页。数据 EEPROM包括一页的选项字节(512字节)。
页的巨细界说了用户发动代码区域(UBC)巨细的最小可调整值。请参阅4.4.1用户发动区域 (UBC)。 图3和图4展现了STM8S系列FLASH存储器和数据EEPROM的安排机构。
用户发动区域(UBC)
用户发动区域(UBC)包括有复位和中止向量表,它可用于存储IAP及通讯程序。UBC有一个两级维护结构可维护用户代码及数据在IAP编程中免于无意的擦除或修正。这意味着该区域总是写维护的,并且写维护不能经过运用MASS密钥来解锁。
在ICP形式下(运用SWIM接口)能够经过修正选项字节来装备UBC的巨细。UBC选项字节指定了分配在UBC中的页的数量。UBC区域的开端地址是0x00 8000。 能够经过读取UBC选项字节来取得UBC区域的巨细。请参阅图6,图7和图8来了解UBC区域的存储器映射。关于选项字节部分,请参阅相应的数据手册了解更多的UBC选项字节的细节。
2. 头两页(128字节)包括中止向量表。
1. UBC[7:0]=0x00意味着没有界说用户发动区域。请参阅相应的数据手册了解UBC选项字节的细节。
2. 头两页(1K字节)包括中止向量表。中止向量表只占用128字节(32个中止向量)。
2. 头两页(1K字节)包括中止向量表。中止向量表只占用128字节(32个中止向量)。
存储器维护
读维护
当选项字节中的ROP字节被编程为0xAA时,读维护就收效了。这种情况下,不管写维护是否收效,在ICP形式中(运用SWIM接口)读取或修正FLASH程序存储器和DATA区域都是被制止的。即便以为没有什么维护是彻底不行破解的,关于一个通用微处理器来说,STM8的读维护的特性也供给了一个十分高水平的维护等级。
能够在%&&&&&%P形式中经过对选项字节中的ROP字节从头编程来免除程序存储器、UBC和DATA区域的读维护。在这种情况下,程序存储器、UBC、DATA区域以及选项字节都被主动擦除,器材也能够被从头编程了。
存储器存取安全体系(MASS)
STM8在复位今后,主程序和DATA区域都被主动维护以避免无意的写操作。在企图修正其内容前有必要对其解锁,而解锁的机制由存储器存取安全体系(MASS)来办理。UBC区域的特性指明晰在UBC中的内容一向是写维护的一旦存储器内容被修正结束,引荐将写维护使能以避免数据被损坏。
对主程序存储器的写操作
在器材复位后,能够经过向FLASH_PUKR寄存器接连写入两个被叫作MASS密钥的值来免除主程序存储器的写维护。这两个写人FLASH_PUKR的值会和下两个硬件密钥比较较:
● 第一个硬件密钥:0b0101 0110 (0x56)
● 第二个硬件密钥:0b1010 1110 (0xAE)
需求经过如下过程来免除主程序存储器区域的写维护:
向FLASH_PUKR写入第一个8位密钥。在体系复位后,当这个寄存器被初次写入值时,数据总线上的值没有被直接锁存到这个寄存器中,而是和第一个硬件密钥值(0x56)比较较。
假如密钥输入过错,FLASH_PUKR寄存器鄙人一次体系复位之前将一向被锁住。鄙人一次复位前,再向该寄存器进行的任何写操作都会被体系疏忽掉。
假如第一个硬件密钥正确,当这个寄存器被第2次写入值时,数据总线上的值没有被直接锁存到这个寄存器中,而是和第二个硬件密钥值(0xAE)比较较。
假如密钥输入过错,FLASH_PUKR寄存器鄙人一次体系复位之前将一向被锁住。鄙人一次复位前,再向该寄存器进行的任何写操作都会被体系疏忽掉。
假如第二个硬件密钥正确,主程序存储器写维护被免除,一起FLASH_IAPSR中的PUL位为1。
在开端编程之前,运用程序能够校验PUL位是否被有效地置1。运用程序能够在恣意时间经过清PUL位来从头制止对FLASH程序区域的写操作。
对DATA区域的写操作
在STM8复位后,能够经过向FLASH_DUKR寄存器接连写入两个被叫作MASS密钥的值来免除DATA区域的写维护。这两个写入FLASH_DUKR的值会和以下两个硬件密钥值比较:
● 第一个硬件密钥:0b0101 0110 (0x56)
● 第二个硬件密钥:0b1010 1110 (0xAE)
需求经过如下过程来免除数据区域的写维护:
向FLASH_DUKR写入第一个8位密钥。在体系复位后,当这个寄存器被初次写入值时,数据总线上的值没有被直接锁存到这个存储器中,而是和第一个硬件密钥值(0x56)比较较。
假如密钥输入过错,运用程序能够测验从头输入这两个MASS密钥来对DATA区域进行解锁。
假如第一个硬件密钥正确,当这个寄存器被第2次写入值时,数据总线上的值没有被直接锁存到这个寄存器中,而是和第二个硬件密钥值(0xAE)比较较。
假如密钥输入过错,DATA EEPROM区域鄙人一次体系复位之前将一向坚持写维护状况。鄙人一次复位前,再向该寄存器进行的任何写操作都会被体系疏忽。
假如第二个硬件密钥正确,DATA区域的写维护被免除,一起FLASH_IAPSR中的DUL位为1。
在开端编程之前,运用程序能够经过校验DUL位是否被有效地置1来承认DATA区域现已将写维护解锁。运用程序能够在恣意时间经过清空DUL位来从头制止对DATA区域的写操作。
对选项字节的写操作的过程和对DATA EEPROM的操作大致相同。可是要注意到FLASH_CR2中的OPT位要位1以及FLASH_NCR中的NOPT位要为0,这样才能够对选项字节进行写操作。