找回密码
 立即注册
查看: 38|回复: 13

STC8H1K08如何改写自身8k的flash

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-10-21 13:35:21
已绑定手机

6

主题

10

回帖

64

积分

注册会员

积分
64
发表于 昨天 13:35 | 显示全部楼层 |阅读模式
手册上找不到
使用汇编

我的目的是为了程序升级
回复

使用道具 举报 送花

3

主题

1860

回帖

568

积分

等待验证会员

积分
568
发表于 昨天 13:38 | 显示全部楼层
在使用STC8H1K08单片机进行程序升级时,若希望通过汇编语言实现对自身8KB Flash的改写,首先需要明确以下几点:

一、STC8H1K08 Flash特性概述

STC8H1K08为宏晶科技推出的一款增强型8051内核单片机,内置8KB Flash程序存储器,支持ISP(在系统编程)和IAP(在应用编程)功能。其Flash支持页擦除(通常为512字节或1KB为一页)和字节编程操作。

手册中虽未明确提供汇编语言实现Flash操作的示例,但其底层操作机制与C语言类似,均需通过特殊功能寄存器(SFR)进行控制。

二、Flash操作的基本流程

要实现Flash自编程(Self-programming),主要步骤如下:

1. 解锁Flash操作权限
2. 设置目标地址
3. 擦除目标页(如需更新该页内容)
4. 写入新程序数据
5. 锁定Flash防止误操作

三、关键寄存器说明(参考STC8系列通用手册)

| 寄存器名 | 功能说明 |
|----------|----------|
| IAPCMD  | IAP命令寄存器(0x8E) |
| IAPTRIG | IAP触发寄存器(0x8F) |
| IAPADDRH/IAPADDRL | IAP地址高位/低位寄存器 |
| IAPDATA | IAP数据寄存器 |
| IAPCONTR | IAP控制寄存器 |

四、汇编实现Flash写入的基本步骤

以下为使用汇编语言实现Flash写入的伪代码框架(以Keil C51汇编风格为例):
  1. asm
  2. ; 定义寄存器地址
  3. IAPCMD    EQU 0x8E
  4. IAPTRIG   EQU 0x8F
  5. IAPADDRH  EQU 0x8C
  6. IAPADDRL  EQU 0x8B
  7. IAPDATA   EQU 0x8A
  8. IAPCONTR  EQU 0x8D
  9. ; Flash写入子程序
  10. WriteFlash:
  11.     MOV IAPCONTR, #0x80   ; 使能IAP操作
  12.     MOV IAPADDRH, #HIGHADDRESS ; 设置高位地址
  13.     MOV IAPADDRL, #LOWADDRESS  ; 设置低位地址
  14.     MOV IAPDATA, #DATATOWRITE ; 设置要写入的数据
  15.     MOV IAPCMD, #0x02     ; 写入命令(0x02表示字节写入)
  16.     MOV IAPTRIG, #0x5A    ; 触发命令
  17.     MOV IAPTRIG, #0xA5
  18.     NOP
  19.     RET
  20. ; Flash擦除子程序
  21. EraseFlash:
  22.     MOV IAPCONTR, #0x80
  23.     MOV IAPADDRH, #HIGHADDRESS
  24.     MOV IAPADDRL, #LOWADDRESS
  25.     MOV IAPCMD, #0x03     ; 擦除命令(页擦除)
  26.     MOV IAPTRIG, #0x5A
  27.     MOV IAPTRIG, #0xA5
  28.     NOP
  29.     RET
复制代码

五、注意事项

1. 地址范围限制:Flash操作只能作用于非当前执行代码所在的区域,否则可能导致死机或程序跑飞。建议将升级代码置于Bootloader区域,通过跳转方式执行升级程序。

2. 中断关闭:在执行Flash操作期间,必须关闭全局中断,防止中断服务程序被擦除或改写。

3. 电压稳定性:Flash操作对电源稳定性要求较高,建议在VCC稳定、无干扰环境下进行。

4. 页对齐操作:Flash擦除以页为单位,写入以字节为单位。若需更新某段程序,应先擦除整页,再重新写入完整页内容。

5. 数据校验机制:建议在写入后进行读回校验,确保数据正确性。

六、实际应用建议

