[关闭]
@zifeng328573112 2026-05-14T01:22:22.000000Z 字数 19057 阅读 160

ENS体外程控仪蓝牙通信指令集

文档信息


一、帧格式定义

所有指令均采用统一帧格式:

字段 偏移 长度 描述
帧头 0 2 固定值 0xAA55(大端序)
协议版本 2 1 当前版本 0x01
帧序号 3 2 递增序列号(大端序,0x0000-0xFFFF)
命令码 5 2 命令类型标识(大端序)
数据长度 7 2 Payload字节数(大端序,0-236字节)
数据域 9 0-N 命令参数 (小端序)
校验码 9+N 2 CRC-16/CCITT(大端序)

帧长度约束:
- 最小帧长度:11字节(无Payload)
- 最大帧长度:247字节(Payload最大236字节)
- 字节序:全部多字节字段采用大端序
- 数据域:小端序


1.1 加密机制说明

加密模式:

模式0:未加密(0x00)

模式1:AES对称加密(0x01)

模式2:混合加密(0x02)

加密数据域格式(模式2):

字段 长度 描述
加密会话密钥 256 RSA-2048加密的AES-256密钥
GCM认证标签 16 AES-GCM认证标签
加密数据 N AES-256-GCM加密的实际数据
GCM Nonce 12 GCM模式随机数(从帧序号派生)

密钥管理:
- RSA密钥对: IPG出厂时预置,公钥可通过安全通道读取
- 会话密钥: 每次连接握手时协商生成,有效期30分钟
- 密钥派生: 使用HKDF-SHA256从主密钥派生会话密钥
- 密钥更新: 会话密钥每传输10000帧或30分钟后自动更新

安全约束:
- 刺激参数类指令(0x002x)必须使用加密模式1或2
- OTA升级类指令(0x005x)必须使用加密模式2
- 认证类指令(0x00xx)必须使用加密模式2
- 心跳、状态查询等非敏感指令可使用模式0


二、完整指令集

2.1 连接与认证类指令(0x00xx)

0x0001 - 握手请求(Handshake Request)

方向: 程控仪 → IPG
功能: 连接建立后由程控仪发起握手
Payload格式:

字段 偏移 长度 类型 描述
程控仪型号 0 4 uint32 程控仪型号标识
App版本 4 4 uint32 App版本号
随机数 8 8 bytes 随机数Nonce_C

Payload长度: 16字节


0x0002 - 握手响应(Handshake Response)

方向: IPG → 程控仪
功能: IPG收到握手请求后回复
Payload格式:

字段 偏移 长度 类型 描述
IPG型号 0 4 uint32 IPG型号标识
固件版本 4 4 uint32 固件版本号
随机数 8 8 bytes 随机数Nonce_P
会话令牌 16 4 uint32 会话令牌(有效期30分钟)

Payload长度: 20字节


0x0003 - 身份认证(Authentication)

方向: 程控仪 → IPG
功能: 基于Challenge-Response机制的应用层身份认证
Payload格式:

字段 偏移 长度 类型 描述
认证数据 0 16 bytes AES-128加密后的认证数据

Payload长度: 16字节


0x0004 - 认证结果(Auth Result)

方向: IPG → 程控仪
功能: IPG回复认证结果
Payload格式:

字段 偏移 长度 类型 描述
结果码 0 1 uint8 0x00=认证成功,0x01=认证失败

Payload长度: 1字节


0x00FF - 心跳(Heartbeat / Keep-Alive)

方向: 双向
功能: 连接保活心跳包,默认间隔5秒
Payload格式:

字段 偏移 长度 类型 描述
时间戳 0 4 uint32 当前时间戳

Payload长度: 4字节
说明: 超过3次心跳无响应应判定连接异常


2.2 设备信息类指令(0x001x)

0x0010 - 读取设备信息(Read Device Info)

方向: 程控仪 → IPG
功能: 请求IPG上报完整设备信息
Payload格式:

字段 偏移 长度 类型 描述
(无数据域) - - - 此命令无Payload数据

Payload长度: 0字节


0x0011 - 设备信息响应(Device Info Response)

方向: IPG → 程控仪
功能: 响应0x0010命令,返回完整设备信息
Payload格式:

字段 偏移 长度 类型 描述
制造商名称长度 0 1 uint8 制造商名称字符串长度
制造商名称 1 N1 string UTF-8编码,如"上海脑玑医疗科技有限公司"
型号长度 1+N1 1 uint8 型号字符串长度
型号 2+N1 N2 string 如"SCS-IPG-X100"
序列号长度 2+N1+N2 1 uint8 序列号字符串长度
序列号 3+N1+N2 N3 string 唯一序列号,如"2026042200001"
固件版本长度 3+N1+N2+N3 1 uint8 固件版本字符串长度
固件版本 4+N1+N2+N3 N4 string 如"FW_v1.0.0"
硬件版本长度 4+N1+N2+N3+N4 1 uint8 硬件版本字符串长度
硬件版本 5+N1+N2+N3+N4 N5 string 如"HW_v1.0"
软件版本长度 5+N1+N2+N3+N4+N5 1 uint8 软件版本字符串长度
软件版本 6+N1+N2+N3+N4+N5 N6 string 嵌入式软件版本
System ID 6+N1+N2+N3+N4+N5+N6 8 bytes 系统标识符

Payload长度: 可变(典型值60-100字节)


0x0012 - 读取电池状态(Read Battery Status)

方向: 程控仪 → IPG
功能: 请求IPG上报当前电池电量及健康状态
Payload格式:

字段 偏移 长度 类型 描述
(无数据域) - - - 此命令无Payload数据

Payload长度: 0字节


0x0013 - 电池状态响应(Battery Status Response)

方向: IPG → 程控仪
功能: 响应0x0011命令,返回电池状态
Payload格式:

字段 偏移 长度 类型 范围 描述
电池电量 0 1 uint8 0-100 电池剩余电量百分比
电池状态 1 1 uint8 见状态表 电池健康状态
电池电压 2 2 uint16 0-5000 单位0.001 V,实际值=字段值×0.001
预计剩余时间 4 4 uint32 0-876000 单位小时,0xFFFFFFFF=无法估算
充电次数 8 2 uint16 0-65535 累计充电次数(若为可充电电池)
保留 10 2 - 0x00 预留扩展

