ESP8266_NONOS_SDK开发环境搭建及验证

ESP8266_NONOS_SDK开发环境搭建及验证

    • 视频教程:
    • 芯片资料
      • 芯片:ESP8266EX
      • 模组:ESP-12F
      • 开发板:NodeMCU
    • 启动模式
    • 安装AiThinkerIDE
      • 编译报错问题No rule to make target 'all'.
      • 手把手教你搭建安信可开发环境,编译源码、烧录固件到ESP8266
    • 烧录
      • 查看user_main.c代码及SPI_FLASH_SIZE_MAP问题
      • 烧录小结:
      • 修改代码测试
  • NodeMCU固件烧录及测试
      • 定制固件
      • 烧录
      • 调试lua

视频教程:

技小新-视频教程,在哔哩哔哩可以免费观看了
已学习《物联网教程_13_UART.mp4》
物联网开发板-ESP8266
相关网站:技新网 立创开源硬件 立创商城 立创EDA(lceda.cn)

小马哥ESP8266基于乐鑫官方SDK裸机开发开发入门教程(DragonFly四轴飞行器课程配套) 介绍了具体方法。

芯片资料


芯片:ESP8266EX

是Tensilica L106 32位 RISC 处理器 厂家乐鑫 官网:https://www.espressif.com
ESP8266EX技术规格书 0a-esp8266ex_datasheet_cn.pdf
ESP8266 NONOS SDK 最新版V3.0.2(已停止更新),另外有RTOS SDK
Flash 下载工具(ESP8266 & ESP32 & ESP32-S2)

模组:ESP-12F

​ 加了4MB的SPI Flash、晶振、天线、LED灯并引出引脚,厂家安信可 官网: https://www.ai-thinker.com
​ 各模组比较,文档、固件、SDK、对接云平台教程、等资源 https://docs.ai-thinker.com/esp8266
​ 工具汇总 https://docs.ai-thinker.com/tools 包含windows版本的“SDK一体化开发环境”,但是没有找到使用指南。

开发板:NodeMCU

PDD上买的大板,无厂家标记,增加了CH340/ASM1117,左右各有15各引脚,可以直接USB刷固件,有reset和flash按钮。
​ 根据老板提供的《ESP8266 CH340原理图.jpg》:
​ esp8266,内部封装了,可以不用关注。
​ Power部分:ASM1117实现了5V的USB口到3.3V的转换。
​ USB to UART部分:miniUSB通过CH340实现了自动编程电路。
​ IO-PIN部分:开发最重要的外部接线说明,左右各15各引脚。

ESP8266 快速入门指南 – 了解
https://www.espressif.com/sites/default/files/documentation/esp8266_quick_start_guide_cn.pdf
开发环境:基于虚拟机 VirtualBox 的 Lubuntu 镜像
包含:附录—学习资源

启动模式

程序运行模式3–按reboot
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
程序下载模式1–按住flash按钮,然后按下reboot并松开,再松开flash。
ets Jan 8 2013,rst cause:2, boot mode:(1,7)

重新刷入安信可的出厂默认AT固件
特性:一条指令即可连接到安信可云服务,操作简单,任何mcu均可直接接入
下载地址: ai-thinker_esp8266_at_firmware_dout_v1.5.4.1-a_20171130.rar
有多个bin文件,但是没有说明写入哪个地址,无法刷入

安装AiThinkerIDE

安装后点击开始菜单的AiThinkerIDE_V1.0图标,出现1个welcome 和1个Goodbye窗口,无运行界面。

老的0.5版本 AiThinkerIDE_V0.5_Setup.exe 提取码:xfzs

最新版本1.5 安信可windows一体化环境IDE V1.5 版本降临,体积更小,兼容新旧版本SDK编译

Esp8266—SDK—固件烧录—个人反思

编译报错问题No rule to make target ‘all’.

ide安装了2遍都无法编译,直接运行的eclipse.exe,导入工程,编译报错:
console窗口
make: *** No rule to make target ‘all’. Stop.
Problem窗口

Description	Resource	Path	Location	Type
make: *** No rule to make target 'all'.  Stop.	ESP8266_NONOS_SDK		 	C/C++ Problem

