欢迎加入交流群:ESP8266 AliOS Things 群 号: 107723112
所有教程请看 AliOS Things 入门教程系列
此教程在SimonLiu的CSDN博客同步更新。
1. 编译选项
在ESP8266的non_os SDK中,编译选项在项目根目录的Makefile中:
BOOT?=new
APP?=1
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=6
但是在AliOS中,这些选项隐藏得很深,它们并不在mk文件中,而是在
platform/mcu/esp8266/gen_crc_bin.mk
文件中,里面有一行:
python ../../../platform/mcu/esp8266/tools/gen_appbin.py $(CLEANED_BUILD_STRING)$(RADIXPOINT)$(BINSTYPE_LOWER)$(LINK_OUTPUT_SUFFIX) 2 1 15 5
其中5
就是flash map
选项,选项在 platform/mcu/esp8266/tools/gen_appbin.py
中有说明:
#-------------------
#flash_size_map=
# 0 : 512 KB (256 KB + 256 KB)
# 1 : 256 KB
# 2 : 1024 KB (512 KB + 512 KB)
# 3 : 2048 KB (512 KB + 512 KB)
# 4 : 4096 KB (512 KB + 512 KB)
# 5 : 2048 KB (1024 KB + 1024 KB)
# 6 : 4096 KB (1024 KB + 1024 KB)
#-------------------
2. 烧写选项
烧写选项在build/site_scons/upload/esp8266.json
中设定,默认是:
{
"cmd": [
{
"Linux32": "esptool.py",
"Linux64": "esptool.py",
"OSX": "esptool.py",
"Win32": "esptool.exe"
},
"--chip",
"esp8266",
"--port",
"/dev/cu.wchusbserial1410",
"--baud",
"921600",
"write_flash",
"--flash_size",
"detect",
"0x0",
"@AOSROOT@/platform/mcu/esp8266/bsp/boot_v1.7_921600.bin",
"0x3fc000",
"@AOSROOT@/platform/mcu/esp8266/bsp/esp_init_data_default.bin",
"0x3fe000",
"@AOSROOT@/platform/mcu/esp8266/bsp/blank.bin",
"0x1000",
"@AOSROOT@/out/@TARGET@/binary/@[email protected]"
]
}
请注意"--flash_size","detect",
是对烧写的flash map
进行自动检测,但是这种自动检测不一定是正确的。我的ESP-12F
在使用默认的编译选项flash map = 5
的时候,自动检测使用了flash map = 4
来烧写。后来手动把detect
改为4MB-c1
才能使用flash map = 6
的方式来进行烧写。
所以改完如下:
{
"cmd": [
{
"Linux32": "esptool.py",
"Linux64": "esptool.py",
"OSX": "esptool.py",
"Win32": "esptool.exe"
},
"--chip",
"esp8266",
"--port",
"/dev/cu.wchusbserial1410",
"--baud",
"921600",
"write_flash",
"--flash_size",
"4MB-c1",
"0x0",
"@AOSROOT@/platform/mcu/esp8266/bsp/boot_v1.7_921600.bin",
"0x3fc000",
"@AOSROOT@/platform/mcu/esp8266/bsp/esp_init_data_default.bin",
"0x3fe000",
"@AOSROOT@/platform/mcu/esp8266/bsp/blank.bin",
"0x1000",
"@AOSROOT@/out/@TARGET@/binary/@[email protected]"
]
}
如果要指定flash mode
为dout
,可以在"write_flash",
一行下面添加类似如下的选项:
"--flash_mode",
"dout",
3. 获取当前flash map
使用system_get_flash_size_map()
即可。
4. flash map的各种选项
关于flash map,在文档2a-esp8266-sdk_getting_started_guide_cn.pdf
中有说明: