打印
[应用方案]

用户程序如何操作IAP存储

[复制链接]
2390|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
albertaabbot|  楼主 | 2024-5-25 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MA86系列(MTP型)
步骤1:将要修改的数据直接写入到MTP

其它系列(FLASH型)
步骤1:保存Flash数据到缓存
步骤2:擦除此页(使用页擦除模式)
步骤3:在缓存里修改要更新的数据
步骤4:将缓存里的数据写入到Flash(使用字节编程模式)
// 页擦除
        bit bEA=EA;
        IFADRH = ByteAddr;        //送地址高字节
        IFADRL= 0x00;               //送地址低字节;
        EA = 0;                        //关中断
        ISPCR = 0x80;               //允许ISP/IAP操作
        IFMT =0x03;                 //页擦除
        SCMD = 0x46;
        SCMD = 0xB9;
        nop();
        IFMT=0;
        ISPCR = 0;                    //清ISP/IAP特殊寄存器
        EA = bEA;                     //恢复中断


// 字节编程
        bit bEA=EA;
        IFD = ByteData;             //送所要写的数据   
        IFADRH = ByteAddr>>8;   //送地址高字节
        IFADRL= ByteAddr;          //送地址低字节;
        EA = 0;                         //关中断
        ISPCR = 0x80;                //允许ISP/IAP操作
        IFMT =0x02;                  // 字节编程
        SCMD = 0x46;
        SCMD = 0xB9;
        nop();
        IFMT=0;
        ISPCR = 0;                    //清ISP/IAP特殊寄存器
        EA = bEA;                     //恢复中断

// 字节读取
        bit bEA=EA;
        IFADRH = ByteAddr>>8;  //送地址高字节
        IFADRL= ByteAddr;         //送地址低字节;
        EA = 0;                        //关中断
        ISPCR = 0x80;               //允许ISP/IAP操作
        IFMT = 0x01;                //字节读取
        SCMD = 0x46;
        SCMD = 0xB9;
        nop();
        IFMT=0;
        ISPCR = 0;                   //清ISP/IAP特殊寄存器
        EA = bEA;                    //恢复中断
        return IFD;

使用特权

评论回复
沙发
juliestephen| | 2024-6-4 09:52 | 只看该作者
这两部分项目代码都需要烧录到User Flash中。通常,第一部分代码(IAP引导加载程序)位于Flash的开始区域,以便在芯片上电时首先运行。

使用特权

评论回复
板凳
everyrobin| | 2024-6-7 09:46 | 只看该作者
内置Flash通常从地址0x08000000开始,大小为512KB。在IAP方案中,这部分空间被分为BootLoader和用户程序两个区域,具体分配取决于实际需求。

使用特权

评论回复
地板
usysm| | 2024-6-8 13:17 | 只看该作者
调用IAP相关的写入函数,将数据包写入到Flash存储中。这一步通常涉及到数据的校验和确认。

使用特权

评论回复
5
adolphcocker| | 2024-6-8 15:21 | 只看该作者
将新的应用程序或数据写入IAP存储区域。这通常涉及到将数据从用户程序的RAM复制到IAP存储区域。

使用特权

评论回复
6
burgessmaggie| | 2024-6-9 17:04 | 只看该作者
如果满足升级条件,Bootloader会擦除用户程序区域的Flash,并通过串口读取新的用户代码数据,然后写入到用户程序空间中。

使用特权

评论回复
7
i1mcu| | 2024-6-9 18:15 | 只看该作者
将新的固件文件通过串口、USB、网络或其他通信接口传输到单片机。
IAP引导加载程序将接收到的固件数据写入到Flash存储中。

使用特权

评论回复
8
cemaj| | 2024-6-10 17:08 | 只看该作者
编程Flash通常是通过调用IAP提供的编程函数来实现的。编程操作可以写入单个字节、字或更大的数据块。在编程过程中,需要确保目标地址是有效的Flash地址,并且已经被擦除。

使用特权

评论回复
9
hearstnorman323| | 2024-6-10 21:43 | 只看该作者
用户程序跳转到IAP引导加载程序入口点,这通常是通过设置特定的寄存器值或使用跳转指令实现的。

使用特权

评论回复
10
louliana| | 2024-6-12 10:32 | 只看该作者
IAP操作完成后,用户程序需要通知系统IAP过程已经结束。这可能是通过清除IAP标志或者调用结束函数

使用特权

评论回复
11
10299823| | 2024-6-12 14:30 | 只看该作者
STM32F103ZET6提供多种启动方式,如内置FLASH启动、系统存储器ROM启动等,这决定了程序的执行流程。

使用特权

评论回复
12
lzmm| | 2024-6-12 19:14 | 只看该作者
如果固件校验成功,IAP引导加载程序会重启单片机,新固件随后开始运行。

使用特权

评论回复
13
kmzuaz| | 2024-6-12 20:42 | 只看该作者
IAP技术通常将Flash存储器分为两个存储体。当运行一个存储体的用户程序时,可以对另一个存储体进行重新编程。
在更新过程中,IAP引导加载程序会将新的程序数据写入到空闲的存储体中,并确保数据的完整性和正确性。

使用特权

评论回复
14
vivilyly| | 2024-6-14 09:02 | 只看该作者
如果需要更新,则IAP引导加载程序会通过预定义的通信接口(如USB、USART等)接收新的程序数据,并执行更新操作。

使用特权

评论回复
15
fengm| | 2024-6-14 10:19 | 只看该作者
在使用IAP功能之前,需要进行初始化。这通常包括设置IAP相关的寄存器和配置IAP所需的外设。

使用特权

评论回复
16
macpherson| | 2024-6-14 14:52 | 只看该作者
Bootloader首先进行时钟、中断向量表地址等的初始化,并检测是否需要触发升级过程(如按键是否被按下)。

使用特权

评论回复
17
kkzz| | 2024-6-14 21:03 | 只看该作者
STM32芯片通常将Flash区域划分为两部分,一部分用于存放Bootloader,另一部分用于存放用户应用程序。Bootloader是预先烧录好的,负责处理用户应用程序的更新过程,包括擦除、写入等操作。

使用特权

评论回复
18
modesty3jonah| | 2024-6-15 13:54 | 只看该作者
在特定条件下,可能需要强制改变PC指针的值,以跳转到新的用户程序执行。这要求对汇编语言有一定了解。

使用特权

评论回复
19
biechedan| | 2024-6-16 12:56 | 只看该作者
如果在升级过程中遇到错误,IAP引导加载程序应能回滚到升级前的状态

使用特权

评论回复
20
ingramward| | 2024-6-16 18:39 | 只看该作者
在编程Flash之前,需要先擦除目标页。这可以通过调用IAP提供的擦除函数来实现。擦除操作通常会擦除整个Flash页,而不是单个字节或字。

使用特权

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

本版积分规则

13

主题

1300

帖子

1

粉丝