ESP-12F

一、ESP866flash读写

1.ESP8266读写接口

Flash擦除的最小单位是一个扇区,一个sector是4KB,从扇区0开始计数。
注意:

  • Flash先擦除后写入
  • Flash读写必须4个字节对齐

示例代码:

uint32 data[M]
// TODO:fit in the data
api_flash_erase_sector(N);
api_flash_write(N*4*1024,data,M*4);

返回值:

Typedef enum{
SPI_FLASH_RESULTT_OK,
SPI_FLASH_RESULT_ERR.
SPI_FLASH_RESULT_TIMEOUT
}SpiFlashOpResult;

1.1 spi_flash erase_sector

image

1.2 spi_flash_write

image

1.3 spi_flash_read

image

2、 Flash layout

2.1 Flash三个区域的划分:

2.1.1 程序区

代码编译生成的bin文件,烧录到Flash占用的区域,勿改写

2.1.2 系统参数区

** esp_iot_sdk中底层用于存放系统参数的区域,勿改写**

2.1.3 用户参数区

** 上层应用程序存储用户参数的区域。由实际Flash size设置**

2.2 none boot(软件不支持云端升级)

image
注意:

  • 程序区仅表明起始位置,Flash占用空间由编译烧录的bin大小决定。
  • esp_init_data_default.bin:位于Flash倒数第4个sector
  • blank.bin:位于Flash倒数第2个sector

2.3 boot(软件支持云端升级)

image

注意:

  • 程序区仅表明起始位置,Flash占用空间由编译烧录的bin大小决定。
  • esp_init_data_default.bin:位于Flash倒数第4个sector
  • blank.bin:位于Flash倒数第2个sector

3、 Flash读写保护机制

3.1 Flash读写保护介绍

Flash擦写流程是:先擦除整个扇区,再将该扇区的数据写回去。

保护示例解决问题:若扇区在擦写过程中突然断电,就可能导致该扇区的数据丢失。因此需要Flash读写保护机制。

在ESP8266_NONOS_SDK的IOT_Demo中user_esp_platform.c提供了Flash读写保护的示例

3.2 Flash读写保护实现原理

使用三个sector实现,将sector1和sector2作为数据sector,轮流读写,分为存放“本次”数据和“前一次”数据,sector3作为flag sector标志最新的数据存储sector。

image
其中:只有数据扇区sector1和sector2写完以后,才会写flag sector(sector3)

3.3 软件示例

IOT_Demo中,使用0X3C000开始的4个sector,作为用户参数存储区。0x3D000、0x3E000、0x3F000这3个sector实现了读写保护的功能,并存储了应用级参数esp_platform_saved_param

image

对于“有读写保护的存储区”的内存空间,通过调用user_esp_platform_load_param和user_esp_platform_save_param进行读写

  • user_esp_platform_load_param —— 读Flash用户参数区数据
  • user_esp_platform_save_param —— 写Flash用户参数区数据

**使用方式:参数struct esp_platform_saved_param定了目前乐鑫存储于Flash的用户级数据,用户可以直接将要存储的数据添加到结构体struct esp_platform_saved_param后面,调用spi_flash_write和spi_flash_read两个函数读写即可。

3.4 其他存储保护建议

3.4.1 Flash读写保护参考一

image

3.4.2 Flash读写保护参考二

image

参考:ESP8266flash读写说明

二、ESP-12F电路设计

1. 产品概述

ESP-12F由安可信科技开发的WI-FI模块,该模块核心处理器ESP8266是一款Tensilica L106超低功耗32位微型MCU,支持,标准的IEEE802.11 b/g/n协议,完整的TCP/IP协议栈。

内部系统框图如下:
image

2. 特性

image

3. 管脚定义

ESP-12F模组共接出16个接口
image