Payload长度: 12字节

电池状态标志:
- 0x00:正常
- 0x01:低电量警告(<20%)
- 0x02:极低电量(<10%)
- 0x03:电池老化
- 0x04:电池故障
- 0xFF:未知状态


2.3 刺激模式与参数类指令(0x002x)

0x0020 - 设置刺激模式(Set Stimulation Mode)

方向: 程控仪 → IPG
功能: 设置目标刺激模式
Payload格式:

字段 偏移 长度 类型 描述
模式码 0 1 uint8 0x00=关闭,0x01=常规,0x02=Burst,0x03=高频

Payload长度: 1字节


0x0021 - 写入常规刺激参数(Write Normal Stim Params)

方向: 程控仪 → IPG
功能: 下发常规(Tonic)模式刺激参数
Payload格式:

字段 偏移 长度 类型 范围 单位 描述
频率 0 2 uint16 2-1000 0.1 Hz 实际值=字段值×0.1
分频 2 1 uint8 1-20 1 程序组频率的1 ~ 20 分频
脉宽 3 2 uint16 20-1000 10 µs 默认 60µs
幅值 5 2 uint16 0-25500 0.01 mA 默认 0mA
相间间隔 7 2 uint16 0-200 5 µs 默认 60µs
电极配置 9 4 uint32 bitmap - 高16位阳极,低16位阴极
斜坡时间 13 2 uint16 0-10000 1 ms 启停幅值渐变时间
刺激时长 15 4 uint32 0-86400 1 s 0=持续刺激
保留 19 4 - 0x00 - 必须全部填充0x00

Payload长度: 23字节


0x0022 - 写入Burst刺激参数(Write Burst Stim Params)

方向: 程控仪 → IPG
功能: 下发Burst模式刺激参数
Payload格式:

字段 偏移 长度 类型 范围 单位 描述
簇内频率 0 2 uint16 250-1000 10 Hz 默认 500Hz
簇间频率 2 2 uint16 10-100 10 Hz Burst重复频率(没有传 0x00)
簇内脉冲数 4 1 uint8 1-10 1 默认 5
频率 5 2 uint16 10-60 10 默认 10
分频 7 1 uint8 1-20 1 默认 1
脉宽 8 2 uint16 20-1000 10 µs 默认 130µs
相间间隔 10 2 uint16 0-200 5 µs 默认 60µs
幅值 12 2 uint16 0-25500 0.01 mA 恒流幅值
电极配置 14 4 uint32 bitmap - 高16位阳极,低16位阴极
斜坡时间 18 2 uint16 0-10000 1 ms 启停幅值渐变时间
刺激时长 20 4 uint32 0-86400 1 s 0=持续刺激
保留 24 1 - 0x00 - 必须为0x00

Payload长度: 25字节


0x0023 - 写入高频刺激参数(Write HF Stim Params)

方向: 程控仪 → IPG
功能: 下发高频(10 kHz)模式刺激参数
Payload格式:

字段 偏移 长度 类型 范围 单位 描述
频率 0 2 uint16 1500-10000 500 Hz 高频刺激频率 默认 1500Hz
脉宽 2 1 uint8 30 30 µs 窄脉冲宽度
幅值 3 2 uint16 0-25500 0.01 mA 最大25.5 mA
电极配置 5 4 uint32 bitmap - 高16位阳极,低16位阴极
占空比 9 1 uint8 10-100 1 % 100%表示持续输出
周期时长 10 4 uint32 1-86400 1 s 单个占空比周期总时长
刺激时长 14 4 uint32 0-86400 1 s 0=持续刺激
保留 16 3 - 0x00 - 必须全部为0x00

Payload长度: 19字节


2.4 刺激控制类指令(0x003x)

0x0030 - 启动刺激(Start Stimulation)

方向: 程控仪 → IPG
功能: 启动当前已配置模式的刺激输出
Payload格式:

字段 偏移 长度 类型 范围 描述
程序组编号 0 1 uint8 1-8 待启动的程序组编号

Payload长度: 1字节
说明: IPG应先校验指定程序组的参数完整性后再执行


0x0031 - 刺激启动响应(Start Stimulation Response)

方向: IPG → 程控仪
功能: 响应0x0030命令,返回启动结果
Payload格式:

字段 偏移 长度 类型 描述
结果码 0 1 uint8 0x00=成功,其他=错误码
当前模式 1 1 uint8 0x01=常规,0x02=Burst,0x03=高频
预计斜坡时间 2 2 uint16 单位ms,斜坡上升预计时间
附加信息 4 4 bytes 保留,用于扩展信息

Payload长度: 8字节


0x0032 - 停止刺激(Stop Stimulation)

方向: 程控仪 → IPG
功能: 正常停止刺激输出
Payload格式:

字段 偏移 长度 类型 范围 描述
程序组编号 0 1 uint8 1-8 待停止的程序组编号

Payload长度: 1字节
说明: IPG按配置的斜坡时间逐步降低输出后停止


0x0033 - 刺激停止响应(Stop Stimulation Response)

方向: IPG → 程控仪
功能: 响应0x0031命令,返回停止结果
Payload格式:

字段 偏移 长度 类型 描述
结果码 0 1 uint8 0x00=成功,其他=错误码
停止方式 1 1 uint8 0x01=正常斜坡停止,0x02=紧急停止
预计斜坡时间 2 2 uint16 单位ms,斜坡下降预计时间
累计刺激时长 4 4 uint32 单位秒,本次刺激的总时长

Payload长度: 8字节


0x0034 - 紧急停止(Emergency Stop)

方向: 程控仪 → IPG
功能: 紧急立即停止全部刺激输出
Payload格式:

字段 偏移 长度 类型 范围 描述
程序组编号 0 1 uint8 1-8 或 0xFF 待停止的程序组编号,0xFF表示停止所有程序组

