ESP8266_RTOS_SDK 分区表详解与使用指南

ESP8266_RTOS_SDK 分区表详解与使用指南

ESP8266_RTOS_SDK Latest ESP8266 SDK based on FreeRTOS, esp-idf style. ESP8266_RTOS_SDK 项目地址: https://gitcode.com/gh_mirrors/es/ESP8266_RTOS_SDK

分区表概述

在ESP8266开发中,分区表是一个至关重要的概念。它定义了如何将有限的Flash存储空间划分为多个逻辑区域,每个区域用于不同的目的。理解分区表的工作原理对于ESP8266应用开发至关重要。

分区表的基本概念

ESP8266的Flash存储器可以被划分为多个应用程序分区以及各种数据分区(如校准数据、文件系统、参数存储等)。分区表被固定在Flash的0x8000偏移地址处,其长度为0xC00字节,最多可容纳95个分区表条目。每个条目包含以下关键信息:

  • 名称(标签)
  • 类型(应用程序、数据或其他类型)
  • 子类型
  • 分区在Flash中的偏移地址

内置分区表类型

ESP8266_RTOS_SDK提供了两种预定义的分区表配置,开发者可以直接使用:

1. 单一工厂应用(无OTA支持)

这种配置适用于不需要OTA(空中升级)功能的简单应用场景。其分区表结构如下:

nvs,      data, nvs,     0x9000,  0x6000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000, 0xF0000

特点分析:

  • 工厂应用分区位于0x10000(64KB)偏移处,这是默认启动的应用
  • 包含NVS库分区和PHY初始化数据分区
  • 简单直接,适合不需要升级功能的稳定应用

2. 双OTA应用分区

这种配置支持OTA功能,允许设备在保留当前运行版本的同时下载新版本,安全可靠地完成固件升级。

nvs,      data, nvs,     0x9000,   0x4000
otadata,  data, ota,     0xd000,   0x2000
phy_init, data, phy,     0xf000,   0x1000
ota_0,    0,    ota_0,   0x10000,  0xF0000
ota_1,    0,    ota_1,   0x110000, 0xF0000

关键特性:

  • 两个应用分区:ota_0和ota_1
  • 新增otadata分区,用于存储OTA更新状态信息
  • 启动时,如果otadata为空,则默认启动ota_0分区

创建自定义分区表

当预定义的分区表不能满足需求时,开发者可以创建自定义分区表。这通过CSV文件实现,提供了极大的灵活性。

CSV文件格式说明

CSV文件遵循以下规则:

  • 以#开头的行被视为注释
  • 每行定义一个分区
  • 字段顺序:名称、类型、子类型、偏移量、大小
  • 只有第一个分区的偏移量需要明确指定,后续分区的偏移量会自动计算

示例CSV文件:

# 名称,   类型, 子类型, 偏移量,  大小
nvs,      data, nvs,     0x9000,   0x4000
otadata,  data, ota,     0xd000,   0x2000
phy_init, data, phy,     0xf000,   0x1000
ota_0,    app,  ota_0,   0x10000,  0xF0000
ota_1,    app,  ota_1,   0x110000, 0xF0000

分区字段详解

名称字段
  • 最大长度16字符,超长会被截断
  • 仅用于标识,不影响系统行为
类型字段
  • 可以是app(0)或data(1)
  • 也可以是0-254(0x00-0xFE)的数值
  • 0x00-0x3F保留给系统核心功能使用
  • 自定义数据分区应使用0x40-0xFE范围
子类型字段

8位子类型字段的具体含义取决于分区类型。

应用分区子类型:

  • ota_0(0x10)到ota_15(0x1F):OTA应用槽位
  • test(0x20):测试用途

数据分区子类型:

  • ota(0):OTA数据分区,存储当前选择的OTA应用信息
  • phy(1):PHY初始化数据存储
  • nvs(2):非易失性存储(NVS)分区
偏移量与大小
  • 应用分区必须完全位于1MB的连续Flash空间内
  • 可以指定为十进制、十六进制(0x前缀)或使用K/M单位
  • 默认固件起始地址为0x10000,可修改但需注意对齐

分区表工具使用

二进制分区表生成

实际烧录到ESP8266的是二进制格式的分区表。转换工具gen_esp32part.py用于CSV和二进制格式间的转换。

常用命令:

  • CSV转二进制:python gen_esp32part.py --verify input.csv output.bin
  • 二进制转CSV:python gen_esp32part.py --verify input.bin output.csv
  • 查看二进制分区表:python gen_esp32part.py partition.bin

分区表烧录方法

  • make partition_table-flash:仅烧录分区表
  • make flash:烧录所有内容,包括分区表

注意事项:

  • 更新分区表不会擦除原有数据
  • 完全擦除Flash使用make erase_flash命令

最佳实践建议

  1. NVS分区大小:建议至少0x3000字节,如需存储大量数据可增加至0x6000字节

  2. PHY分区使用

    • 默认情况下PHY初始化数据编译在应用中
    • 如需使用独立PHY分区,需启用ESP_PHY_INIT_DATA_IN_PARTITION选项
    • 需要手动烧录PHY初始化数据
  3. OTA实现建议

    • 至少保留两个OTA槽位(ota_0和ota_1)
    • 确保otadata分区大小为0x2000字节
  4. 分区对齐:始终确保分区偏移量和大小正确对齐,避免性能问题和功能异常

通过深入理解分区表的工作原理和配置方法,开发者可以更灵活地规划ESP8266的存储空间,满足各种复杂应用场景的需求。

ESP8266_RTOS_SDK Latest ESP8266 SDK based on FreeRTOS, esp-idf style. ESP8266_RTOS_SDK 项目地址: https://gitcode.com/gh_mirrors/es/ESP8266_RTOS_SDK

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵇子高Quintessa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值