脚序 名称 功能说明
1 RST 复位
2 ADC A/D转换接口。输入电压范围01V,取值范围:01024
3 EN 芯片使能,高电平有效
4 IO16 GPIO16,接到RST管脚可做deep sleep的唤醒
5 IO14 GPIO14/HSPI_CLK
6 IO12 GPIO12/HSPI_MISO
7 IO13 GPIO13/HSPI_MOSI/UART0_CTS
8 VCC 3.3V供电,外部供电电源输出电流500mA以上
9 GND 接地
10 IO15 GPIO15/MTDO/HSPICS/UART0_CTS
11 IO2 GPIO2/UART1_TXD
12 IO0 GPIO0;下载模式:外部拉低,运行模式:悬空或外部拉高
13 IO4 GPIO4
14 IO5 GPIO5/TR_R
15 RXD UART0_RXD/GPIO3
16 TXD UART0_TXD/GPIO1

image

4. 原理图

image
image

image

注意:

  • 模组外围电路GPIO0必须上拉到VCC,GPIO15必须下拉到GND
  • EN脚和RST脚必须上拉到VCC
  • 模组的Pin9-Pin14不可用

5. 推荐模组封装设计尺寸

image

6. GPIO的使用

image

参考:ESP-12F产品规格书

三、ESP8266 Wi-Fi信道的选择

1. 介绍

ESP8266可以作为无线网卡用于嵌入式系统以实现设备的联网或D2D通信,可以作为主芯片独立运行并执行应用代码。

ESP8266内置了网络协议栈和整个射频电路,可以通过一组API或指令控制网络硬件,API和指令不会根据设备所处位置区分信道,因此需要合理的分配信道。IEEE802.11为ISM频段中低功率Wi-Fi通信定义了14个信道
image

2. 信道选择

在wifi网络中,对无线设备配置时注意影响到物理层的属性。其中乐鑫提供的API支持自主选择信道。ESP8266支持的802.11 b/g/n标准工作在ISM(免执照)频段,范围为2400~2484MHz。
对信道设置考虑注意事项如下:

  • 信道干扰
  • 合法性
  • FCC规定和发射功率

2.1 信道干扰

  • 不同信道之间的频段间隔:相邻两个信道中心频段间隔为5MHz。其中信道13和信道14的中心频率间隔为12MHz。
  • 相邻两个信道不造成干扰的条件:每个信道通常需要20MHz的带宽,如果要获得最佳无限性能,则设置为25MHz。

当两个发射器在同一无线空域内工作并有可能产生干扰时,将信道间隔设置为20MHz以上最好。

2.2 合法性

发射器的工作频段要符合所在国的频率划分,前几个信道在大多数国家都可以使用,使用后几个信道时必须谨慎,如果发射器偏离了设定的频段,则可能与相邻的有执照/限制的信道产生干扰。

2.3 FCC规定和发射功率

FCC规定ISM频段设备最大发射功率为30dBm。ESP8266发射器的输出功率最大为20dBm

总结:通过确保在某些情况下的设备运行不受干扰,可提升传输速率。

参考:ESP8266WIFI信道选择指南

四、 固件下载

1. 介绍

1.1 硬件准备

硬件设置如下图:
image
硬件连接如下图:
image

1.2 下载流程

image

  • 同步:发送同步帧同步波特率
  • 擦除数据:根据下载的固件大小和下载地址擦除flash响应 e
  • 发送数据:将固件封装成多帧发送给ESP8266
  • 发送接受帧:发送下载结束帧给ESP8266

2. 传输协议

传输协议采用串联线路网际网路协议(SLIP)封装格式

  • 每个数据包以0XC0开始和结束
  • 0xC0若出现在数据包中,将0xC0替换成两个字节0xDB 0xDC;
  • 0xDB若出现在数据包,则替换成0xDB 0xDD。
  • 所有数据帧中,数据包由数据头和长度不定的数据体组成
  • 所有多字节字段的存储模式均为小端模式
    image

2.1 数据头

image

image

2.2 数据体

image
数据体的word0-word3是描述数据体的,不同的数据指令其描述也不同。

3. 固件格式

固件 包含 文件头和数量可变的数据块。且所有多字节字段的存储模式均为小端模式。
image

文件头格式如下表:
image

4. 编程示例

4.1 效验和

uint32_t espcomm_colc_checkssum(unsigned char *data,uint16_t data_size)
{
	uint16_t cnt;
	uint32_t result;
	result = oxEF;
	for(cnt = 0;cnt < data_size;cnt++)
	{
		result ^= data[cnt];
	}
	return result;
}