Payload长度: 1字节
说明:
- 无斜坡过程,立即停止
- 此命令同时通过GATT特征0xFFF4冗余下发
- IPG须在50 ms内停止输出
- 最高优先级命令
- 程序组编号为0xFF时,停止所有正在运行的程序组


0x0035 - 紧急停止响应(Emergency Stop Response)

方向: IPG → 程控仪
功能: 响应0x0032命令,返回紧急停止结果
Payload格式:

字段 偏移 长度 类型 描述
结果码 0 1 uint8 0x00=成功
停止时间戳 1 4 uint32 停止时的系统时间戳
停止前状态 5 1 uint8 停止前的刺激状态
停止前幅值 6 2 uint16 停止前的刺激幅值,单位0.01 mA

Payload长度: 8字节
说明: 紧急停止响应为可选,IPG可不返回响应以确保最快停止速度

2.5 阻抗测量类指令(0x004x)

0x0040 - 全阻抗测量请求(Full Impedance Measurement)

方向: 程控仪 → IPG
功能: 发起全阻抗测量,对所有已设置电极通道进行逐一阻抗检测
Payload格式:

字段 偏移 长度 类型 范围 描述
参考电极编号 0 1 uint8 1-16 参考电极触点编号
测量幅度 1 2 uint16 20/50/100/200 单位0.01 mA,对应0.2/0.5/1.0/2.0 mA
保留 3 1 - 0x00 预留扩展

Payload长度: 4字节
说明:
- 测量脉宽:固定80 µs
- 测量频率:固定100 Hz
- 正常范围:100-10000 Ω
- <100 Ω提示"电极短路"
- >10000 Ω提示"电极故障"


0x0041 - 全阻抗测量结果(Full Impedance Result)

方向: IPG → 程控仪
功能: 返回各通道阻抗值及状态标志
Payload格式:

字段 偏移 长度 类型 范围 描述
通道数量 0 1 uint8 1-16 本次测量的通道总数
通道1电极编号 1 1 uint8 1-16 第1个通道的触点编号
通道1阻抗值 2 4 uint32 0-99999 单位1 Ω
通道1状态 6 1 uint8 见状态表 通道状态标志
... ... ... ... ... 每个额外通道重复6字节

Payload长度: 1 + N×6 字节(N为通道数)

通道状态标志:
- 0x00:正常(100 Ω ≤ Z ≤ 10000 Ω)
- 0x01:电极短路(Z < 100 Ω)
- 0x02:电极故障/开路(Z > 10000 Ω)
- 0x03:测量超时
- 0xFF:测量失败(未知错误)


0x0042 - 程序组阻抗测量请求(Program Group Impedance)

方向: 程控仪 → IPG
功能: 发起指定程序组的阻抗测量
Payload格式:

字段 偏移 长度 类型 范围 描述
程序组编号 0 1 uint8 1-8 待测量的程序组编号
保留 1 1 - 0x00 预留扩展

Payload长度: 2字节
说明: 测量参数继承程序组中已设定的刺激参数


0x0043 - 程序组阻抗测量结果(Program Group Impedance Result)

方向: IPG → 程控仪
功能: 返回程序组各电极阻抗值及状态标志
Payload格式:

字段 偏移 长度 类型 范围 描述
程序组编号 0 1 uint8 1-8 被测量的程序组编号
测量幅度 1 2 uint16 - 实际使用的测量幅度,单位0.01 mA
测量脉宽 3 2 uint16 - 实际使用的测量脉宽,单位µs
测量频率 5 2 uint16 - 实际使用的测量频率,单位0.1 Hz
通道数量 7 1 uint8 1-16 本次测量的通道总数
通道1电极编号 8 1 uint8 1-16 第1个通道的触点编号
通道1阻抗值 9 4 uint32 0-99999 单位1 Ω
通道1状态 13 1 uint8 见状态表 通道状态标志
... ... ... ... ... 每个额外通道重复6字节

Payload长度: 8 + N×6 字节(N为通道数)

通道状态标志:
- 0x00:正常(100 Ω ≤ Z ≤ 10000 Ω)
- 0x01:电极短路(Z < 100 Ω)
- 0x02:电极故障/开路(Z > 10000 Ω)
- 0x03:测量超时
- 0xFF:测量失败(未知错误)

示例:
程序组3,使用幅度1.0 mA、脉宽200 µs、频率50 Hz,测量3个通道:
- E0: 1250 Ω,正常
- E1: 1180 Ω,正常
- E8: 1320 Ω,正常

  1. Payload(十六进制):
  2. 03 - 程序组编号3
  3. 00 64 - 测量幅度1001.0 mA
  4. 00 C8 - 测量脉宽200 µs
  5. 01 F4 - 测量频率50050.0 Hz
  6. 03 - 通道数量3
  7. 01 00 00 04 E2 00 - E0: 1250 Ω, 正常
  8. 02 00 00 04 9C 00 - E1: 1180 Ω, 正常
  9. 09 00 00 05 28 00 - E8: 1320 Ω, 正常

2.6 OTA升级类指令(0x005x)

0x0050 - 进入OTA模式(Enter OTA Mode)

方向: 程控仪 → IPG
功能: 请求IPG进入OTA升级模式
Payload格式:

字段 偏移 长度 类型 描述
目标固件版本 0 4 uint32 目标固件版本号
固件包总大小 4 4 uint32 固件包总字节数
SHA-256摘要 8 32 bytes 固件包SHA-256校验值

Payload长度: 40字节


0x0051 - OTA数据传输(OTA Data Transfer)

方向: 程控仪 → IPG
功能: 传输OTA固件数据块
Payload格式:

字段 偏移 长度 类型 描述
块序号 0 2 uint16 数据块序号
块数据 2 ≤234 bytes 固件数据

Payload长度: 2 + N 字节(N≤234)


0x0052 - OTA校验确认(OTA Verify)

方向: 程控仪 → IPG
功能: 全部数据块传输完成后,请求IPG执行完整性校验
Payload格式:

字段 偏移 长度 类型 描述
(无数据域) - - - 此命令无Payload数据

Payload长度: 0字节
说明: IPG执行SHA-256比对,通过后切换固件分区


0x0053 - OTA校验确认响应(OTA Verify Response)

