开放协议
SuperKVM USB KVM 开放协议:兼容 CH9329 的键鼠 HID,以及 OTA、U 盘切换等扩展指令说明。
SuperKVM USB KVM 开放协议 开篇结论:SuperKVM USB KVM 对键鼠控制兼容 CH9329 ,便于复用现有开源客户端;同时提供自有扩展指令覆盖 OTA、U 盘切换、设备信息与开关设置。Host 端为 USB 虚拟 CDC 串口,建议使用较高波特率(如 2M)。 我们的 USB KVM 开放协议分为两部分 一部分是针对键鼠的通用协议, 这部分协议为了方便第三方开发者二次开发和使用, 我们遵循了 CH9329 的协议, 这样基于其他开源 CH9329 的软件代码, 很方便改造就能用于控制我们的 KVM 产品 第二部分是我们的 KVM 的扩展协议, 主要体现为键鼠以外的其他功能相关, 例如 OTA, U 盘切换, 设备信息获取, 各种开关设置等 串口波特率 因为 SuperKVM 的 USB KVM Host 端是 USB 虚拟的 CDC 串口, 所以支持 9600–6M 的任意波特率, 我们建议使用 2M 波特率或者尽量大的波特率 CH9329 协议 字段定义 偏移 字段 长度 说明 0 HEAD1 1 固定 0x57 1 HEAD2 1 固定 0xAB 2 ADDR 1 设备地址, 工程中默认 0x00 3 CMD 1 命令字, 见详细协议文档 4 LEN 1 后续 DATA 字节数 5 DATA LEN 协议内容, 见详细协议文档 5+LEN SUM 1 校验: 从 HEAD1 到 DATA 最后一个字节 逐字节相加 , 结果 & 0xFF 目前我们只实现了 3 种必要的协议: 键盘通用(CMD= 0x02 ) 绝对鼠标(CMD= 0x04 ) 相对鼠标(CMD= 0x05 ) 目前我们的 MCU 支持以上 3 种控制指令, 但是没有实现指令的 response(出于串口通讯效率考虑), 如果你有这方面的问题和需求, 请和我们的技术支持联系 协议细节请参见 CH9329 协议 SuperKVM 扩展指令 为了保持整体一致性, 我们的扩展指令采用了和 CH9329 协议一致的协议头, 但是相关字段做了重新的定义 字段定义 线顺序( HEAD 在字节流中为 57 AB , 即大端写法 0x57AB ; 其后字段多为 小端 ): 偏移 字段 长度 字节序 说明 0 head 2 固定写 0x57 , 0xAB 解析为 uint16 时小端内存布局下值为 0xAB57 , 逻辑仍为扩展帧(见 3.3) 2 channel 1 — 对等 CH9329 协议中的 ADDR 字段 3 sn 4 LE 序号 7 total len 4 LE TLV 长度 : type(2) + len(4) + 内容 , 即 6 + 内容字节数 ( create protocol packet ) 11 type 2 LE 子类型 13 len 4 LE 内容长度(与 total len 满足 total len = 6 + len ) 17 payload len — 业务数据 17+len CRC 4 LE 见 CRC 算法 我们用第 3 个字节 channel ID 来区分是哪种协议, 0 =CH9329, 其它值为扩展协议 CRC 算法 JavaScript 版本(伪代码) C 语言版本 通道 channel ( CH ID )定义 值(hex) 宏 含义 工程中主要行为 00 CH ID CH9329 CH9329 协议 用于兼容 CH9329 协议中的键鼠行为 01 CH ID DEVICE 设备信息与控制 获取版本号, 设置 U 盘切换等 02 CH ID OTA OTA bootloader 和 app 的升级协议 03 CH ID EXT PERIPHERAL 外部模块外设控制 外部扩展设备的硬件控制 04 CH ID SHELL Shell 透传 Shell 数据的透传, 对于支持 Shell 的设备, 通过此指令发送和显示 Shell 指令及结果 05 CH ID LOG 日志 在 Web 端显示 KVM 的运行日志 channel 的子协议定义 待细化, 如有急需, 请联系我们的技术支持
Canonical: https://wiki.superkvm.com/open/protocol · Marketing: https://www.superkvm.com · GitHub: https://github.com/superkvm