# FOTA 与 FOTA2 选择指南 ## 核心区别总结 ### fota(底层核心库) 定位: 基础升级,提供最核心的固件写入能力 **核心能力:** 支持两种写入方式:fota.run() 分段写入 和 fota.file() 文件直接升级 支持内部存储和外部SPI Flash 提供完整的升级流程控制:init → wait → run/file → isDone → finish 代码特点: ```lua -- 需要手动控制每个步骤 fota.init() while not fota.wait() do sys.wait(100) end fota.run(buf) -- 或 fota.file("/update.bin") -- 自行检查状态和重启 ``` ### fota2(libfota2扩展库) 定位: 完整的远程升级解决方案,开箱即用 **核心能力:** 自动处理HTTP/HTTPS网络下载 支持合宙IoT平台和自建服务器 内置版本检查、下载、验证全流程 提供详细错误码和回调函数 代码特点: ```lua -- 一行代码完成升级 local function fota_cb(ret) if ret == 0 then log.info("升级包下载成功,重启模块") rtos.reboot() end end libfota2.request(fota_cb, opts) ``` ## 适用场景推荐 ### 选择 fota 的情况: #### 需要自定义升级数据源 通过串口接收升级包 通过MQTT、TCP等自定义协议传输 从SD卡、U盘等外部存储读取 #### 对升级流程有特殊控制需求 需要在升级前后执行特定操作 需要精细控制数据写入时机 需要自定义进度监控逻辑 #### 资源极度受限环境 设备存储空间极小,内存紧张,无法加载额外库 #### 开发测试阶段 需要调试升级过程的每个环节 需要验证自定义升级方案 ### 选择 fota2 的情况: #### 标准的HTTP远程升级 从服务器下载升级包 使用合宙IoT平台服务 需要HTTPS安全下载 #### 希望快速实现升级功能 不想处理网络下载细节 需要自动版本检查 希望简单的错误处理 #### 生产环境部署 需要稳定的远程升级方案 需要详细的升级状态反馈 支持定时自动检查更新 ## 实际选择建议 ### 新手用户 → 直接选择 fota2 接口简单,学习成本低 内置完整错误处理 适合大多数物联网应用场景 ### 高级用户 → 根据需求选择 标准网络升级 → fota2 自定义数据传输 → fota + 自定义逻辑 一句话总结:**用 fota2 省心省力,用 fota 自由灵活**