机智云上生成的固件下载进NodeMCU开发板一直不能正确运行,后来发现是编译选项的问题。
编译选项
ESP8266的SDK里的编译脚本ESP8266_RTOS_SDK\examples\project_template\gen_misc.sh
中,提供了如下编译选项。
STEP 1: choose boot version(0=boot_v1.1, 1=boot_v1.2+, 2=none)
STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)
STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz)
STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)
STEP 5: choose spi size and map:
0= 512KB( 256KB+ 256KB)
2=1024KB( 512KB+ 512KB)
3=2048KB( 512KB+ 512KB)
4=4096KB( 512KB+ 512KB)
5=2048KB(1024KB+1024KB)
6=4096KB(1024KB+1024KB)
7=4096KB(2048KB+2048KB) not support ,just for compatible with nodeMCU board
8=8192KB(1024KB+1024KB)
9=16384KB(1024KB+1024KB)
SDK里的Default值分别为1=boot_v1.2+(即boot=new)
,0=eagle.flash.bin+eagle.irom0text.bin
,2=40MHz
,0=QIO
,0=512KB(256KB+256KB)
。
而在机智云上生成的固件里的编译脚本SoC_ESP8266_8M_source\app\gen_misc_1.sh
中,注释了类似以上的编译选项,直接赋值默认值,Default值分别为boot=new
,app=1
,spi_speed=40
,spi_mode=QIO
,spi_size_map=2
。
NodeMCU开发板固件编译时需要修改spi_mode=DIO
,spi_size_map=4
。
编译方法
重新编译固件可以使用以下三种方法。
VirtualBox
根据Espressif官网的文档ESP8266 SDK 入门指南(2a-esp8266-sdk_getting_started_guide_cn.pdf)
的3.3. ESP8266 ⼯具集
,下载VirtualBox和虚拟机镜像,设置共享文件夹,在Lubuntu中运行编译脚本gen_misc.sh
,选择正确的编译选项。
- 编译前需要在控制台设置路径变量,指向 SDK 和 BIN 文件。
# 例如
export SDK_PATH=~/Share/ESP8266_RTOS_SDK
export BIN_PATH=~/Share/ESP8266_RTOS_SDK/bin
- 如果脚本运行出错,很大可能是没有将脚本从DOS格式转为UNIX格式,在VIM中键入
:set ff=unix
,保存后重新运行脚本。
Cygwin
可以在Windows下安装Cygwin,然后在Cygwin中运行编译脚本,同Lubuntu中相同。
- Cygwin中也需要设置 SDK 和 BIN 的路径变量。
# 例如
export SDK_PATH=/cygdrive/e/ESP8266_RTOS_SDK/
export BIN_PATH=/cygdrive/e/ESP8266_RTOS_SDK/bin/
Eclipse
使用安信可一体化开发环境最方便,教程在如何安装安信可一体化开发环境。
- Import 项目文件夹。
- 修改 Build 路径和选项。
这里的值为COMPLIE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=4
。 - 编译项目。