1. 测试前的准备
在这次测试中,我们使用了 ESP32-WROOM-32D开发板 进行测试,在安装了对应的 esp-idf工具链 后使用 esp-idf
里的 softAP 进行测试,测试工具使用了 Tektronix MDO3104 示波器 。
2. 测试过程
在这一节中,我们将测试过程需要的操作进行详细说明。
-
1. 工具链的安装
在进行测试之前,我们需要安装工具链。工具链的详细安装步骤可以在 ESP-IDF Programming Guide 找到, 这里与不多加以描述。
注: esp-idf 使用 esp-iot-solution 同一套工具链, 所以如果你的平台上能够编译 esp-iot-solution 中的 example , 则工具链无须重复安装。
-
2. 测试代码下载
在工具链安装完成之后,我们接下来需要下载完整的 esp-idf 工程, 推荐使用如下指令:
$ git clone https://github.com/espressif/esp-idf.git $ cd esp-idf $ git submodule update --init --recursive
更新
submodule
时可能需要几分钟的时间, 如果本地已经有 esp-idf 仓库, 请及时更新到最新版本。 -
3. 测试代码编译及下载
在 esp-idf 文件夹里放置了很多示例工程, 一般是放在
esp-idf/examples
目录下. 所有代码编译方式都基本相同, 这里以 SoftAP 为示例( SoftAP 代码放在了esp-idf/examples/wifi/getting_started/softAP
目录下)。- 1 工程配置
$ make menuconfig
在
menuconfig-->Serial flasher config
中修改串口号和波特率。- 2 代码编译
$ cd esp-idf/examples/wifi/getting_started/softAP $ make
- 3 固件烧写
代码编译通过后, 将编译生成的
.bin
文件烧写到开发板上。 首先将 GPIO0 拉低, 然后按下复位键让芯片进入下载模式. 同时我们可以通过monitor
来打开串口监视。执行指令:$ make flash monitor
注:波特率太高, 可能会下载失败, 太低则烧写过程缓慢. 一般可以配置成
921600
。
3. 测试结果及优化
1. 测试项一:未进行任何优化
在这一小节,我们直接按上述过程进行了编译下载,然后通过示波器观察测试结果。
测试说明 : 用示波器抓取系统从上电到进入 app_main
函数里进行 AP 连接这段时间内, ESP32 的供电电流变化波形图。 测试前已经确定与接收设备能够正常通信。
电流波形图如下:
- stage1
- stage2
- stage3
根据供电电流的波动,可以将整个过程分为以下几个阶段
-
stage1 : 系统上电后的 stage1 阶段运行 romcode,这个过程持续时间约为 40 ms。
-
stage2 :2th bootloader 阶段, 从用示波器抓取的 Flash 时钟引脚上的信号发现, esp32 会在该阶段读取 flash 上的数据并运行 bootloader 第二阶段的代码, 最后跳转到用户程序,这个过程持续时间约为 426 ms。
-
stage3 : 此阶段会运行用户代码, 该过程电流波动较大, 该阶段完成 AP 连接。这个过程所花费总时间为 160 ms。
整个过程持续时间约为 626 ms。
未做优化的测试数据 :
stage | duration |
---|---|
stage1 | 40 ms |
stage2 | 426 ms |
stage3 | 160 ms |
2. 测试项二:关闭 RF 校验
在这一小节,我们将 esp-idf/components/esptool_py/esptool/esptool.py
中的 class ESP32FirmwareImage(BaseFirmwareImage):
中的 self.append_digest = True
改成 self.append_digest = False
按上述过程进行了编译下载,然后通过示波器观察测试结果。
整个测试过程抓取的波形如图所示
- stage1
- stage2
- stage3
关闭 RF 校正后, 对 step1 和 step3 基本没有影响, 但 step2 阶段时间减少了约 88 ms。
stage | duration |
---|---|
stage1 | 40 ms |
stage2 | 338ms |
stage3 | 160ms |
3. 测试项三:关闭 RF 校正与 bootloader 阶段串口打印
此项优化是在关闭 RF 校正的基础上关闭 bootloader 阶段的串口打印.具体关闭串口打印的步骤是:
- 在终端中输入
make menuconfig
进入配置界面 - 进入
Bootloader config
界面 - 将
Bootloader log verbosity
目前设置的info
改成no output
优化后的电流波形图如图所示:
- stage1
- stage2
- stage3
关串口打印使整个过程耗费时间又减少约 100 ms。
关 RF 校正, 关串口打印后的测试数据
stage | duration |
---|---|
stage1 | 30 ms |
stage2 | 240 ms |
stage3 | 168 ms |
4. 总结
经过以上两步优化,花费的时间减少 188 ms。其中关串口打印能够有效降低系统的功耗。