[OTA-day6A区更新数据]

这篇博客详细阐述了OTA更新过程,包括OTA_FLAG标志的置位与复位时机,程序下载的位置和方式,以及如何根据服务器指示进行版本更新。重点讨论了分片下载技术,并解释了在发生OTA事件时B区如何更新A区的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要更行数据我们首先得知道:

1.谁让OTA_FLAG标志位置位允许OTA升级?什么时候置位?怎么复位?

flash中A区OTA接收数据完成后置位OTA_FLAG;接收完成后复位不仅仅是在RAM中OTA_FLAG=0;还要将OTA_FLAG写入24C02中保存状态

2.最新版的程序下载到哪?

通过分片下载的方式下载到W25Q64中;什么叫分片下载?就是比如一个64K的文件,每次下载256字节,分数次下载 

3.OTA时,最新版本的程序文件如何下载?下载多少?

服务器告知下载并将OTA_FLAG置位;下载的大小也是通过服务器告知,下载的长度这个变量也需要保存到24C02中 

4.发生OTA事件时,B区如何更新A区?

根据保存在24C02中的下载长度,拿数据(一次拿1024字节),写到A区 

main.h

#ifndef MAIN_H
#define MAIN_H

#include "stdint.h"

#define  GD32_FLASH_SADDR   0x08000000                                             //FLASH起始地址
#define  GD32_PAGE_SIZE     1024                                                   //FLASH扇区大小
#define  GD32_PAGE_NUM      64                                                     //FLASH总扇区个数
#define  GD32_B_PAGE_NUM    20                                                     //B区扇区个数
#define  GD32_A_PAGE_NUM    GD32_PAGE_NUM - GD32_B_PAGE_NUM                        //A区扇区个数
#define  GD32_A_START_PAGE  GD32_B_PAGE_NUM                                        //A区起始扇区编号
#define  GD32_A_SADDR       GD32_FLASH_SADDR + GD32_A_START_PAGE * GD32_PAGE_SIZE  //A区起始地址

#define  UPDATA_A_FLAG      0x00000001        //状态标志位,置位表明需要更新A了

#define OTA_SET_FLAG        0xAABB1122        //OTA_flag对勾状态对应的数值,如果OTA_flag等于该值,说
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值