4.2 擦除flash

#define BLOCKSIZE_FLASH 0x400
#define FLASH_DOWNLOAD_BEGIN 0x02
uint32 flash_pocket[];

int erase_flash(uint32_t size,uint32_t address)
{
	const int sector_size = 4096;
	const int sector_per_block = 16;
	const int first_sector_index = address / setor_size;
	const int total_sector_count = ((size % sector_size) == 0)?
							(size / sector_size):(size / sector_size +1 );
	const int max_head_sector_count = sectors_per_block - (first_sector_index % sectors_per_block);
	const int head_sector_count = (max_head_sector_count > total_sector_count) ? total_sector_count : max_head_sector_count;
	
	const int adjusted_sector_count = (total_sector_count > 2 * head_sector_count) ? (total_sector_count - head_sector_count):(total_sector_count + 1 ) / 2;
	
	erase_size = adjusted_sector_count * sector_size;
	
	flash_packet[0] = erase_size;
	flash_packet[1] = (size + BLOCKSIZE_FLASH -1 ) / BLOCKSIZE_FLASH;
	Flash_packet[2] = BLOCKSIZE_FLASH;
	flash_packet[3] = address;
	espcomm_send_command(FLASH_DOWNLOAD_BEGIN,(unsigned char*)&flash_pocket,16);
}

参考:ESP8266固件下载协议

五、ESP8266云端升级

1、概述

image
ESP8266支持两种主程序固件模式:

  • Non-FOTA(Firmware Over the Air):不支持通过WI-FI从云端下载新版本ESP8266固件
  • FOTA模式:支持通过WI-FI从云端下载新版本ESP8266固件

2、使用指南

2.1编译固件

以ESP8266_NONOS_SDK的IoT_Demo为应用程序示例,进行介绍。

2.1.1 修改IoT_Demo

2.1.1.1 下载IoT_Demo

下载连接SDK链接:https://www.espressif.com/zh-hans/support/download/sdks-demos

image

2.1.1.2 IoT_Demo提供SmartLight、SmartPlug、Sensor三种设备简单示例。Sensor不支持升级功能,默认设备类型SmartLight。
  • 在ESP8266_NONOS_SDK\IOT_DEMO\include\ user_config.h中对设备使能
  • user_config.h配置文件如图。每次只能使能一种设备。
    image
2.1.1.3 根据实际使用的ESP8266硬件模块FLASH的大小,修改用户参数区。

image

使用不同的FLash map对应头文件的修改设置:
image

2.1.2 编译IOT_Demo

image
image

  • step1:选择 boot版本(defautl 2)
    • 0 = boot_v1.1
    • 1 = boot_v1.2+
    • 2 = none
  • step2:STEP 2: choose** bin generate(default 0)**
    • 0 = eagle.flash.bin+eagle.irom0text.bin
    • 1 = user1.bin
    • 2 = user2.bin
  • STEP 3: choose spi speed (default 2)
    • 0=20MHz
    • 1 = 26.7MHz
    • 2 = 40MHz
    • 3 = 80MHz
  • STEP 4: choose spi mode (default 0)
    • 0=QIO,
    • 1=QOUT
    • 2=DIO
    • 3=DOUT
  • STEP 5: choose spi size and map (default 0)
    • 0= 512KB( 256KB+ 256KB)

注意:
1、user1.bin和user2.bin由同一份应用代码在编译过程中STEP2选择不同的选项,分别编译生成

  • 编译生成user1.bin后,先运行make clean清除上次编译生成的临时文件,再重新编译生成user2.bin

2、user1.bin和user2.bin的区别在于他们存放在flash的位置不同。
3、默认烧录user1.bin到Flash,并将user1.bin和user2.bin上传到云端。
4、编译STEP5之后的选项5和6仅sdk_v1.1.0 +boot 1.4+flash download tool_v1.2及之后支持。

3.1 烧录固件

3.1.1 获取master_device_key.bin

