BPI-Leaf-S3更新MicroPython 1.20.0固件,支持ESP-NOW,解决连接Windows平台的小问题

近日MicroPython开源组织释出了 1.20.0 版本,并在近期合并了ESP-NOW功能到主线。
GitHub: MicroPython 1.20.0 Release
esp32: ESP-NOW support for ESP32 and ESP8266 by glenn20 · Pull Request #6515 · micropython/micropython (github.com)

另外我还找到了一个连接Windows平台的小问题的解决方案。

在Windows平台使用多个相同固件的ESP32S3开发板时,他们的内置USB-CDC连接不稳定。

在Windows中接入第一台ESP32S3开发板后,再接入第二台或更多台,将要等待3秒左右才能被Windows系统识别为可用串行设备,且使用mpremote devs 命令后,可以看到后续接入的USB设备序列号(Serial String)与第一块都不相同,且拔出所有开发板,单独连接每一块开发板时,它们的设备序列号又都是相同的。

这可以证实此问题仅存在于Windows平台,因为在Linux系统中,连接多个使用相同USB设备序列号的不会出现故障。

由于Windows的设备驱动给每个设备一个设备标识(Device ID)。设计的初衷是用来区分每个设备的。
USB设备的DeviceID命名规则很简单。举例来说,如果一个USB设备的VID是0x1234、PID是0x5678、序列号是00001,则它的DeviceID为:

USB\VID_1234&PID_5678\00001

由于VID是USB厂商的唯一标识、PID是厂商定义的产品的唯一标识、序列号理论上应该是同类产品的唯一标识。因此理论上说这样的DeviceID可以区分所有USB设备。

如果没有序列号,Windows则将Device ID的序列号部分用HUB及其端口相关的一串字符来代替,也可以基本保证DeviceID的唯一性。这种Device ID形如:

USB\VID_1234&PID_5678\X&YYYYYYYY&Z

其中X是设备的层次、Z表示设备插到HUB的哪个端口、YYYYYYYY是与HUB有关的某常数。

在较为久远的早期Windows驱动中如遇到接入相同DeviceID的情况只能崩溃。而现在则会在等待数秒后,判断新接入的设备没有序列号,再如上所述用新的字符代替。

乐鑫科技在可以使用tinyUSB和USB-CDC功能的开发板上,在ESP-IDF中提供了可以修改它的方法。

Espressif IoT Development Framework Configuration

(Top) → Component config → TinyUSB Stack → Use TinyUSB Stack → Descriptor configuration

我发现只要简单的将此处的默认值123456删除,即可让USB-CDC失去序列号,但并不影响其功能使用。而在Windows平台中,将不必等待,会自动如上所述用新的字符代替。

新编译的BPI-Leaf-S3已将MicroPython版本更新,支持ESP-NOW,且取消了USB序列号,保证了在Windows平台使用的稳定性。

固件下载地址:https://github.com/BPI-STEAM/BPI-Leaf-S3-Doc/tree/main/micropython-firmware

BananaPi wiki:https://wiki.banana-pi.org/BPI-Leaf-S3_开发板

BPI-Steam 文档:https://bpi-steam.com/Leaf_S3_doc/zh

BPI-Leaf-S3 官方淘宝

BPI-Leaf-S3 官方速卖通

OEM&OEM 定制服务请邮件联系: [email protected]