一、分层架构设计思想
2. OTA升级流程
    
本系统采用四层架构设计,遵循"高内聚低耦合"原则,每层职责明确:
1. HAL层(硬件抽象层)- 核心职责: 
- 硬件初始化(ADC/Serial/RTC/SPI/GPIO等) 
- 外设驱动实现(ST7735显示屏驱动、摇杆输入解析等) 
- 提供统一硬件操作接口 
- 关键实现示例: 

- 核心职责: 
- 统一输入输出接口 
- 设备无关性抽象 
- 数据类型标准化 
- 关键实现: 

- 核心职责: 
- 复杂业务逻辑实现 
- 系统级服务管理 
- 资源协调分配 
- 关键服务: 

- 核心职责: 
- 具体应用逻辑实现 
- 用户交互处理 
- 调用下层服务 
- 应用示例: 

| Bootloader | 0x00000000 | 64KB | 引导程序区 | 
| Main App | 0x00010000 | 448KB | 主应用程序区 | 
| Backup | 0x00080000 | 448KB | OTA备份区 | 
| SmartEEPROM | 0x000F0000 | 64KB | 保存应用数据 | 

// 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升级(使用串口升级不太好用,不如直接调试器升级)

 
					
				
 
			
			
			
						
			 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