master_device_key:是开发者在乐鑫云服务器创建一个智能设备时,自动生成的属于该设备身份的唯一ID值。

乐鑫云帮助文档地址:http://iot.espressif.cn/#/help-zh-cn/

3.1.2烧录说明

根据实际ESP8266硬件模块Flash大小,对应烧录地址如下:
image

FOTA固件说明如下:

BIN文件 说明
master_device_key.bin 用户从乐鑫云申请,享受乐鑫云服务
存放在用户参数区,存储地址由用户应用程序定义
blank.bin(烧录位置一) 初始化RF_CAL参数区
烧录位置由应用程序中的user_rf_cal_sector_set设置决定
由乐鑫官网提供,位于ESP8266_SDK\bin路径下
esp_init_data_default.bin 初始化其他射频参数区,至少烧录一次
当RF_CAL参数区初始化烧录时,本区域也需烧录
由乐鑫官方提供,位于ESP8266_SDK\bin路径下
blank.bin(烧录位置二) 初始化系统参数区
由乐鑫官方提供,位于ESP8266_SDK\bin目录下
boot.bin 主程序,由乐鑫官方提供,位于ESP8266_SDK\bin目录下
user1.bin 主程序,编译应用程序生成,位于ESP8266_SDK\bin目录下

4.1 运行

将 ESP8266 模块上电运⾏(默认波特率 74880)。使用乐鑫手机app,配置ESP8266模块连接路由器。

5.1 乐鑫云升级操作

3、升级实现原理

3.1 Flash布局

image
分区说明:

  • user1.bin和user2.bin是同一个应用程序,选择不同的编译步骤,分别生成的两个固件,存放在SPI Flash的不同位置。
  • 系统参数区存储一个标志位,标识启动时应当运行user1.bin或user2.bin
  • 启动时先boot,boot读取系统参数区的标志位,判断运行user1.bin或user2.bin,然后到SPI Flash对应位置读取运行

3.2 软件实现

开发者可以使用其他云端服务器,调用ESP8266 SDK提供的软件接口,通过HTTP协议实现下载升级功能。

3.2.1 ESP8266_NONOS_SDK应用

  • 升级接口说明:《ESP8266 NOn_OS SDK API 参考》
  • 升级应用实例:ESP8266_NONOS_SDK\examples\IoT_Demo\user\user_esp_platform.c由user_esp_platform_upgrade_begin系列函数实现。

3.2.2 ESP8266_RTOS_SDK应用

3.2.3 自定义服务器要求

使用自定义云端服务器实现升级时,需要以下支持:

  1. ESP

4、固件版本命名规则

  • ESP8266_NONOS_SDK的IoT_Demo实例时对下载的固件版本命名需遵循规则,否则导致云端升级失败。
  • 基于ESP8266_NONOS_SDK实现升级应用无以下规则限制。

4.1 版本命名模板

模板:[v|b]Num1.Num2.Num3.tPTYPE([o|l|a|n])
形式:v1.0.2t45772(a)
形式解析:
image

4.2 版本命名解释

  • 版本类型:v或b
    • version:正式版本
    • bate:测试版本
    • 对应 IoT_Demo\include\user_iot_version.h 中的 #define VERSION_TYPE 定义
  • 版本值:Num1,Num2,Num3
    • Num:取值范围[0,9],整数
    • 示例:1.0.5
    • 对应IoT_Demo\include\user_iot_version.h中如下定义
      image
    • 乐鑫app最大支持1.4.0

4.3 类型标志t

t:类型标志符号,后面跟随PTYPE值

4.4 设备类型值:PTYPE

  • PTYPE:设备在乐鑫云上的ptype(product type)值
  • 对应 IoT_Demo\include\user_iot_version.h 中的 #define device_type 定义
    image

4.5升级支持

o:online,支持在线升级
l:local,支持本地升级
a:all,都支持
n:not support,不支持升级

  • 对应IoT_Demo\include\user_iot_version.h中如下定义
    image

参考:ESP8266云端升级指南

六、开始玩转ESP8266

1、概述

1.1 流程介绍

image

1.2 ESP8266 HDK