方向: IPG → 程控仪
功能: 响应0x0052命令,返回校验结果
Payload格式:

字段 偏移 长度 类型 描述
结果码 0 1 uint8 0x00=校验成功,其他=错误码
接收块总数 1 2 uint16 IPG实际接收的数据块总数
计算SHA-256 3 32 bytes IPG计算的固件包SHA-256值
固件大小 35 4 uint32 IPG接收的固件总字节数
预计重启时间 39 2 uint16 单位秒,预计重启所需时间

Payload长度: 41字节

说明:
- 若结果码为0x00,IPG将在返回响应后执行固件切换和重启
- 若结果码为0x0501(校验失败),计算SHA-256字段包含IPG实际计算的值,供程控仪对比分析
- 重启后BLE连接将断开,程控仪需等待IPG重新广播并重新连接


0x0054 - OTA进度通知(OTA Progress Notification)

方向: IPG → 程控仪
功能: OTA传输过程中,IPG主动上报传输进度
Payload格式:

字段 偏移 长度 类型 描述
已接收块数 0 2 uint16 已成功接收的数据块数量
总块数 2 2 uint16 固件包总数据块数量
进度百分比 4 1 uint8 0-100,传输进度百分比
最后接收块序号 5 2 uint16 最后成功接收的块序号
传输速率 7 2 uint16 单位字节/秒

Payload长度: 9字节
说明: IPG每接收16个块或每5秒主动发送一次进度通知


2.7 参数读取类指令(0x006x)

0x0060 - 读取当前参数(Read Current Params)

方向: 程控仪 → IPG
功能: 读回IPG当前生效的刺激参数
Payload格式:

字段 偏移 长度 类型 描述
(无数据域) - - - 此命令无Payload数据

Payload长度: 0字节
说明: 用于程控仪侧参数比对验证


0x0061 - 读取当前参数响应(Read Current Params Response)

方向: IPG → 程控仪
功能: 响应0x0060命令,返回当前生效的刺激参数
Payload格式:

字段 偏移 长度 类型 描述
当前模式 0 1 uint8 0x00=关闭,0x01=常规,0x02=Burst,0x03=高频
参数有效标志 1 1 uint8 0x00=无有效参数,0x01=有有效参数
参数数据 2 20 bytes 当前模式的完整参数(格式同0x0021/0x0022/0x0023)
参数设置时间戳 22 4 uint32 参数最后设置的时间戳
参数校验和 26 2 uint16 参数数据的CRC-16校验值

Payload长度: 28字节

说明:
- 若当前模式为0x00(关闭)或参数有效标志为0x00,参数数据字段全部填充0x00
- 参数校验和仅针对参数数据字段(偏移2-21)计算
- 程控仪应将读回的参数与下发的参数逐字节比对,确保一致性

示例:
当前模式为常规模式,参数为:频率50.0 Hz,脉宽200 µs,幅值5.00 mA

  1. Payload(十六进制):
  2. 01 - 当前模式:常规
  3. 01 - 参数有效标志:有效
  4. 01 F4 00 C8 01 F4 - 频率、脉宽、幅值
  5. 01 00 00 03 - 电极配置
  6. 03 E8 - 斜坡时间
  7. 00 00 00 00 - 刺激时长
  8. 00 00 00 00 - 保留
  9. 66 1A 2B 3C - 参数设置时间戳
  10. A5 7F - 参数校验和

0x0062 - 参数变更通知(Param Change Notification)

方向: IPG → 程控仪
功能: IPG检测到刺激参数变更时主动通知程控仪
Payload格式:

字段 偏移 长度 类型 描述
变更原因 0 1 uint8 变更原因码
变更参数 1 N bytes 变更的参数内容

说明: 如安全限幅触发时使用


0x0063 - 读取刺激历史(Read Stimulation History)

方向: 程控仪 → IPG
功能: 读取历史刺激记录摘要
Payload格式:

字段 偏移 长度 类型 范围 描述
起始索引 0 2 uint16 0-65535 请求的起始记录索引
请求条数 2 1 uint8 1-20 请求返回的记录条数
保留 3 1 - 0x00 预留扩展

Payload长度: 4字节


0x0064 - 刺激历史响应(Stimulation History Response)

方向: IPG → 程控仪
功能: 返回历史刺激记录
Payload格式:

字段 偏移 长度 类型 描述
总记录数 0 2 uint16 IPG存储的历史记录总数
返回记录数 2 1 uint8 本次返回的记录条数
记录1-时间戳 3 4 uint32 刺激开始时间戳
记录1-模式 7 1 uint8 刺激模式
记录1-持续时长 8 4 uint32 单位秒
记录1-平均幅值 12 2 uint16 单位0.01 mA
记录1-停止原因 14 1 uint8 0x01=正常停止,0x02=紧急停止,0x03=异常断连
... ... ... ... 每条额外记录重复12字节

Payload长度: 3 + N×12 字节(N为返回记录数)


0x0065 - 启动信号采集(Start Signal Acquisition)

方向: 程控仪 → IPG
功能: 启动生理信号采集
Payload格式:

字段 偏移 长度 类型 范围 描述
采集通道 0 1 uint8 1-8 采集通道编号
采样率 1 2 uint16 100-10000 单位Hz,采样频率
采集时长 3 2 uint16 1-3600 单位秒,0=持续采集
增益 5 1 uint8 1/2/4/8 信号放大增益倍数
滤波模式 6 1 uint8 见模式表 滤波器配置
保留 7 1 - 0x00 预留扩展

Payload长度: 8字节

滤波模式:
- 0x00:无滤波
- 0x01:50Hz陷波(工频滤波)
- 0x02:60Hz陷波
- 0x03:带通滤波(0.5-100Hz)
- 0x04:高通滤波(>0.5Hz)


0x0066 - 信号采集数据(Signal Acquisition Data)

方向: IPG → 程控仪
功能: 返回采集的生理信号数据
Payload格式:

