关于ESP8266的SDK……

从Espressif(乐鑫)的GitHub主页clone到的ESP8266的SDK,多数情况下master分支是无法正常工作的……
存在下列问题:
1. lx106-hal库不包含在repo内( -lhal Link 不能)(2018-01-06更新)
2. 驱动库编译不能(各种玄学报错,多数是 undefined symbol )(2018-01-06更新)
3. 生成binary文件的时候会报错( Arch/Fedora 等 python -> python3 发行版专享错误)

解决方案:
1. 从 tommie/lx106-hal clone HAL API 库,按照文档编译生成 libhal.a 后复制到 $SDK_PATH/lib 下。
2. 无解。 driver_lib 源代码与 SDK 的 API 版本不匹配,清真操作失败,请使用lib目录内提供的libdriver.a 。
3. 修改 $SDK_PATH/Makefile 中与 $SDK_PATH/tools/gen_appbin.py 所有相关项的 @python@python2
4. ESP-IDF真香!(
5. Python Interpreter可以在menuconfig里指定。

2017-12-25更新:
a. 编译驱动库失败原因是缺少hal相关的头文件,复制include到toolchain目录即可,或使用esp-open-sdk。但是链接驱动库时依然存在undefined symbol。
b. 现在有了一个更开放(deblob了一些开源组件,包括FreeRTOS,LwIP,mbedTLS等)的SDK,但是某些部分存在问题(无法进入light sleep模式等),值得尝试。地址在这里:SuperHouse/esp-open-rtos

2018-01-06更新:
a. 官方SDK更新,驱动库现在可以正常编译了,但移除了WiFi-Mesh支持。
b. 使用官方帐号fork的 ct-ng 编译toolchain会自带HAL库(GCC 4.8)。

2018-03-27更新:
a. PWM组件依赖内部timer的溢出中断产生对应频率,在Light Sleep以上模式下部分中断会被屏蔽以及CPU进入停止状态不响应中断请求,导致PWM抖动或无法工作。依赖PWM时务必不要设置低功耗模式。PWM工作原理推测如下:
* 设置内部硬件timer为PWM频率 * 固定factor
* 在PWM溢出中断处理中判断占空比,翻转指定IO
此方式不依赖高级timer外设,简单计时器即可实现,处理中断占用CPU时间(80/160MHz的Xtensa来说不是大问题),中断被屏蔽或CPU睡眠不响应中断时无法工作。
b. 外部中断可以配置但GPIO0的外部中断会在每次下载结束复位时被触发,清除GPIO中断Flag寄存器无效,推测为CP2102的DTR/RST信号保持时间过长。

2018-05-08更新:
a. 官方SDK更新,部署形式变为ESP-IDF的Kconfig模式,components代码公开。
b. Python问题依然没解决
c. 特定HUB(小米USB-C)会干扰CP2102,目前没有定位到具体原因。


おまけ

  1. 他提供的lib经常有内部的串口打印(不会特别多),如不想看到他就换个串口,或者交换TX/RX(官方做法)。
  2. RTOS SDK 的API不完整,无法使用Task列出相关函数(应该是保护专有代码用),但可列出Task总数( Station 模式下大概7个左右)。
  3. 26MHz 晶振对应的初始化串口分频为 74880 baud, Linux 下面就别折腾了,常用应用很难让他正确显示。
  4. 新版的 esptool 下载默认启用压缩传输,速度有大概20%的提升。
  5. 既然大家都很愉快,为啥不把下载波特率设置到921600 baud呢(
  6. WiFi 不见了的时候他的内部 Task 会反复尝试重连,设备不会进入 Light Sleep 等低功耗模式。需在用户代码解决。
  7. 不管选了什么晶振频率, esptool 都会正确下载。
  8. 不要被Datasheet骗了,除了 SPI 和 UART 之外的外设都是软件( GPIO Bitbanging )实现的。
  9. 接上条,所以任何没被占的 GPIO 口都可以被配置为 I2C ,都可以用的……
  10. I2C延时用了一种很难受的方式硬编码在代码里,想加速的话就替换吧……
  11. 多数情况下板载 CP2102 的开发板都可以处理下载时的 GPIO 下拉,所以不用手动拉下去。
  12. 接上条,其他的模块都必须正确设置 GPIO0/2/15 。
  13. 他的 gen_misc.sh 本质上是设定 Makefile 参数,稍作修改可实现一键编译下载。
  14. 内置 FreeRTOS 的调度器在 user_init()之前已经启动,如需要 Task 启动即 block 请使用奇技淫巧。
  15. SPI 硬件只支持 Master 模式,想 Slave 的请移步 GPIO Bitbanging SPI。
  16. 可以 OD 输出,重复一遍,可以 OD 输出……
  17. CPU 发热/功耗不大,射频巨大……
  18. esp-open-rtos提供了非常多的example,涵盖驱动到无线的各个部分,参见examples目录。
  19. 接上条,还有很多外设硬件库。
  20. UART0如果需要连接外设的话可以交换TX和RX,避免上电打印干扰,UART1引脚由于涉及启动流程选择所以尽量不要使用。
  21. ……如果想到会在下面补充。