ESP8266 Hardware Development Kit包括ESP8266EX芯片、模组和开发板。使用什么样的开发板就使用相应厂商的开发固件

1.3 ESP8266 SDK

ESP8266 Software Development Kit是乐鑫为开发者提供的物联网应用开发平台。按照是否基于操作系统分为:non-OS和RTOS两种版本

1.4 ESP8266 FW

ESP8266 Firmware是一些可直接下载到ESP8266 HDK中的BIN文件,⽤户可以选择下载 Firmware Over-The-Air(FOTA,⽀持云端升级)和 non-FOTA(不⽀持云端升级)的 BIN ⽂件。
image
image

1.5 ESP8266 工具集

1.5.1 编译器

编译 ESP8266 SDK 需要使⽤ Linux 操作系统,乐鑫已将编译 SDK 所需要的⼯具安装到虚拟机中。⽤户只需安装虚拟机,并导⼊ ESP8266 编译器(OVA 镜像⽂件)即可直接编译 ESP8266 SDK

1.5.2 固件下载工具

ESP8266 DOWNLOADTOOL⼯具是由乐鑫官⽅开发的固件下载⼯具,⽤户可根据实际的编译⽅式和 Flash 的容量,将多个 BIN ⽂件⼀键下载到 ESP8266 ⺟板(开发板或者模组)的 SPI Flash 中

1.5.3 串口调试工具

串⼝调试⼯具可以通过标准 RS-232 端⼝直接与 ESP8266 建⽴通信。对于不带有物理串
⼝的 PC,可以使⽤ USB 转串⼝模块来虚拟出⼀个串⼝设备。⽤户可以直接在串⼝终端输
⼊命令和实时查看相关打印信息

  • CoolTerm(Windows 和 Mac 系统)和 Minicom(Linux 系统)作为串⼝调试⼯具

2、硬件准备

2.1 开发方案

  1. ⽤ USB 数据线将 PC 机与 ESP-LAUNCHER 的 USB-UART 接⼝相连
  2. 将开发板置为下载模式。
  3. 将 USB 转 TTL 串⼝模块与 PC 机连接。
  4. 将电源开关 (Power Switch) 拨到内侧给开发板上电
  5. 将芯⽚开关 (Chip Switch) 拨到外侧给芯⽚上电。
  6. 通过下载⼯具 (ESP8266 DOWNLOAD TOOL) 将固件下载到 Flash 中
  7. 下载完毕后将 GPIO0 开关 (GPIO0 Control) 拨到外侧将 ESP-LAUNCHER 开发板置为⼯作模式
  8. 使⽤芯⽚开关 (Chip Switch) 给芯⽚重新上电,芯⽚初始化时会从 Flash 中读取程序运⾏。

3、软件准备

3.1 Non-OS SDK

下载non-OS SDK连接:http://www.espressif.com/en/support/download/sdks-demos
image

  • bin:编译生成的bin文件,可直接下载到Flash中
  • documents:SDK相关的文档或链接
  • driver_lib:外设驱动的库文件。
  • examples:供用户二次开发的示例代码
  • include:SDK自带头文件,包含用户可使用的相关API函数及其他宏定义。
  • Id:链接时需要的脚本文件
  • lib:SDK提供库文件
  • tools:编译BIN文件所需的工具。

3.2 RTOS SDK

下载RTOS SDK链接:https://github.com/espressif/ESP8266_RTOS_SDK
image

  • bin:编译⽣成的 BIN ⽂件,可直接下载到 Flash 中。
  • documents:SDK 相关的⽂档或链接。
  • driver_lib:乐鑫官⽅提供的驱动示例代码。
  • examples:可供⽤户⼆次开发的示例代码。
    • openssl_demo:乐鑫官⽅提供的 OpenSSL 接⼝功能示例代码。
    • project_template:乐鑫官⽅提供的⼯程模板示例代码。
    • smart_config:乐鑫官⽅提供的 SmartConfig 功能示例代码。
    • spiffs_test:乐鑫官⽅提供的 SPIFFS ⽂件系统功能示例代码。
    • websocket_demo:乐鑫官⽅提供的 WebSocket 功能示例代码。
  • include:SDK ⾃带头⽂件,⽤户可使⽤相关 API 函数及其他宏定义
  • ld:链接时所需的脚本⽂件,如⽆特殊需求,⽤户⽆需修改。
  • lib:SDK 提供的库⽂件。
  • third_party:乐鑫开放源代码的第三⽅库,当前包含 freeRTOS、JSON、lwIP, mbedTLS、noPoll、OpenSSL、SPIFFS 和 SSL。
  • tools:编译 BIN ⽂件所需的⼯具,⽤户⽆需修改。