字段 偏移 长度 类型 描述
采集通道 0 1 uint8 采集通道编号
时间戳 1 4 uint32 数据包时间戳
采样率 5 2 uint16 实际采样率,单位Hz
数据点数 7 1 uint8 本包包含的数据点数量(1-50)
数据1 8 2 int16 第1个采样点,单位µV
数据2 10 2 int16 第2个采样点,单位µV
... ... ... ... 每个额外数据点2字节

Payload长度: 8 + N×2 字节(N为数据点数,最大108字节)

说明:
- IPG按配置的采样率持续采集并分包上报
- 每包最多包含50个数据点
- 数据为有符号16位整数,范围-32768至+32767 µV
- 程控仪需根据时间戳重建完整信号序列


0x0067 - 停止信号采集(Stop Signal Acquisition)

方向: 程控仪 → IPG
功能: 停止正在进行的信号采集
Payload格式:

字段 偏移 长度 类型 范围 描述
采集通道 0 1 uint8 1-8 或 0xFF 待停止的采集通道编号,0xFF表示停止所有通道

Payload长度: 1字节

说明:
- 采集通道为0xFF时,停止所有正在运行的采集通道
- IPG收到命令后立即停止数据采集和上报


2.8 定时治疗类指令(0x007x)

0x0070 - 写入定时治疗方案(Write Timed Therapy)

方向: 程控仪 → IPG
功能: 下发完整的定时治疗方案配置(1-16个方案)
Payload格式:

字段 偏移 长度 类型 范围 描述
方案总数 0 1 uint8 1-16 本次下发的治疗方案数量
方案1-程序组编号 1 1 uint8 1-16 绑定的刺激程序组编号
方案1-开启时刻 2 1 uint8 0-47 ON时刻,单位0.5小时
方案1-停止时刻 3 1 uint8 1-48 OFF时刻,单位0.5小时
方案1-保留 4 1 - 0x00 预留扩展
... ... ... ... ... 每个额外方案重复4字节

Payload长度: 1 + N×4 字节(N为方案数,最大33字节)
说明:
- 时刻编码:0=0:00,1=0:30,47=23:30,48=24:00
- 开启时刻须在停止时刻之前
- 各方案时间段不得重叠


0x0071 - 读取定时治疗方案(Read Timed Therapy)

方向: 程控仪 → IPG
功能: 读取IPG当前存储的定时治疗方案
Payload格式:

字段 偏移 长度 类型 描述
(无数据域) - - - 此命令无Payload数据

Payload长度: 0字节


0x0072 - 定时治疗方案响应(Timed Therapy Response)

方向: IPG → 程控仪
功能: 返回当前定时治疗方案配置
Payload格式: 与0x0070相同


0x0073 - 使能/禁用定时治疗(Enable/Disable Timed Therapy)

方向: 程控仪 → IPG
功能: 使能或禁用定时治疗功能
Payload格式:

字段 偏移 长度 类型 范围 描述
使能标志 0 1 uint8 0x00/0x01 0x00=禁用,0x01=使能
保留 1 1 - 0x00 预留扩展

Payload长度: 2字节
说明: 定时治疗与持续性治疗互斥,定时治疗优先级更高


0x0074 - 定时治疗状态通知(Timed Therapy Status)

方向: IPG → 程控仪
功能: IPG主动通知当前定时治疗执行状态
Payload格式:

字段 偏移 长度 类型 范围 描述
当前执行方案编号 0 1 uint8 0-8 0表示无方案执行中
执行状态 1 1 uint8 见状态表 当前方案执行状态
当前程序组编号 2 1 uint8 1-8 当前执行的程序组编号
剩余时间 3 2 uint16 0-1440 单位分钟
定时治疗总使能状态 5 1 uint8 0x00/0x01 功能整体使能状态

Payload长度: 6字节

执行状态标志:
- 0x00:空闲/等待下一个方案
- 0x01:方案执行中(刺激输出中)
- 0x02:方案斜坡上升中
- 0x03:方案斜坡下降中
- 0x04:方案已完成,切换中
- 0x05:定时治疗已禁用
- 0x10:错误-绑定的程序组无效
- 0x11:错误-方案时间冲突


三、GATT服务与特征定义

3.1 刺激控制服务(Stimulation Control Service)

Service UUID: 0xFFF0(128位:0000FFF0-0000-1000-8000-00805F9B34FB)

特征名称 UUID 属性 长度 描述
刺激模式选择 0xFFF1 Write 1 设置刺激模式:0x01=常规,0x02=Burst,0x03=高频,0x00=关闭
刺激参数写入 0xFFF2 Write ≤20 写入当前模式的刺激参数
刺激状态通知 0xFFF3 Notify 4 IPG主动上报刺激状态变化
即时停止 0xFFF4 Write Without Response 1 紧急停止刺激输出(写入0x01)

刺激状态通知格式(0xFFF3):
- Byte 0:状态码(0x00=空闲,0x01=刺激中,0x02=斜坡上升,0x03=斜坡下降,0xFF=故障)
- Byte 1-3:附加信息


3.2 设备信息服务(Device Information Service)

Service UUID: 0x180A(Bluetooth SIG标准服务)

特征名称 UUID 属性 长度 描述
Manufacturer Name String 0x2A29 Read ≤20 制造商名称(UTF-8)
Model Number String 0x2A24 Read ≤20 IPG型号
Serial Number String 0x2A25 Read ≤20 IPG唯一序列号
Firmware Revision String 0x2A26 Read ≤20 固件版本号
Hardware Revision String 0x2A27 Read ≤20 硬件版本号
Software Revision String 0x2A28 Read ≤20 嵌入式软件版本号
System ID 0x2A23 Read 8 系统标识符
IEEE 11073-20601 Regulatory Cert Data List 0x2A2A Read ≤32 IEEE监管认证数据

3.3 电池服务(Battery Service)

Service UUID: 0x180F(Bluetooth SIG标准服务)

特征名称 UUID 属性 长度 描述
Battery Level 0x2A19 Read / Notify 1 电池剩余电量百分比(0-100%)

说明:
- 电量<20%时主动Notification告警
- 电量<10%时上报紧急低电量状态


3.4 OTA升级服务(OTA Update Service)

Service UUID: 0xFFE0(128位:0000FFE0-0000-1000-8000-00805F9B34FB)