若目标为实现IAP功能(即通过串口接收新程序并更新Flash),建议采用如下结构:
Bootloader区:固定驻留于Flash高端,负责接收新程序并写入用户区。
用户程序区:位于Flash低端,正常运行主程序。升级时跳转至Bootloader执行更新。

Bootloader中使用汇编实现Flash写入,用户程序可通过串口协议上传新程序至RAM,再由Bootloader写入Flash。

七、总结

虽然STC8H1K08官方手册未提供汇编语言直接操作Flash的示例,但通过对其IAP寄存器的操作机制理解,完全可以通过汇编代码实现Flash的擦除与写入功能。关键在于掌握寄存器的使用方法、操作流程及注意事项,确保操作安全与程序稳定性。

如需进一步实现完整的升级流程(如接收数据、校验、跳转执行等),建议结合C语言与汇编混合编程,以提高开发效率与可维护性。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-10-21 13:35:21
已绑定手机

6

主题

10

回帖

64

积分

注册会员

积分
64
发表于 昨天 13:44 | 显示全部楼层
国芯人*** 发表于 2025-10-21 13:38
在使用STC8H1K08单片机进行程序升级时,若希望通过汇编语言实现对自身8KB Flash的改写,首先需要明确以下几 ...

可以给出靠谱的代码吗?比如将最后一kb的flash全部写为0的具体汇编代码
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:542
  • 最近打卡:2025-10-21 10:06:40

33

主题

2616

回帖

5775

积分

论坛元老

积分
5775
发表于 昨天 13:52 | 显示全部楼层
参考参考 ISP软件里面的范例程序?虽然不是具体的你想要的
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-10-21 13:35:21
已绑定手机

6

主题

10

回帖

64

积分

注册会员

积分
64
发表于 昨天 14:05 | 显示全部楼层
_奶*** 发表于 2025-10-21 13:52
参考参考 ISP软件里面的范例程序?虽然不是具体的你想要的

其实我纳闷的就一点:STC8H1K08总共8kdata flash,4k eeprom,我要写flash肯定是IAP方式,那么这8k data-flash映射的IAP的地址是多少到多少,手册我看来看去都没有说到。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:542
  • 最近打卡:2025-10-21 10:06:40

33

主题

2616

回帖

5775

积分

论坛元老

积分
5775
发表于 昨天 14:06 | 显示全部楼层
cjai*** 发表于 2025-10-21 14:05
其实我纳闷的就一点:STC8H1K08总共8kdata flash,4k eeprom,我要写flash肯定是IAP方式,那么这8k data-f ...

只有EEPROM区才能修改
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-10-21 13:35:21
已绑定手机

6

主题

10

回帖

64

积分

注册会员

积分
64
发表于 昨天 14:19 | 显示全部楼层
_奶*** 发表于 2025-10-21 14:06
只有EEPROM区才能修改

也就是STC8H1K08的程序是无法在线升级的?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:542
  • 最近打卡:2025-10-21 10:06:40

33

主题

2616

回帖

5775

积分

论坛元老

积分
5775
发表于 昨天 14:44 | 显示全部楼层
cjai*** 发表于 2025-10-21 14:19
也就是STC8H1K08的程序是无法在线升级的?

这个单片机没怎么用过,如果是这款单片机的flash是分成8K程序区 4KEEPROM区的话,,非得强行用也不是不行。8K作为IAP,剩下4K用作应用程序区。。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-10-21 13:35:21
已绑定手机

6

主题

10

回帖

64

积分

注册会员

积分
64
发表于 昨天 14:45 | 显示全部楼层
_奶*** 发表于 2025-10-21 14:44
这个单片机没怎么用过,如果是这款单片机的flash是分成8K程序区 4KEEPROM区的话,,非得强行用也不是不行 ...

这款单片机不能修改分区,8k+4k是定死的。这种情况下是不是无法升级了?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:542
  • 最近打卡:2025-10-21 10:06:40

33

主题

2616

回帖

5775

积分

论坛元老

积分
5775
发表于 昨天 14:46 | 显示全部楼层
或者你可以换成8H1K17?我看这个单片机整个IAP都可以分配成EEPROM,,就可以实现你想要的东西了
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-22 06:55 , Processed in 0.129105 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表