[牛人杂谈] 新唐M051单片机Bootloader实现原理

[复制链接]
2981|35
rosemoore 发表于 2025-10-18 18:32 | 显示全部楼层
Flash相关寄存器的操作是受保护的,需要先解锁。通常是向 ISPCTL 寄存器写入特定的密钥序列。
maqianqu 发表于 2025-10-18 20:30 | 显示全部楼层
Bootloader 区 就像是计算机的 BIOS/UEFI。它负责启动电脑,检查硬件,并决定是进入操作系统还是进入 BIOS 设置。
chenci2013 发表于 2025-10-18 20:54 | 显示全部楼层
需要从APROM的起始地址 0x00000000 读取这个值,并设置到MSP中。
sdlls 发表于 2025-10-18 21:30 | 显示全部楼层
Bootloader 的本质是在单片机的 Flash 存储器中划分出两个独立的区域:
Bootloader 区 (引导加载程序区):
位置:通常位于 Flash 的起始地址(例如 0x00000000)。
内容:一段特殊的、永不改变的程序。它的主要任务是:
初始化最基本的硬件(如 UART、USB)。
检查是否有固件更新请求(例如,检测某个特定引脚的电平、等待串口命令等)。
如果有更新请求,则进入 “升级模式”,通过通信接口接收新的固件数据。
将接收到的数据写入到 “用户应用程序区”。
升级完成后,跳转到新的用户应用程序。
特点:这段程序必须非常稳定和可靠,并且在设计时要防止自身被意外擦除或覆盖。
User Application 区 (用户应用程序区):
位置:位于 Bootloader 区之后的 Flash 空间。
内容:这是你的主应用程序,也就是产品的核心功能代码。
特点:这部分区域是可被 Bootloader 擦除和重写的。每次固件更新,实际上就是替换这个区域的内容。
plsbackup 发表于 2025-10-18 22:55 | 显示全部楼层
关键在于理解它的Flash存储器被分成了两个主要区域
macpherson 发表于 2025-10-20 22:56 | 显示全部楼层
M051 的 Flash 编程需要遵循特定的步骤,包括解锁、擦除、编程和上锁。
nomomy 发表于 2025-10-22 14:35 | 显示全部楼层
Bootloader的Flash擦写函数需链接到RAM执行,避免在Flash中运行时修改自身
youtome 发表于 2025-10-22 15:42 | 显示全部楼层
APROM (Application Program ROM):主程序区。这是存放您的用户应用程序代码的地方。正常启动时,CPU从这里开始执行代码。它的地址空间从 0x00000000 开始。
LDROM (Loader Program ROM):加载器区。这是专门用来存放Bootloader代码的地方。它的地址空间从 0x00100000 开始(注意,这是在CPU地址空间中的映射,物理上仍在同一块Flash上)。
albertaabbot 发表于 2025-10-22 16:09 | 显示全部楼层
Bootloader程序(在LDROM中)的核心任务是与上位机(如PC端的NewMicro ICP Tool)通信,并完成对APROM的擦除和写入。
robertesth 发表于 2025-10-22 17:21 | 显示全部楼层
从 ​​固定的起始地址(通常是 0x0000_0000)开始取指执行​​,这个地址一般映射到:
​​内部 Flash 的起始区域(如 0x0000_0000 ~ 0x0000_xxxx),也就是 Bootloader 代码存放的位置​​
或者通过 ​​向量表重映射(Vector Remap)​​ 和 ​​中断向量表偏移​​ 实现灵活跳转
bestwell 发表于 2025-10-23 19:14 | 显示全部楼层
单片机在上电复位后,是如何决定该执行APROM还是LDROM中的代码呢?
uiint 发表于 2025-10-23 19:58 | 显示全部楼层
若检测到升级请求(如串口指令或USB连接),则进入下载模式。
擦除APROM目标区域。
通过通信接口接收新固件(bin/hex格式),写入APROM。
校验固件完整性(如CRC校验)。
minzisc 发表于 2025-10-23 20:29 | 显示全部楼层
必须设置 Flash 的保护位(Protection Bits),防止 Bootloader 区域在用户程序运行时被意外擦除或修改。这是至关重要的一步,否则一次错误的操作就可能 “砖头” 你的设备。
wilhelmina2 发表于 2025-10-23 20:54 | 显示全部楼层
一个完整的Bootloader更新流程,涉及到应用程序和Bootloader两部分的协同工作。
sanfuzi 发表于 2025-10-23 21:43 | 显示全部楼层
更新完成后,系统需要跳转到新的应用程序去执行。这不是一个简单的跳转指令,因为涉及到中断向量表的重定位。
linfelix 发表于 2025-10-23 22:31 | 显示全部楼层
设初始化:启用串口、USB或CAN等通信接口,用于接收升级固件。
升级检测与处理:若检测到升级请求(如串口指令或USB连接),则进入下载模式1;擦除APROM目标区域;通过通信接口接收新固件(bin/hex格式),写入APROM;校验固件完整性(如CRC校验)。
跳转至用户程序:若无升级需求,从APROM的起始地址获取用户程序的栈指针和复位向量,并跳转执行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部