ESP8266 non-os⑶ 注册partition table

partition table就是分区表的意思
注册分区表需要使用system_partition_table_regist()函数,这个函数必须在void ICACHE_FLASH_ATTR user_pre_init(void){这里面使用}。
在搭建SDK环境时,在makeFile中修改的SPI_SIZE_MAP?=6就是选择8266内存容量的,在sdk烧录时,同样要指定各模块烧录的地址与大小,并注册分区表。示例代码中是这样的:

#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#define SYSTEM_PARTITION_OTA_SIZE							0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR							0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR						0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR						0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0xfd000
#elif (SPI_FLASH_SIZE_MAP == 3)
#define SYSTEM_PARTITION_OTA_SIZE							0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR							0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR						0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR						0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0x1fd000
#elif (SPI_FLASH_SIZE_MAP == 4)
#define SYSTEM_PARTITION_OTA_SIZE							0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR							0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR						0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR						0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0x3fd000
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE							0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR							0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR						0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR						0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0x1fd000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE							0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR							0x101000   
#define SYSTEM_PARTITION_RF_CAL_ADDR						0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR						0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR				0x3fd000
/*   预定义地址分布参数
 * 0x6A000=434176=106
 * 0x101000=1052672字节=257扇区
 * 0x3fb000=4173824=1019
 * 0x3fc000=4177920=1020
 * 0x3fd000=4182016=1021
 * 0x1000 =4096 =1
 *******************************/
#else
#error "The flash map is not supported"
#endif

static const partition_item_t at_partition_table[] = {
    /*要分配系统空间名字                                  分配的地址                                            分配的内存空间大小*/
    { SYSTEM_PARTITION_BOOTLOADER, 						0x0, 												0x1000},
    { SYSTEM_PARTITION_OTA_1,   						0x1000, 											SYSTEM_PARTITION_OTA_SIZE},
    { SYSTEM_PARTITION_OTA_2,   						SYSTEM_PARTITION_OTA_2_ADDR, 						SYSTEM_PARTITION_OTA_SIZE},
    { SYSTEM_PARTITION_RF_CAL,  						SYSTEM_PARTITION_RF_CAL_ADDR, 						0x1000},
    { SYSTEM_PARTITION_PHY_DATA, 						SYSTEM_PARTITION_PHY_DATA_ADDR, 					0x1000},
    { SYSTEM_PARTITION_SYSTEM_PARAMETER, 				SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 			0x3000},
};

void ICACHE_FLASH_ATTR user_pre_init(void)
{
    if(!system_partition_table_regist(at_partition_table, sizeof(at_partition_table)/sizeof(at_partition_table[0]),SPI_FLASH_SIZE_MAP)) {
		os_printf("system_partition_table_regist fail\r\n");
		while(1);
	}
}

其中调用了user_interface.h,可以看出,最少都要定义这6个分区:

static const partition_item_t at_partition_table[] = {
    /*要分配系统空间名字                                分配的地址,从这个地址后面开始分配                          分配的内存空间大小*/
    { SYSTEM_PARTITION_BOOTLOADER, 						0x0, 												0x1000},
    { SYSTEM_PARTITION_OTA_1,   						0x1000, 											SYSTEM_PARTITION_OTA_SIZE},
    { SYSTEM_PARTITION_OTA_2,   						SYSTEM_PARTITION_OTA_2_ADDR, 						SYSTEM_PARTITION_OTA_SIZE},
    { SYSTEM_PARTITION_RF_CAL,  						SYSTEM_PARTITION_RF_CAL_ADDR, 						0x1000},
    { SYSTEM_PARTITION_PHY_DATA, 						SYSTEM_PARTITION_PHY_DATA_ADDR, 					0x1000},
    { SYSTEM_PARTITION_SYSTEM_PARAMETER, 				SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 			0x3000},
};
	SYSTEM_PARTITION_INVALID = 0,      /*系统分区无效*/
	SYSTEM_PARTITION_BOOTLOADER,            /*系统分区引导装载程序, 用户不能修改此分区地址,但可以修改大小 */
	SYSTEM_PARTITION_OTA_1,                 /* 系统分区OTA_1,用户不能修改此分区地址,但可以修改大小 */
	SYSTEM_PARTITION_OTA_2,                 /* 系统分区OTA_2,用户不能修改此分区地址,但可以修改大小*/
	SYSTEM_PARTITION_RF_CAL,                /* 系统分区RF_CAL,用户必须定义这个分区 */
	SYSTEM_PARTITION_PHY_DATA,              /* 系统分区物理量,用户必须定义这个分区  */
	SYSTEM_PARTITION_SYSTEM_PARAMETER,      /* 系统分区系统参数,用户必须定义这个分区  */
	SYSTEM_PARTITION_AT_PARAMETER,          /* 系统分区划分AT参数分区*/
	SYSTEM_PARTITION_SSL_CLIENT_CERT_PRIVKEY,/*系统分区SSL客户端证书私钥*/
	SYSTEM_PARTITION_SSL_CLIENT_CA,          /*系统分区SSL客户端CA*/
	SYSTEM_PARTITION_SSL_SERVER_CERT_PRIVKEY,/*系统分区SSL服务器证书私钥*/
	SYSTEM_PARTITION_SSL_SERVER_CA,          /*系统分区SSL服务器CA*/
	SYSTEM_PARTITION_WPA2_ENTERPRISE_CERT_PRIVKEY,  /*系统分区WPA2企业证书私钥*/
	SYSTEM_PARTITION_WPA2_ENTERPRISE_CA,    /*系统分区WPA2企业CA*/

	SYSTEM_PARTITION_CUSTOMER_BEGIN = 100,  /* 系统分区客户开始  用户可以在这里定义分区user can define partition after here 用户可以在这里定义分区*/
	SYSTEM_PARTITION_MAX                   /*系统分区最大化*/
发布了27 篇原创文章 · 获赞 19 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/oXingChenWuJi/article/details/102664894