特征名称 UUID 属性 长度 描述
OTA Control Point 0xFFE1 Write / Indicate ≤20 OTA控制点
OTA Data 0xFFE2 Write Without Response ≤244 OTA固件数据传输通道
OTA Version 0xFFE3 Read ≤20 读取当前固件版本号及OTA协议版本号

3.5 日志服务(Log / Telemetry Service)

Service UUID: 0xFFD0(128位:0000FFD0-0000-1000-8000-00805F9B34FB)

特征名称 UUID 属性 长度 描述
阻抗数据 0xFFD1 Read / Notify ≤64 各电极通道的阻抗测量值
刺激日志 0xFFD2 Read ≤200 历史刺激记录(TLV格式)
事件日志 0xFFD3 Notify ≤20 实时事件通知

事件日志格式(0xFFD3):
- 事件码:2字节
- 时间戳:4字节
- 附加数据:可变长度


四、错误码定义

4.1 通信错误(0x01xx)

错误码 错误名称 严重等级 描述
0x0101 CRC校验失败 接收帧的CRC-16/CCITT校验不通过
0x0102 帧序号不连续 接收到的帧序号与预期不一致
0x0103 帧长度异常 帧实际长度与Data Length字段不一致
0x0104 协议版本不匹配 帧头中的协议版本号与IPG不兼容
0x0105 命令码未定义 接收到的命令码不在已定义的命令码表中
0x0106 MTU超限/命令过频 报文长度超出MTU或命令间隔<50 ms
0x0107 响应超时 程控仪在3000 ms内未收到IPG响应

4.2 认证错误(0x02xx)

错误码 错误名称 严重等级 描述
0x0201 认证失败 Challenge-Response认证不通过
0x0202 会话已过期 会话令牌已超时失效(默认30分钟)
0x0203 设备未配对 IPG未与当前程控仪建立有效的LESC配对关系

4.3 参数错误(0x03xx)

错误码 错误名称 严重等级 描述
0x0301 频率超出范围 刺激频率字段值超出当前模式允许的范围
0x0302 脉宽超出范围 脉冲宽度字段值超出当前模式允许的范围
0x0303 幅值超出范围 刺激幅值超出范围或单步增量超过0.50 mA
0x0304 电极配置无效 电极bitmap无阳极或无阴极,或阳极阴极位重叠
0x0305 电荷密度超限 极高 每相电荷密度超过30 µC/cm²安全阈值
0x0306 参数组合不兼容 多个参数之间存在逻辑冲突
0x0307 斜坡时间无效 斜坡时间超出范围或超过刺激时长的一半
0x0308 保留字段非零 保留字段中存在非零字节

4.4 设备错误(0x04xx)

错误码 错误名称 严重等级 描述
0x0401 IPG电池电量不足 电池电量低于10%,无法保障安全刺激输出
0x0402 电极阻抗异常 阻抗测量值超出200-5000 Ω有效范围
0x0403 IPG温度过高 极高 IPG内部温度超过安全阈值(41°C)
0x0404 刺激输出过流 极高 刺激输出电流超过硬件安全限值
0x0405 存储空间不足 IPG内部Flash存储空间不足

4.5 OTA错误(0x05xx)

错误码 错误名称 严重等级 描述
0x0501 固件包校验失败 OTA传输完成后SHA-256校验不通过
0x0502 固件版本不兼容 目标固件版本与当前硬件版本不兼容
0x0503 OTA传输中断 OTA数据传输过程中连接中断或超时

五、安全约束与校验规则

5.1 安全关键约束

编号 约束规则 计算公式/限值 违反错误码
C-01 每相电荷密度限制 Q/A = (Amplitude × Pulse Width) / 电极面积 ≤ 30 µC/cm² 0x0305
C-02 每相电荷限制 Q = Amplitude(mA) × Pulse Width(µs) × 10⁻³ ≤ 最大允许电荷 0x0305
C-03 幅值单步增量限制 相邻两次幅值写入的差值 ≤ 0.50 mA 0x0303
C-04 电极阻抗有效范围 200-5000 Ω 0x0402
C-05 命令最小间隔 相邻两条参数写入命令间隔 ≥ 50 ms 0x0106
C-06 电极配置有效性 至少1位阳极和1位阴极置位;阳极与阴极不得重叠 0x0304
C-07 保留字段校验 所有保留字段必须为 0x00 0x0308
C-08 高频模式幅值上限 高频模式下幅值 ≤ 100.00 mA 0x0303
C-09 斜坡时间约束 斜坡时间 ≤ 刺激时长 × 0.5 0x0307
C-10 参数组合兼容性 Burst模式:簇内频率 > 簇间频率 × 簇内脉冲数 0x0306

5.2 参数范围汇总

参数 常规模式 Burst模式 高频模式 步进
频率 0.2-120.0 Hz 簇内:20.0-100.0 Hz
簇间:1.0-10.0 Hz
1000-10000 Hz 常规/Burst:0.1 Hz
高频:1 Hz
脉宽 20-500 µs 20-500 µs 10-100 µs 1 µs
幅值 0-255.00 mA 0-255.00 mA 0-100.00 mA 0.01 mA
斜坡时间 0-10000 ms 0-10000 ms 不适用 1 ms
刺激时长 0-86400 s 0-86400 s 0-86400 s 1 s
簇内脉冲数 不适用 2-10 不适用 1
占空比 不适用 不适用 10-100% 1%
周期时长 不适用 不适用 1-3600 s 1 s

六、通用响应指令

0x00F0 - 通用ACK响应(Generic ACK)

方向: IPG → 程控仪
功能: 对任何命令的成功确认响应
Payload格式:

字段 偏移 长度 类型 描述
原命令码 0 2 uint16 被响应的原命令码
结果码 2 1 uint8 0x00=成功
时间戳 3 4 uint32 IPG处理完成的时间戳

Payload长度: 7字节


0x00F1 - 通用NACK响应(Generic NACK)

方向: IPG → 程控仪
功能: 对任何命令的失败/错误响应
Payload格式:

