开发文档
通过 SPI Bridge,把它当作一块稳定的外部单色信息屏。
显示模型
DS5 对外不是裸 LCD,也不是 i8080 面板透传。外部主机只需要发送统一的逻辑画面,DS5 固件会在内部转换到实际屏幕。
外部主机不要自行按设备倒放方向旋转画面。固件会根据设备设置处理物理屏幕旋转。
引脚定义
提供FPC接口(0.5mm 8pin)和杜邦线接口,引脚定义如下:
| Pin | 信号 | 说明 |
|---|---|---|
| 1 | VCC_5V | 5V 电源输入,如果DS5通过USB Type-C供电,则不需要接此引脚 |
| 2 | GND | 电源地 |
| 3 | SPI_CS | SPI 片选,主机输出 |
| 4 | SPI_SCK | SPI 时钟,主机输出 |
| 5 | SPI_MOSI | SPI 主输出,主机输出 |
| 6 | BUSY_OUT | 忙状态输出,DS5 输出,空闲时为低电平,忙碌时为高电平。主机发送命令后必须等待此信号为低电平才能继续发送下一个命令。 |
| 7 | HOST_DET | 主机检测,主机输出,内部上拉到 3.3V,接高电平表示有主机连接,进入 SPI Bridge 模式;不接或接低电平表示无主机连接。 |
| 8 | GND | 可不接或接 GND |
供电
DS5 可以通过 USB Type-C 供电,也可以通过接口 Pin 1 供电。使用 Pin 1 供电时,屏幕不需要再接 USB Type-C。
- 独立使用时,直接接 USB Type-C。
- 接入外部系统时,可以由外部系统通过 Pin 1 给 DS5 供电。
- DS5 和外部主机需要共地。
- SPI 信号是 3.3V 逻辑;如果外部主机是 5V 逻辑,需要做电平转换。
接线
外部主机可以是任意支持 SPI mode 0 的 MCU 或开发板;下表里的 GPIO 只是测试 sketch 的默认引脚,可以按你的主机硬件修改。
| 测试 sketch 默认引脚 | DS5 信号 | 方向 |
|---|---|---|
| GPIO10 | SPI_CS |
host -> DS5 |
| GPIO11 | SPI_SCK |
host -> DS5 |
| GPIO12 | SPI_MOSI |
host -> DS5 |
| GPIO13 | HOST_DET |
host -> DS5 |
| GPIO14 | BUSY_OUT |
DS5 -> host |
| GND | GND | 共地 |
SPI 是单向数据流,不使用 MISO。建议先使用 1 MHz SPI 时钟。确认稳定后再提高频率。发送新包前必须等待 BUSY_OUT 为低电平。
SPI Protocol v1
一个 SPI transaction 就是一个完整 DS5 packet。协议不支持把一个 packet 拆成多个 CS 窗口。
CS low
32-byte header
optional payload
CS high
SPI 参数
| 模式 | SPI mode 0,CPOL = 0,CPHA = 0 |
|---|---|
| 位序 | MSB first |
| 响应 | 无 MISO 响应,错误通过 DS5 串口诊断查看 |
| 流控 | BUSY_OUT 高电平表示 DS5 忙 |
Header
| Offset | Size | 字段 | 说明 |
|---|---|---|---|
| 0 | 4 | magic | ASCII D5SP |
| 4 | 1 | version | 固定为 1 |
| 5 | 1 | header_size | 固定为 32 |
| 6 | 1 | command | 命令 ID |
| 7 | 1 | format | 画面格式,或 0 |
| 8 | 2 | seq | 主机序号 |
| 10 | 2 | flags | 命令参数 |
| 12 | 2 | width | 通常为 184 |
| 14 | 2 | height | 通常为 126 |
| 16 | 2 | stride | 每行字节数 |
| 18 | 2 | reserved0 | 必须为 0 |
| 20 | 4 | payload_len | payload 字节数 |
| 24 | 4 | payload_crc32 | payload CRC32 |
| 28 | 4 | header_crc32 | header 前 28 字节 CRC32 |
所有多字节整数都是 little-endian。CRC32 使用标准 CRC-32/ISO-HDLC。
命令
| ID | 名称 | Payload | 说明 |
|---|---|---|---|
0x01 |
HELLO |
无 | 进入或保持 SPI Bridge 模式 |
0x10 |
FRAME_FULL |
整帧 framebuffer | 显示一帧完整画面 |
0x11 |
CLEAR |
无 | 按 flags & 0x000F 清屏 |
0x12 |
EXIT_BRIDGE |
无 | 退出 bridge,回到本机应用 |
0x20 |
RESET_STREAM |
无 | 清除协议错误状态 |
0x30 |
SET_BACKLIGHT |
4 bytes | 设置背光颜色和亮度 |
背光
SET_BACKLIGHT 用来设置 DS5 当前背光颜色和亮度,不会修改设备里保存的背光设置。闪烁、呼吸、渐变等效果由外部主机自己控制,按需要连续发送新的背光状态即可。
| Offset | 字段 | 说明 |
|---|---|---|
| 0 | r |
红色通道,0..255 |
| 1 | g |
绿色通道,0..255 |
| 2 | b |
蓝色通道,0..255 |
| 3 | brightness |
背光亮度,0..255 |
关闭背光可以发送 brightness = 0,也可以发送 r = g = b = 0。退出 SPI Bridge 后,设备会恢复自己的背光策略。
画面格式
| ID | 名称 | 支持屏幕 | Stride | Payload |
|---|---|---|---|---|
0x01 |
MONO1 |
全部 | 23 | 2898 bytes |
0x02 |
GRAY2 |
P2 | 46 | 5796 bytes |
0x03 |
GRAY4 |
P2 | 92 | 11592 bytes |
MONO1
0 表示白,1 表示黑。每个字节保存 8 个像素,LSB first。
byte_index = y * 23 + x / 8
bit_index = x & 7
GRAY4
0 表示白,15 表示黑。每个字节保存 2 个像素,低 nibble 在前。
byte_index = y * 92 + x / 2
low nibble = x + 0
high nibble = x + 1
样例代码
仓库里包含一个 Arduino host 示例,默认引脚适合我们测试时使用的开发板;如果你使用其他主机,只需要保留协议和 DS5 侧信号,调整 SPI 初始化和引脚定义即可。
测试流程:
- 打开 DS5 串口,输入
spi bridge status,确认设备支持 SPI Bridge。 - 按上面的接线表连接外部主机和 DS5。
- 如有需要,修改样例代码里的主机引脚定义。
- 把样例 sketch 刷入外部主机,开始发送测试画面。
测试过程中再次查看 spi bridge status,正常情况下可以看到 hello 或 frames 计数增加。
最小发送流程
- 拉高
HOST_DET。 - 发送一个或多个
HELLOpacket。 - 等待
BUSY_OUT为低。 - 发送完整
FRAME_FULLpacket。 - 每次发送下一帧前,继续等待
BUSY_OUT为低。
串口诊断命令
串口主要用于调试和技术支持。正常通过 SPI 使用 DS5 时,只需要关注 spi bridge status。串口波特率为 115200。
| 命令 | 用途 |
|---|---|
help |
查看当前固件支持的串口命令。 |
status |
查看当前应用、屏幕、固件版本和关键能力。 |
self test |
输出交付前自检摘要,适合排查配置问题。 |
backlight <r> <g> <b> [brightness] |
临时设置背光颜色和亮度,取值为 0..255。 |
backlight off |
关闭背光。 |
backlight restore |
恢复设备自己的背光策略。 |
backlight status |
查看当前临时背光状态。 |
spi bridge status |
查看 SPI Bridge 是否可用,以及 hello、frames、backlights 等计数。 |
spi bridge listen [ms] |
临时打开 SPI 监听窗口,适合没有接 HOST_DET 的桌面测试。 |
spi bridge exit |
手动退出 SPI Bridge,回到设备本机应用。 |
screenshot |
截取当前画面,并临时提供下载地址。 |
screenshot status |
查看截图服务状态和当前下载地址。 |
screenshot stop |
关闭截图下载服务。 |
music fps |
查看环境音频谱的帧率和耗时。 |
lan event status |
查看 Code Agent 状态提醒的局域网事件接收状态。 |