安信可邮件回复,建议升级最新的1.5版本。

手把手教你搭建安信可开发环境,编译源码、烧录固件到ESP8266

参考资料:【安信可IDE教程专题 ①】手把手教你搭建安信可开发环境,编译源码、烧录固件到ESP8266。

原创 Ai-Thinker-徐宏 [ 安信可科技 ] 2月18日

第7遍导入项目,“在Properties --> C/C++ Build --> Build directory 选择编译的工程路径,比如根目录下的 IoT_Demo工程。”
在这个步骤直接啥都不修改,编译成功。

D:\Ai-Thinker\AiThinkerIDE_V1.0\msys32\opt\arm-nono-eabi-gcc\bin\xtensa-lx106-elf-ar.exe: creating .output/eagle/debug/lib/libdriver.a
make[2]: Leaving directory '/home/aithinker/ESP8266_NONOS_SDK/IoT_Demo/driver'
xtensa-lx106-elf-gcc  -L../lib -nostdlib -T../ld/eagle.app.v6.ld -Wl,--no-check-sections -Wl,--gc-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lcrypto -lmain -ljson -lupgrade -lssl -lpwm -lsmartconfig user/.output/eagle/debug/lib/libuser.a driver/.output/eagle/debug/lib/libdriver.a -Wl,--end-group -o .output/eagle/debug/image/eagle.app.v6.out 

!!!
No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin.
eagle.flash.bin-------->0x00000
eagle.irom0text.bin---->0x10000
!!!
make[1]: Leaving directory '/home/aithinker/ESP8266_NONOS_SDK/IoT_Demo'

16:24:05 Build Finished (took 21s.286ms)
Build directory 默认的工程路径 ${workspace_loc:/ESP8266_NONOS_SDK}/ 实际上是
D:\Ai-Thinker\AiThinkerIDE_V1.0\msys32\home\aithinker\ESP8266_NONOS_SDK\IoT_Demo
这个目录下要存在Makefile文件。

烧录

生成文件目录

​ D:\Ai-Thinker\AiThinkerIDE_V1.0\msys32\home\aithinker\ESP8266_NONOS_SDK\bin

参考《2a-esp8266-sdk_getting_started_guide_cn.pdf》

根据Flash布局的图和描述,2个分区格式的第一个后最后3个分区地址是一样的。

4.1.2. 下载地址
表 4-2. Non-FOTA 的下载地址(单位:KB)
对于4096KB=32Mbit
eagle.flash.bin 0x00000 各容量相同
eagle.irom0text.bin 0x10000 各容量相同
blank.bin 0x3FB000
esp_init_data_default.bin 0x3FC000
blank.bin 0x3FE000

先按照Non-FOTA烧录,注意一定要勾选文件前面的框,先擦除erase,再烧录start

–这里对比参考书的表格里的数据时搞错了,导致下面的报错

使用putty连接串口,默认的打印波特率 为 74880 ,按板子的reset按键,串口打印

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 28100, room 16
tail 4
chksum 0x51
load 0x3ffe8000, len 3384, room 4
tail 4
chksum 0xab
load 0x3ffe8d40, len 4104, room 4
tail 4
chksum 0x9d
csum 0x9d
mismatch map 6,spi_size_map 4
system_partition_table_regist fail

oled屏还是显示这hello world。

表 4-4. FOTA 的下载地址(单位:KB)

对于4096KB=32Mbit
boot.bin 0x00000 实际为eagle.flash.bin
user1.bin 0x01000 实际为eagle.irom0text.bin
user2.bin 0x81000(512+512) 0x101000(1024+1024) 无需下载
blank.bin 0x3FB000
esp_init_data_default.bin 0x3FC000
blank.bin 0x3FE000
无变化

不勾选blank.bin 0x3FB000,选择Flash Size为32Mbit-C1,擦除、烧录、重启。


 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 28100, room 16