字段 偏移 长度 类型 描述
原命令码 0 2 uint16 被响应的原命令码
错误码 2 2 uint16 具体错误码(见错误码表)
错误参数 4 4 bytes 错误相关的附加信息
时间戳 8 4 uint32 IPG检测到错误的时间戳

Payload长度: 12字节

错误参数说明:
- 对于参数错误(0x03xx),错误参数字段包含:
- Byte 0-1:错误参数的偏移位置
- Byte 2-3:错误参数的实际值
- 对于其他错误,错误参数字段为0x00000000


七、电极编号映射表

IPG支持最多16个电极触点(E0-E15),电极配置字段(uint32)中:
- 高16位:阳极配置
- 低16位:阴极配置

电极编号 物理触点 阴极位(低16位) 阳极位(高16位)
E0 触点1 Bit 0 Bit 16
E1 触点2 Bit 1 Bit 17
E2 触点3 Bit 2 Bit 18
E3 触点4 Bit 3 Bit 19
E4 触点5 Bit 4 Bit 20
E5 触点6 Bit 5 Bit 21
E6 触点7 Bit 6 Bit 22
E7 触点8 Bit 7 Bit 23
E8 触点9 Bit 8 Bit 24
E9 触点10 Bit 9 Bit 25
E10 触点11 Bit 10 Bit 26
E11 触点12 Bit 11 Bit 27
E12 触点13 Bit 12 Bit 28
E13 触点14 Bit 13 Bit 29
E14 触点15 Bit 14 Bit 30
E15 触点16 Bit 15 Bit 31

示例:
- 阴极设为E0+E1,阳极设为E8
- 阳极高16位 = 0x0100(Bit 24)
- 阴极低16位 = 0x0003(Bit 0 + Bit 1)
- uint32值 = 0x01000003


八、报文示例

示例1:读取设备信息请求与响应

请求(0x0010):

  1. AA 55 01 00 05 00 10 00 00 C2 1A

响应(0x0011):

  1. AA 55 01 00 06 00 11 00 3C
  2. 1B - 制造商名称长度27
  3. E4 B8 8A E6 B5 B7 E8 84 91 E7 8E 91 ... - "上海脑玑医疗科技有限公司"UTF-8
  4. 0D - 型号长度13
  5. 53 43 53 2D 49 50 47 2D 58 31 30 30 - "SCS-IPG-X100"
  6. 0D - 序列号长度13
  7. 32 30 32 36 30 34 32 32 30 30 30 30 31 - "2026042200001"
  8. 0A - 固件版本长度10
  9. 46 57 5F 76 31 2E 30 2E 30 - "FW_v1.0.0"
  10. 08 - 硬件版本长度8
  11. 48 57 5F 76 31 2E 30 - "HW_v1.0"
  12. 08 - 软件版本长度8
  13. 53 57 5F 76 31 2E 30 - "SW_v1.0"
  14. 01 02 03 04 05 06 07 08 - System ID
  15. A3 4F - CRC16

示例2:读取当前参数请求与响应

请求(0x0060):

  1. AA 55 01 00 10 00 60 00 00 8F 2D

响应(0x0061):

  1. AA 55 01 00 11 00 61 00 1C
  2. 01 - 当前模式:常规
  3. 01 - 参数有效标志:有效
  4. 01 F4 00 C8 01 F4 01 00 00 03 03 E8 - 参数数据(20字节)
  5. 00 00 00 00 00 00 00 00
  6. 66 1A 2B 3C - 参数设置时间戳
  7. A5 7F - 参数校验和
  8. D2 8E - CRC16

示例3:程序组阻抗测量请求与响应

请求(0x0042):

  1. AA 55 01 00 15 00 42 00 02
  2. 03 - 程序组编号3
  3. 00 - 保留
  4. 7B 9A - CRC16

响应(0x0043):

  1. AA 55 01 00 16 00 43 00 1A
  2. 03 - 程序组编号3
  3. 00 64 - 测量幅度1001.0 mA
  4. 00 C8 - 测量脉宽200 µs
  5. 01 F4 - 测量频率50050.0 Hz
  6. 03 - 通道数量3
  7. 01 00 00 04 E2 00 - E0: 1250 Ω, 正常
  8. 02 00 00 04 9C 00 - E1: 1180 Ω, 正常
  9. 09 00 00 05 28 00 - E8: 1320 Ω, 正常
  10. C5 3F - CRC16

示例4:OTA校验确认请求与响应

请求(0x0052):

  1. AA 55 01 00 20 00 52 00 00 4E 7B

响应(0x0053):

  1. AA 55 01 00 21 00 53 00 29
  2. 00 - 结果码:成功
  3. 01 2C - 接收块总数300
  4. A3 5F 7D 9E ... (32字节) - 计算SHA-256
  5. 00 01 E2 40 - 固件大小123456字节
  6. 00 0A - 预计重启时间10
  7. F8 A2 - CRC16

示例5:常规刺激参数写入示例

