这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【EV76S68A试用】4-分层架构设计与OTA升级系统详解

共1条 1/1 1 跳转至

【EV76S68A试用】4-分层架构设计与OTA升级系统详解

菜鸟
2025-08-17 19:45:53     打赏
一、分层架构设计思想

本系统采用四层架构设计,遵循"高内聚低耦合"原则,每层职责明确:

1. HAL层(硬件抽象层)
  • 核心职责

    • 硬件初始化(ADC/Serial/RTC/SPI/GPIO等)

    • 外设驱动实现(ST7735显示屏驱动、摇杆输入解析等)

    • 提供统一硬件操作接口

  • 关键实现示例

image.png


2. Interface层(接口抽象层)
  • 核心职责

    • 统一输入输出接口

    • 设备无关性抽象

    • 数据类型标准化

  • 关键实现

image.png


3. Service层(服务层)
  • 核心职责

    • 复杂业务逻辑实现

    • 系统级服务管理

    • 资源协调分配

  • 关键服务

image.png


4. App层(应用层)
  • 核心职责

    • 具体应用逻辑实现

    • 用户交互处理

    • 调用下层服务

  • 应用示例

image.png

二、OTA升级系统设计与实现1. 内存分配分区起始地址大小功能描述
Bootloader0x0000000064KB引导程序区
Main App0x00010000448KB主应用程序区
Backup0x00080000448KBOTA备份区
SmartEEPROM0x000F000064KB保存应用数据
2. OTA升级流程

flower.png

3. Bootloader关键实现


// bootloader (ATSAME51J20A)
void main() {
    // 1. 初始化基本硬件
    SYS_Initialize(NULL);
    
    // 2. 检查OTA标志
    if (*((volatile uint32_t*)OTA_FLAG_ADDR) == OTA_PENDING) {
        // 3. 执行固件搬运
        flash_erase(MAIN_APP_START, BACKUP_SIZE);
        
        uint32_t src = BACKUP_START;
        uint32_t dest = MAIN_APP_START;
        for (int i = 0; i < BACKUP_SIZE; i += FLASH_PAGE_SIZE) {
            flash_copy_page(src, dest);
            src += FLASH_PAGE_SIZE;
            dest += FLASH_PAGE_SIZE;
        }
        
        // 4. 清除OTA标志
        flash_write(OTA_FLAG_ADDR, 0, 4);
    }
    
    // 5. 跳转到应用程序
    void (*app_entry)(void) = (void(*)(void))(*(uint32_t*)(MAIN_APP_START + 4));
    __set_MSP(*(uint32_t*)MAIN_APP_START);
    app_entry();
    
    while(1);
}
三、已知问题

目前对于hal层的实现完全依赖于MPLAB X IDE,一旦更换配置就需要重新修改,因此这一块有待改进(如果有标准库的话可能会好一点)

OTA概率失败暂未解决(正在分析)

由于没有BT/WIFI模块故而采用串口进行升级,后续准备修改为USB升级(使用串口升级不太好用,不如直接调试器升级)





关键词: EV76S68A     OTA    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]