tail 4
chksum 0x51
load 0x3ffe8000, len 3384, room 4
tail 4
chksum 0xab
load 0x3ffe8d40, len 4104, room 4
tail 4
chksum 0x9d
csum 0x9d
rf cal sector: 1019
freq trace enable 0
rf[112] : 00
rf[113] : 00
rf[114] : 01
w_flash

SDK ver: 3.0.1(78a3e33) compiled @ Jul 15 2019 17:20:05
phy ver: 1145_0, pp ver: 10.2

SDK version:3.0.1(78a3e33)
IOT VERSION = v1.0.5t45772(a)
reset reason: 6
LIGHT PARAM: R: -1
LIGHT PARAM: G: -1
LIGHT PARAM: B: -1
LIGHT PARAM: CW: -1
LIGHT PARAM: WW: -1
LIGHT PARAM: P: 1000
malloc:1
prd:1000  r : 22222  g: 22222  b: 22222  cw: 22222  ww: 22222
free:0
PWM version : 00000003
mode : sta(10:52:1c:ef:b8:8a) + softAP(12:52:1c:ef:b8:8a)
add if0
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
finish

除了mode行的sta和softAP和文档不同外,其他都相同。

烧录成功,oled屏还是显示hello world,arduino的代码顽强的运行着,重启后屏不亮。

查看user_main.c代码及SPI_FLASH_SIZE_MAP问题

根据串口打印“system_partition_table_regist fail”可以看到user_pre_init初始化函数调用system_partition_table_regist时执行失败了

查看编译中的error报错,
Description Resource Path Location Type
Symbol ‘SPI_FLASH_SIZE_MAP’ could not be resolved user_main.c /ESP8266_NOSPI_FLASH_SIZE_MAPNOS_SDK/examples/IoT_Demo/user line 94 Semantic Error

结合手册《2c-esp8266_non_os_sdk_api_reference_cn.pdf》的system_partition_table_regist要求:

flash map;必须与编译烧录时选择的 flash map ⼀一致,否则将会启动异
常;建议直接传⼊入宏 SPI_FLASH_SIZE_MAP,它是系统在编译时记录的 flash map 值。

在37行增加SPI_FLASH_SIZE_MAP宏定义,结合我们实际的烧录地址对比,都不能完全匹配,最多能匹配的十和6,就选4吧。

#define SPI_FLASH_SIZE_MAP 4

重新编译前面error错误了,出现新的warnning告警,提示新增的size-map重复了

​ user_main.c:37:0: warning: “SPI_FLASH_SIZE_MAP” redefined

参考之前的指导书可以看到 SPI_SIZE_MAP=6 是在编译规则里面带进来的,所以应该去掉这个宏定义。

​ 选择Properties --> C/C++ Build --> Build command 中添加编译规则,当前硬件是 32Mbit的模块,所以这样填:( make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=6 );

但是去掉宏定义又会出现error,把编译规则去掉了SPI_SIZE_MAP=6,重新烧录2个文件后,串口打印正常,电脑连接wifi后ping 8266地址正常。

此时打开网页http://192.168.4.1/是空白的,这其实说明网页服务也是正常的。

另外有8个warning告警,忽略。

Description	Resource	Path	Location	Type
Description	Resource	Path	Location	Type
implicit declaration of function 'user_esp_platform_init' [-Wimplicit-function-declaration]	user_main.c	/ESP8266_NONOS_SDK/IoT_Demo/user	line 122	C/C++ Problem
Invalid project path: Include path not found (\usr\include).	ESP8266_NONOS_SDK		pathentry	Path Entry Problem
... 6个路径错误

另外把example目录上移了一级目录。

烧录小结:

​ 如果不是OTA时,软件应该写入0和0x10000处; 可以只烧录这2个文件,可以不擦除

​ 而支持OTA时写入boot到0处且软件到0x1000处,注意这里少1个0。

ESP12需要选择6 32Mbit-C1,新的SDK3.0已经去掉了512K+512K的模式,这在乐鑫RTOS的readme资料有说明。

如果其他系统参数(最后3个分区的bin文件)被损坏,可以按照下面一章《NodeMCU固件烧录及测试》进行烧录来恢复。

修改代码测试

在user_main.c文件的子函数user_init(void)中修改