场景: 频率50.0 Hz,脉宽200 µs,幅值5.00 mA,电极配置阴极E0+E1阳极E8,斜坡时间1000 ms,持续刺激

  1. 完整报文(十六进制):
  2. AA 55 01 00 0A 00 21 00 14 01 F4 00 C8 01 F4 01 00 00 03 03 E8 00 00 00 00 00 00 00 00 3A 7F
  3. 字段解析:
  4. AA 55 - 帧头
  5. 01 - 协议版本
  6. 00 0A - 帧序号(第10帧)
  7. 00 21 - 命令码(写入常规刺激参数)
  8. 00 14 - 数据长度(20字节)
  9. 01 F4 - 频率(500 50.0 Hz
  10. 00 C8 - 脉宽(200 µs
  11. 01 F4 - 幅值(500 5.00 mA
  12. 01 00 00 03 - 电极配置(阳极E8,阴极E0+E1
  13. 03 E8 - 斜坡时间(1000 ms
  14. 00 00 00 00 - 刺激时长(0 = 持续刺激)
  15. 00 00 00 00 - 保留(全零)
  16. 3A 7F - CRC16校验值

示例6:Burst刺激参数写入示例

场景: 簇内频率500.0 Hz,簇间频率40.0 Hz,5脉冲/Burst,脉宽300 µs,幅值3.50 mA

  1. 完整报文(十六进制):
  2. AA 55 01 00 0B 00 22 00 14 13 88 01 90 05 01 2C 01 5E 01 00 00 03 01 F4 00 00 00 00 00 B2 4D

示例7:高频刺激参数写入示例

场景: 频率10000 Hz,脉宽30 µs,幅值2.00 mA,占空比50%,周期60 s

  1. 完整报文(十六进制):
  2. AA 55 01 00 0C 00 23 00 14 27 10 00 1E 00 C8 01 00 00 03 32 00 3C 00 00 00 00 00 00 00 C5 E1

示例8:紧急停止命令示例

场景: 紧急停止,无Payload

  1. 完整报文(十六进制):
  2. AA 55 01 00 0D 00 32 00 00 8E 27
  3. 字段解析:
  4. AA 55 - 帧头
  5. 01 - 协议版本
  6. 00 0D - 帧序号(第13帧)
  7. 00 32 - 命令码(紧急停止)
  8. 00 00 - 数据长度(0字节)
  9. 8E 27 - CRC16校验值
  10. 总长度:11字节(最小帧)

九、CRC-16/CCITT 计算说明

算法参数:
- 算法名称:CRC-16/CCITT-FALSE
- 生成多项式:0x1021
- 初始值:0xFFFF
- 输入反转:否
- 输出反转:否
- 最终异或值:0x0000
- 校验范围:从帧头到数据域末尾,不含CRC字段本身

伪代码:

  1. FUNCTION crc16_ccitt(data: BYTE[], length: INTEGER) -> UINT16
  2. crc 0xFFFF
  3. FOR i 0 TO length - 1
  4. crc crc XOR (data[i] LEFT_SHIFT 8)
  5. FOR j 0 TO 7
  6. IF (crc AND 0x8000) 0 THEN
  7. crc (crc LEFT_SHIFT 1) XOR 0x1021
  8. ELSE
  9. crc crc LEFT_SHIFT 1
  10. END IF
  11. END FOR
  12. crc crc AND 0xFFFF
  13. END FOR
  14. RETURN crc
  15. END FUNCTION

十、通信交互序列

10.1 连接建立序列

  1. 程控仪启动BLE扫描(Active Scan模式,过滤"SCS-IPG-"前缀,超时30秒)
  2. 发现目标IPG(确认RSSI ≥ -70 dBm)
  3. 发起BLE连接(Connection Interval=15 ms,Supervision Timeout=2000 ms)
  4. MTU协商(请求MTU=247字节,超时5秒)
  5. GATT服务发现(验证全部必须服务,超时10秒)
  6. CCCD使能(使能Notification/Indication)
  7. 握手请求(0x0001,超时3秒)
  8. 握手响应(0x0002)
  9. 身份认证(0x0003,超时3秒)
  10. 认证结果(0x0004)
  11. 连接就绪(启动心跳机制,每5秒)

10.2 刺激参数下发序列

  1. 设置刺激模式(0x0020,等待ACK,超时3秒)
  2. 写入刺激参数(0x0021/0x0022/0x0023)
  3. IPG参数校验(范围、电荷密度、组合兼容性、保留字段)
  4. 返回ACK/NACK(超时3秒)
  5. 读回确认(0x0060)
  6. 比对验证(逐字节比对)

10.3 刺激启停序列

正常启动:
1. 发送启动命令(0x0030)
2. IPG执行前检查(电池、阻抗、温度、参数)
3. 斜坡上升阶段(状态0x02)
4. 稳态刺激阶段(状态0x01)

正常停止:
1. 发送停止命令(0x0031)
2. 斜坡下降阶段(状态0x03)
3. 刺激停止(状态0x00)

紧急停止:
1. 双通道下发(0x0032 + GATT特征0xFFF4)
2. 立即停止(50 ms内)
3. 状态上报(状态0x00 + 事件日志)


10.4 OTA升级序列

  1. 进入OTA模式(0x0050,携带版本、大小、SHA-256)
  2. 数据块传输(0x0051,每N个块返回ACK)
  3. 校验确认(0x0052,IPG执行SHA-256校验)
  4. 固件切换与重启(标记Active Bank,软重启)
  5. 回滚机制(启动失败时自动回滚)

10.5 异常断连处理

  1. 检测断连(Supervision Timeout=2000 ms)
  2. 维持当前刺激(安全延续窗口,默认30秒)
  3. 斜坡下降停止(窗口到期后)
  4. 恢复广播(初始20 ms,60秒后切换为100 ms)
  5. 重连与状态恢复(上报断连期间事件日志)

十一、BLE连接参数

参数 规定值 说明
BLE版本 5.0+ 最低支持BLE 5.0,推荐BLE 5.3
首选PHY LE 2M PHY 支持LE 1M PHY回退
广播间隔 20-100 ms IPG广播间隔,快速发现模式
连接间隔 7.5-30 ms 由Central在连接时请求协商
从机延迟 0 刺激控制场景不允许跳过连接事件
监督超时 2000 ms 连接丢失判定时间
MTU ≥ 247字节 连接建立后由Central发起MTU Exchange协商
安全级别 LE Secure Connections (LESC) AES-128-CCM加密,Numeric Comparison配对
绑定 必须(Required) 首次配对后保存密钥,后续自动加密重连

十二、安全机制

12.1 BLE链路层安全

12.2 应用层安全

12.3 OTA安全


十三、注意事项

  1. 双重校验机制:所有参数校验规则应在程控仪App端和IPG固件端双重执行
  2. 紧急停止优先级:紧急停止命令为最高优先级,IPG应在任何状态下均能响应
  3. 电荷密度约束:为最高优先级安全约束,IPG必须独立校验
  4. 定时治疗互斥:定时治疗与持续性治疗互斥,定时治疗优先级更高
  5. 安全延续窗口:默认30秒,仅允许通过临床医生级别权限设置
  6. 通信距离:有效通信距离≤1.5 m,RSSI<-70 dBm提示信号弱,<-80 dBm断开连接
  7. 单一连接策略:IPG在任意时刻仅允许与一台程控仪建立BLE连接

文档结束

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注