3、ESP8266工具

3.1 编译器

image
image
解锁密码:espressif

3.2 固件下载

在下方链接下载ESP9266 DOWNLOAD TOOL:
http://www.espressif.com/support/download/other-tools

4、Flash布局

image

  • 系统程序:存放运行系统必要的固件
  • 用户数据:有多余Flash用于用户数据区时,空闲区域均可以存放用户数据。用户可在任意空闲位置设置用户参数区。
  • RF_CAL参数:系统自动保存校准后的RF参数
  • 默认RF参数:将esp_int_data_default.bin下载至该区,保存默认的参数信息。
  • 系统参数:保存系统参数信息
  • Boot信息:位于FOTA固件的分区1,存放Boot文件。

4.1 Non-FOTA

4.1.1 布局说明

可以通过修改ESP8266_NONOS_SDK\ld\eagle.app.v6.ld文件改变eagle.irom0text.bin的上限值。即修改文件中irom0_0_seg参数的len字段。不同版本 SDK 中irom0.text ⽂件的地址也不同。必须查阅 eagle.app.v6.ld ⽂件;确保将 eagle.irom0.text.bin 下载到正确的地址
image
image

4.1.2 下载地址

image

4.2 FOTA

4.2.1 布局说明

image
image

4.2.2 下载地址

image

5、编译SDK

5.1 编译准备

5.1.1 编译SDK文件

若选择下载FOTA固件,需要修改SDK文件

  1. 进入window系统
  2. 根据不同的Flash布局修改ESP8266_NONOS_SDK\examples\IoT_Demo\include中的文件
    • user_light.h 和 user_plug.h 需要修改 #define PRIV_PARAM_START_SEC。
    • user_esp_platform.h 需要修改 #define ESP_PARAM_START_SEC
      image

5.1.2 加载SDK文件

  1. 进入Linux系统
  2. 运行虚拟机桌面终端LXTerminal
  3. 复制待编译文件至虚拟机共享目录
    • 复制 ESP8266_NONOS_SDK ⽂件夹到虚拟机共享⽬录.如:D:\VM\share ⽬录
    • 将 IoT_Demo ⽂件夹复制到 D:\VM\share\ESP8266_NONOS_SDK ⽬录下,
  4. 加载共享目录
    image

注意:2021-07-09 09:58:27 星期五若⽤户使⽤ RTOS SDK,请继续执⾏步骤 5;若使⽤ non-OS SDK,请跳过步骤 5

  1. 设置路径变量,指向SDK和BIN文件。
    export SDK_PATH=~/Share/ESP8266_RTOS_SDK
    export BIN_PATH=~/Share/ESP8266_RTOS_SDK/bin

⽤户可以将其添加在 .bashrc ⽂件中,否则每次重启编译器都需要重复步骤 5。

6、下载固件

  1. 双击ESP_DOWNLOAD_TOOL.EXE打开Flash工具
    image
SPIDownload 适用于SPI Flash下载
HSPIDownload 适用于HSPI Flash下载
RFConfig 射频初始化设置
MutiDownload 适⽤于多个⺟板的下载
  1. 在 Download Path Config 区域内双击“...” 选择需要下载的 BIN ⽂件,在 ADDR 内设置相应的下载地址。

  2. 配置 SPIDownload 相关选项
    image
    image
    image

  3. 下载完成后,在 ESP-LAUNCHER 开发板上将 GPIO0 Control 拨到外侧,并重新上电,可进⼊运⾏模式。

posted @ 2021-07-04 18:10  登云上人间  阅读(326)  评论(0编辑  收藏  举报