这里不小心输入的中文句号也正常打印了。

    // Add test code here
    os_printf("\nBegin test mychar。。。\n");
    char myName;
    myName='B';
    os_printf("myName is %c\n",myName);
    os_printf("\nhello Here!\n");
编译,烧录(未擦除),复位,串口打印
PWM version : 00000003 

Begin test mychar。。。
myName is B

hello Here!
mode : sta(10:52:1c:ef:b8:8a) + softAP(12:52:1c:ef:b8:8a)
add if0
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100
finish

建议客户使用新版 ESP8266_RTOS_SDK。 https://github.com/espressif/ESP8266_NONOS_SDK


NodeMCU固件烧录及测试

定制固件

到网站https://nodemcu-build.com输入邮箱,全部默认会报错,定制固件时只勾选了MQTT

烧录

收到邮件的内容
Your NodeMCU custom build finished successfully. You may now download the firmware:

  • float: https://nodemcu-build.com/builds/nodemcu-master-8-modules-2020-09-12-09-25-40-float.bin
  • integer: https://nodemcu-build.com/builds/nodemcu-master-8-modules-2020-09-12-09-25-40-integer.bin

This was built against the master branch and includes the following modules: file, gpio, mqtt, net, node, tmr, uart, wifi.
The files are guaranteed to be available for download for 24h.

I invite you to try my standalone desktop tool to flash firmware binaries: https://github.com/marcelstoer/nodemcu-pyflasher

Learn how to flash the firmware: https://nodemcu.readthedocs.io/en/master/en/flash/. If you’re upgrading from a previous version you should carefully study the “Upgrading Firmware” instructions on that page.

Please help keep this service alive: http://nodemcu-build.com/faq.php#support

下载烧录工具:NodeMCU-PyFlasher-4.0-x86.exe
https://github.com/marcelstoer/nodemcu-pyflasher/releases
插入nodemcu到usb口,
刷新选择端口COM5,
固件选择刚才下载的nodemcu-master-8-modules-2020-09-12-09-25-40-float.bin
默认波特率115200,
Flash mode,默认Dual I/O(DIO) (红色i提示选择方法,比如ESP12是DIO)之前用其他工具烧录的时候可能都没有选对。
Erase flash选择yes,wipes all data
Flash NodeMCU按钮开始刷固件
Console窗口打印

Command: esptool.py --port COM5 --baud 115200 --after no_reset write_flash --flash_mode dio 0x00000 D:\迅雷下载\ESP8266\nodemcu-build资料\nodemcu-master-8-modules-2020-09-12-09-25-40-float.bin

esptool.py v2.6
Serial port COM5
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: 10:52:1c:ef:b8:8a
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0240
Compressed 462848 bytes to 302014...
Wrote 462848 bytes (302014 compressed) at 0x00000000 in 26.8 seconds (effective 138.4 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.

Firmware successfully flashed. Unplug/replug or reset device 
to switch back to normal boot mode.

根据提示插拔或者复位设备。
设备管理器中的COM口时有时无,最终win10出现一次蓝屏死机

调试lua

wifi连接到ESP-XXXXXX正常

工具 ESPlorer V0.2.0-rc3

选择115200,Open,然后在右侧窗口依次点击

底部的Chip info,Chip ID,Flash ID;右侧FS info

PORT OPEN 115200

Communication with MCU...
Got answer! AutoDetect firmware...
Communication with MCU established.
NodeMCU firmware detected.
=node.heap()
> =node.info()
Warning, deprecated API! node.info() without parameter. It will be removed in the next version. See documentation for details.
3	0	0	15710346	1458208	4096	2	40000000
> =node.chipid()
15710346
> =node.flashid()
1458208
> 
Total : 3509482 bytes
Used  : 0 bytes
Remain: 3509482 bytes

使用串口工具SSCOM3.3以115200速率连接

AT
>> AT
Lua error: 	stdin:2: '=' expected near 'AT'
> print(node.info'hw'.flash_size)
4096
> 

你可能感兴趣的:(嵌入式,arm,NODEMCU,sdk,ESP8266,NONOS_SDK)