协议测试向量
用于验证不同语言 SDK 的 CRC、PING 与 SAMPLE 解析一致性。
适用:所有语言的编码器、解码器、移动端和桌面端 SDK
十六进制字节按线上顺序排列。
1. CRC 标准向量
input ASCII: 31 32 33 34 35 36 37 38 39
CRC value: 0x29B1
wire bytes: B1 29
算法为 CRC-16/CCITT-FALSE:poly 0x1021、init 0xFFFF、不反射、xorout 0x0000。
2. PING COMMAND
字段:
request_id = 0x12345678
command = 0x0B PING
status = 0
payload = ASCII "hello"
完整 19 字节:
A5 5A 01 80 78 56 34 12 0B 00 05 00 68 65 6C 6C 6F 5B 66
CRC 数值为 0x665B,线上 little-endian 为 5B 66。
3. PING ACK
设备成功回显同一 request ID 和 payload:
A5 5A 01 04 78 56 34 12 0B 00 05 00 68 65 6C 6C 6F 80 CC
CRC 数值为 0xCC80,线上为 80 CC。
4. 单板 SAMPLE
期望字段:
flags = 0x0005 (TIME_VALID | REGISTER_VERIFIED)
sequence = 7
timestamp_us = 123456789
sample_rate_hz = 250
board_count = 1
channel_count = 8
gain_code = 6 (gain 24)
status = C0 00 00
channels = [1, -2, 3, -4, 5, -6, 7, -8]
完整 55 字节:
A5 5A 01 01 05 00 07 00 00 00 15 CD 5B 07 00 00
00 00 FA 00 01 08 06 00 1B 00 C0 00 00 00 00 01
FF FF FE 00 00 03 FF FF FC 00 00 05 FF FF FA 00
00 07 FF FF F8 96 9D
最后 CRC 数值为 0x9D96,线上为 96 9D。
5. 必须通过的分块测试
同一 SAMPLE 分别按以下方式喂给增量解码器,结果必须完全相同:
- 一次输入 55 字节。
- 每次输入 1 字节。
5 + 14 + 36字节。- 前置任意 ASCII 日志后再输入。
- 两帧拼接后一次输入。
- 第一帧 CRC 损坏,紧接一帧有效数据。
损坏帧不能输出为有效样本;后一帧必须能够重新同步。
6. 跨语言一致性
每个 SDK 的 CI 至少断言:
- 上述 PING 编码字节完全一致。
- CRC 测试向量一致。
- SAMPLE 解码得到精确的有符号整数,尤其是负数。
- little-endian 头字段和 big-endian ADS1299 channel 不混淆。
- sequence 回绕按无符号 32 位处理。