打印
[APM32F0]

软件ISP跳转串口升级程序

[复制链接]
1004|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Fordhs168|  楼主 | 2024-9-20 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Fordhs168 于 2024-9-20 22:20 编辑

#技术资源#
    STM32-APM32   芯片内部存在一个固化的ISP固件,用于串口升级,固件存放在芯片系统存储区,每款芯片的系统存储区地址不同(具体可以查看对应芯片手册),系统存储区大小以及ISP固件大小也有差异。
    使用ISP升级,一般需要硬件配合,BOOT0拉到高电平,结合ISP上位机使用串口实现程序升级。本章主要描述无视BOOT0的状态,使用软件直接跳转到内部ISP固件区,实现程序升级。
    以APM32F030C8为例,系统存储区地址为0x1FFFEC00,大小为3K。具体芯片对应系统存储区地址查手册!
    ISP第一个握手信号是0x7F,MCU的ISP固件接收到且正确后会回复0x79。具体详细通信协议可以使用抓包工具查看,或者查看ISP协议资料(可以查看STM32的AN3155、AN2606等应用笔记
uint8_t data[1];
#define ISP_ADDR  0x1FFFEC00
typedef  void (*pFunction)(void);//定义一个指针,指向程序入口
pFunction Jump_To_ISPlication;

void Jump_to_ISP(void)
{
    uint32_t address;
     uint32_t JumpAddress;
//    FMC_Unlock();
    address = ISP_ADDR;
    JumpAddress = *(__IO uint32_t*)(address + 4);
    Jump_To_ISPlication = (pFunction) JumpAddress;
    __set_MSP(*(__IO uint32_t*) address);
    Jump_To_ISPlication();
}

int main(){
    //系统时钟初始化
    //串口1初始化,PA9 PA10
    //配置串口中断接收,将接收到的数据赋值给data[0]
  while (1)
    {
        if(data[0]==0x7f)//此处根据具体应用,可以设置按键进入等
         {
            __disable_irq();
            Jump_to_ISP();
         }
    }
  }




使用特权

评论回复
沙发
sesefadou| | 2024-10-3 08:01 | 只看该作者
实施数据校验机制,如CRC校验,以确保数据传输的准确性。

使用特权

评论回复
板凳
tifmill| | 2024-10-3 10:28 | 只看该作者
考虑数据传输的效率,选择合适的数据包大小和传输速率。过大的数据包可能导致传输错误增加,而过小的数据包则会降低传输效率。

使用特权

评论回复
地板
houjiakai| | 2024-10-3 11:24 | 只看该作者
在进行升级前,应当备份当前的固件,以便在升级失败时可以恢复。

使用特权

评论回复
5
minzisc| | 2024-10-3 12:57 | 只看该作者
虽然软件ISP可以在不改变BOOT0状态的情况下进行,但某些情况下可能仍然需要硬件配合,如设置BOOT0引脚的状态。

使用特权

评论回复
6
youtome| | 2024-10-3 14:16 | 只看该作者
查阅芯片手册,确定ISP固件在系统存储区的地址。
对于APM32F030C8,系统存储区地址为0x1FFFEC00,大小为3K。

使用特权

评论回复
7
phoenixwhite| | 2024-10-3 16:05 | 只看该作者
查阅MCU的官方文档或应用笔记,了解ISP固件的具体实现和通信协议细节。

使用特权

评论回复
8
nomomy| | 2024-10-3 17:47 | 只看该作者
考虑升级过程的安全性,防止未经授权的升级或恶意攻击。可以采用加密、数字签名等安全机制来确保升级文件的真实性和完整性。

使用特权

评论回复
9
jkl21| | 2024-10-3 19:32 | 只看该作者
采取必要的安全措施,防止未授权的访问或恶意攻击。

使用特权

评论回复
10
i1mcu| | 2024-10-3 21:07 | 只看该作者
设计回滚机制,以便在新固件存在缺陷时能够恢复到旧版本。

使用特权

评论回复
11
daichaodai| | 2024-10-3 23:06 | 只看该作者
ISP是通过串口来实现升级应用程序得

使用特权

评论回复
12
lzbf| | 2024-10-4 13:20 | 只看该作者
确认BOOT引脚(如BOOT0、BOOT1)的配置是否正确,以便进入ISP模式。

使用特权

评论回复
13
fengm| | 2024-10-4 14:55 | 只看该作者
添加错误处理机制,以应对可能出现的通信错误或数据丢失。

使用特权

评论回复
14
sanfuzi| | 2024-10-4 16:30 | 只看该作者
在升级过程中,对传输的数据进行校验是非常重要的。可以使用校验和、CRC(Cyclic Redundancy Check,循环冗余校验)等方法对数据进行校验,确保数据的完整性和正确性。

使用特权

评论回复
15
robertesth| | 2024-10-4 18:08 | 只看该作者
标设备的电源稳定,避免在编程过程中出现电压波动。

使用特权

评论回复
16
febgxu| | 2024-10-4 19:43 | 只看该作者
串口的波特率、数据位、停止位和校验位等参数设置正确。这些参数必须与升级程序和目标设备的要求相匹配,否则可能导致通信失败。

使用特权

评论回复
17
cemaj| | 2024-10-4 21:17 | 只看该作者
在进行ISP升级时,可能需要禁用全局中断以确保升级过程中不会被其他中断打断。在某些情况下,还需要处理与ISP相关的特定中断服务例程。

使用特权

评论回复
18
mickit| | 2024-10-4 22:51 | 只看该作者
在升级过程中,稳定的电源供应是必要的,以避免因电压波动导致的升级失败或设备损坏。

使用特权

评论回复
19
alvpeg| | 2024-10-5 09:38 | 只看该作者
实现稳定的软件跳转机制,确保在升级完成后能够正确地从升级程序跳转到新的应用程序。跳转过程中需要注意保存关键数据和状态,以避免数据丢失和系统异常。

使用特权

评论回复
20
backlugin| | 2024-10-5 11:15 | 只看该作者
每款芯片的系统存储区地址可能不同,需要查阅对应芯片的数据手册以获取确切的地址。例如,对于APM32F030C8芯片,系统存储区的地址为0x1FFFEC00。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

26

帖子

0

粉丝