国外乐高大神Philo出于好奇,利用一台逻辑分析仪,研究了乐高Powered up设备和集线器之间的通信协议。先膜拜一下Philo大神3秒钟,然后我们来看看他的研究成果:
(1)数据通信发生在Powered up连接器(ID1/ID2 线)的引脚5和引脚6上。ID1(引脚5)将数据从集线器传输到设备,ID2(引脚6)将数据从设备传输到集线器。 (2)通信使用异步串行协议 (UART)。 (3)当设备通电时,会有一个速率为2400位/秒的初始化序列。 (4)初始化后,串行链路切换到115200 bits/s 的“数据模式”,在此期间设备向集线器发送数据和接收轮询(Polling)和命令。
系统开机阶段,通信速度为每秒 2400 位,数据主要在设备到集线器方向发送。
下图是 Powered Up 集线器和 Control+ XL 电机之间初始化通信的截图。电机返回大约 500 个字节。

其他设备的初始化数据如下所示(SR格式的光栅图像文件,可用XnViewMP等软件打开查看)。
Control+ XL 电机 初始化阶段 | Control+ L 电机 初始化阶段 |
WeDo2 倾角传感器 初始化阶段 | WeDo2 距离传感器 初始化阶段 |
Boost 电机 初始化阶段 | Boost 颜色传感器 初始化阶段 |
下图是对话开始的部分

以ASCII 模式查看设备数据会发现一些文本字符串,应该是设备发送了在数据传输阶段可用的数据描述。

数据传输阶段
在初始化阶段之后,串行链路切换至更高的传输速度,为 115200 位/秒。主机每 100 ms 轮询一次设备(发送单个 0x02 字节),设备以数据帧响应。如果设备值在轮询期间发生变化,那么设备会在没有集线器发送请求的情况下主动发送数据帧。数据帧包含帧起始字节(取决于设备),然后是数据字节和校验和字节(Checksum8,NOT(此前传输字节的XOR))。多字节值首先发送低字节(在下面的示例中,累积角度为 0x1091 = 4241)。
下面是集线器和BOOST电机之间的示例。

WeDo 距离传感器

”距离”实际上是反射光的指示。0 代表没有反射光,9 相当于在传感器前方5毫米处放置一张白纸。
WeDo倾角传感器

X 轴方向是指围绕长边旋转。取值界限为 +/-45°。
WeDo 倾角传感器传输数据下载
Boost 颜色和距离传感器
这里的过程更为复杂一些:它不仅接受来自集线器的命令来控制 LED 颜色,而且在轮询之后,它以 3 字节帧(0x46、0x08、0xB1)回应,紧接着返回数据的True数据帧。当传感器值发生变化时,也会(单独)发送此数据帧。

灯光颜色改变期间Boost颜色传感器的传输数据下载.

颜色代码:
00 | 黑色 / LED 关闭 |
03 | 蓝色 |
05 | 绿色 |
09 | 红色 |
0A | 白色 |
FF | 没有物体 |
请注意,通过将传感器返回的值除以9左右,将反射光的值在 Powered Up 应用程序中缩放到 0至10 的范围内。
的Boost颜色传感器在颜色探测期间的传输数据下载。
Boost电机

当电机以标称电压 (9V) 全速供电时,转速校准为 100%。您可以通过手动转动电机轴达到更高的值(高达 125%)。根据初始化阶段的字符串,最后一个数据字节可能是以%为单位的功率,但该字节始终为0,电机也无法知道施加在其上的功率。所以猜测是不是保留位,以备将来使用?
Boost电机在手动旋转时的传输数据下载。
Control+ 电机 (L 和 XL)

数据帧与 Boost 电机相同,增加了来自于输出轴上的磁性角度传感器的绝对角度位置测量值。
加速阶段的Control+ XL 电机传输数据下载。