-
引言
1.1. 目的
ESP8285模组ESP-IDF(Espressif IoT Development Framework)进行软件开发。包括编译环境搭建,客制化AT,API开发,调试下载等。 -
ESP-IDF介绍
2.1. 概述
ESP8285和ESP8266的代码是兼容的,8285是内置FlashSPI Mode(设置为DOUT模式),8266需要外挂Flash,两款芯片内置超低功耗 Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发。
2.2. 开发环境
开发工具:
编译器:
Linux 64位系统:虚拟机下载地址(供 64 位 windows 虚拟机客户使用):
http://download.espressif.com/esp_share/env/ubuntu1804.ova
交叉编译工具链:
https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
下载工具:flash_download_tools_v3.6.8.exe
工程获取
乐鑫将代码及文档存放在在Github上,可用Git工具从以下地址获取获取。
https://github.com/espressif/esp-at
3.1资源需求
RAM:不小于4Kbytes.
ROM:不小于128Kbytes.
堆栈:不小于2Kbytes。
uart:波特率:115200;数据位:8;停止位:1;校验位:无;流控: 无
UART_RX:串口数据接收
UART_TX:串口数据发送
驱动依赖:MCU使用串口与ESP8285进行通讯,因此WIFI模块的驱动部分需要依赖系统的串口设备。
3.2 功能需求
实现ESP8285相关的AT指令;提供进行热点连接、扫描、TCP及TCP+SSL的数据通讯功能
AT指令尽量采用异步的处理方式,方便UI操作。
- 设计原理
模块ESP8285
RAM:128KB
ROM: 16Mbit内置SPI Flash
16MHz Tensilica L106 32 位 RISC 处理器
4.1模块框图
IO:如下表
功能模块名称 引脚描述 资源需求 G500脚位 IO口模式
ESP8285模块 复位(唤醒深度休眠) WIFI_RST GPIO3 I
串口接收 UART_RX G500_TXD I
串口发送 UART_TX G500_RXD O
下载控制 WIFI_FLASH_BOOT GPIO1 I
电源 WIFI_EN 3.3V电源 I
引脚说明:
UART:波特率:115200;数据位:8;停止位:1;校验位:无;流控: 无
WIFI_RST:wifi进入deep_sleep模式,通过拉低reset脚再拉高唤醒模块
CHIP_EN: 连接3.3V电源,上电复位
4.3软件框图
软件层次上,将MCU WIFI驱动分成了3层,各层的作用为:
系统设备层,MCU与ESP8285使用串口通讯,故需要使用系统的串口设备
外设驱动层,实现对ESP8285的驱动,包括:接收AT并解析,打包AT形式的数据并发送等功能
外设设备层,将驱动的一些细节进行封装,方便上层调用
AT指令交互:
- MCU WIFI设备层的发送接口被调用后,待发送数据被放到发送缓冲中;
- MCU WIFI驱动层从缓冲中取出数据,打包成ESP AT指令格式,调用串口设备发送接口,将数据通过串口发出
- ESP8285的AT task监听串口数据,解析有效AT指令,区分是客制化AT或ESP平台自带AT
4.4软件实现
平台指令集地址https://github.com/espressif/esp-at/blob/master/docs/zh_CN/get-started/ESP_AT_Commands_Set.md
API文档(部分可能未更新):
https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/api-guides/index.html
SSID编码格式
模组扫描到的中文SSID可能是GBK,也可能是UTF-8,转码操作在ESP8285端完成,MCU发过来的SSID默认编码格式GBK(如果是UTF-8,先转成GBK,目前传过来的统一是GBK)。连接热点的时候先用MCU发送来的SSID在之前的扫描列表中进行匹配(先进行扫描再进行连接,如果扫描到则保存到全局数组中,最大30个),未匹配到,则转成相反的编码(UTF-8)扫描,扫描不到则直接用传下来的SSID编码格式连接。
由于热点连接指令目前采用异步的方式,在发送连接指令时热点未打开的情况下,指令执行完返回了OK,模组进入自动连接流程,这时候热点开启,为防止传下来的SSID编码与热点本身的编码不一致,需要在自动连接时交替转码后连接,否则如果编码格式不对,则会导致在没有重新发送连接指令时,模组一直无法连接上此热点的情况。
SSL证书文件写入
ESP8285目前使用的是wolfSSL,SDK只提供了相关的lib文件,不便于功能扩展,只能使用平台自带的SSL指令,SSL的证书使用和固件一起烧录的方式加载到模组的FLASH当中,如果我们要在使用过程中修改证书,只能通过客制AT指令将保存在FLASH上的证书进行替换。
FLASH上的三个地址位置分别保存了CA、client_crt和client_key三个证书文件,AT指令修改证书的方案需要用到串口的AT模式和数据模式的切换,即在命令模式发送写证书文件的AT,然后进入数据模式,将证书文件的内容传入并保存在Flash的对应位置,保存成功后返回到命令模式。实现方式乐鑫提供了博文地址:https://blog.csdn.net/espressif/article/details/102777084.
- 下载及调试
在linux环境下,可通过make flash命令进行下载(python脚本)。Window下使用flash_download_tools进行下载。下载时使用的串口和AT指令的串口是同一个,ESP8285 共有两组 UART 口,分别为:UART0 和 UART1,其中,UART1 只有TX功能(GPIO2)。所以只能使用 UART0 作为命令输入口. 由于 ESP8285 UART pin 并不能像 ESP32 那样任意映射,只能使用 GPIO15 作为 TX、GPIO13 作为 RX, 或者使用 GPIO1 作为 TX、GPIO3 作为 RX. 默认 LOG UART 为 UART1, TX 为 GPIO2; AT port UART 为 UART0, TX 为 GPIO15, RX 为 GPIO13.
4.1 flash_download_tools
MCU的Flash不太够,所以需要裁剪ESP8285的bin文件。主要disable掉一些默认的配置。目前我们修改成了一个合适的sdkconfig,每次出版本时,使用这个sdkconfig替换SDK默认的文件即可。
下载时,首先通过拉高WIFI_FLASH_BOOT脚进入下载模式,然后拉reset脚复位模块,同时上位机发送sync frame,ESP8285收到
指令操作码如下表:
在ESP8285 deep sleep模式下,有时reset进入下载,由于flash未唤醒,会造成写flash失败,为了解决此问题,需要操作相关的寄存器release deep power-down