From 2de0698fee58e656cffcdf8accab0660bdc93c6b Mon Sep 17 00:00:00 2001 From: "jxh@lovelyqi" Date: Sun, 24 Aug 2025 16:52:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=205.2.=200x9A=20=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E4=B8=8B=E4=BD=8D=E6=9C=BA=E7=81=AF=E5=85=89=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E6=88=96=E9=97=AA=E7=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NTK_NFY_Communication_Protocol.md | 132 ++++++++++++++++++------------ 1 file changed, 79 insertions(+), 53 deletions(-) diff --git a/NTK_NFY_Communication_Protocol.md b/NTK_NFY_Communication_Protocol.md index 05ac179..720b166 100644 --- a/NTK_NFY_Communication_Protocol.md +++ b/NTK_NFY_Communication_Protocol.md @@ -129,21 +129,21 @@ HEX: 5A 01 FF 40 00 64 00 00 00 93 9E FF 3F 93 9E FF 3F 93 9E FF 3F 7F 4B 00 00 #### 5.1. 0x80~0x9f: 向头戴设备发送数据或指令 -| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | -| ------ | ---------------------- | -------------- | -------------- | ---------------------------------------------------- | -| 0x80 | 一个表示正常的编码 | 0 | \\ | 直接被头戴设备丢弃 | -| 0x81 | 接收的信息出错 | 1 | uint8_t | 提示接收出现问题,不一定被处理 | -| 0x8D | 控制MCU软重启 | 0 | \\ | 控制MCU软重启 | -| 0x8E | 调试 | 0 | \\ | 仅用于开发调试 | -| 0x8F | 将MCU恢复出厂设置 | 0 | \\ | 此操作会清除 如心率拟合系数、保存的设备ID等 所有信息 | -| 0x90 | 启动配对流程 | 0 | \\ | 头戴设备接收此指令后清除设备ID等信息,并重新尝试配对 | -| 0x91 | 告知设备ID | 1 | uint8_t | 告知设备ID | -| 0x98 | 控制开启下位机功能 | 1 | uint16_t | 开启 FFT LPF HPF NOTCH 等功能 | -| 0x99 | 控制关闭下位机功能 | 1 | uint16_t | 关闭 FFT LPF HPF NOTCH 等功能 | -| 0x9A | 控制下位机灯光 | 1 | uint8_t | 控制LED灯 可用于寻找设备 | -| 0x9B | 控制播放音频与音量 | 2 | uint8_t | | -| 0x9C | 修改下位机心率拟合系数 | 9 | int32_t | 微调心率计算结果 | -| 0x9D | 告知治疗阶段与疾病类型 | 2 | uint8_t | 告知治疗阶段与疾病类型 | +| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | +| ------ | ------------------------ | -------------- | -------------- | ---------------------------------------------------- | +| 0x80 | 一个表示正常的编码 | 0 | \\ | 直接被头戴设备丢弃 | +| 0x81 | 接收的信息出错 | 1 | uint8_t | 提示接收出现问题,不一定被处理 | +| 0x8D | 控制MCU软重启 | 0 | \\ | 控制MCU软重启 | +| 0x8E | 调试 | 0 | \\ | 仅用于开发调试 | +| 0x8F | 将MCU恢复出厂设置 | 0 | \\ | 此操作会清除 如心率拟合系数、保存的设备ID等 所有信息 | +| 0x90 | 启动配对流程 | 0 | \\ | 头戴设备接收此指令后清除设备ID等信息,并重新尝试配对 | +| 0x91 | 告知设备ID | 1 | uint8_t | 告知设备ID | +| 0x98 | 控制开启下位机功能 | 1 | uint16_t | 开启 FFT LPF HPF NOTCH 等功能 | +| 0x99 | 控制关闭下位机功能 | 1 | uint16_t | 关闭 FFT LPF HPF NOTCH 等功能 | +| 0x9A | 控制下位机灯光常量或闪烁 | 3 | uint8_t | 控制LED灯,可用于寻找设备 | +| 0x9B | 控制播放音频与音量 | 2 | uint8_t | | +| 0x9C | 修改下位机心率拟合系数 | 9 | int32_t | 微调心率计算结果 | +| 0x9D | 告知治疗阶段与疾病类型 | 2 | uint8_t | 告知治疗阶段与疾病类型 | ### 5.2 功能码详解 @@ -276,28 +276,54 @@ HEX: 5A 00 00 99 00 02 00 00 00 data1_L data1_H crc16_L crc16_H A5 | data1 | 要关闭的功能 | uint16_t | 参考5.2. 0x98对应表格 | 对应位置1则代表关闭 | | crc16 | crc16校验值 | uint16_t | | | -#### 5.2. 0x9A 控制下位机灯光 +#### 5.2. 0x9A 控制下位机灯光常量或闪烁 数据帧示例: ``` HEX -HEX: 5A 00 00 9A 00 01 00 00 00 data1 crc16_L crc16_H A5 +HEX: 5A 00 00 9A 00 03 00 00 00 color keeptime gap crc16_L crc16_H A5 ``` -| 参数名称 | 参数描述 | 参数类型 | 参数值 | 参数值对应功能描述 | -| -------- | ------------ | -------- | ------ | ------------------------------ | -| data1 | 要关闭的功能 | uint8_t | 见下表 | 对应位 置1代表开启 置0代表关闭 | -| crc16 | crc16校验值 | uint16_t | | | +控制下位机灯光常量或闪烁 -**data1参数值对应功能描述:** +可以指定本次亮灯的时长 +但是不保证一定亮灯达到指定的时长 +下位机的LED灯会被新的亮灯事件(内部生成或外部控制)覆盖 -| bit Num | 对应功能 | 参数值对应功能描述 | -| --------- | -------- | ------------------ | -| MSB ==> 7 | 暂无 | | -| 3~6 | 暂无 | | -| 2 | RED | 红灯 | -| 1 | GREEN | 绿灯 | -| LSB ==> 0 | BLUE | 蓝灯 | +LED闪烁时,LED灯固定亮0.5s +每次亮起的时间间隔为传入的`gap` + +| 参数名称 | 参数描述 | 参数类型 | 参数值 | 参数值对应功能描述 | +| -------- | ---------------- | -------- | --------- | --------------------------- | +| color | 控制灯光颜色 | uint8_t | 见下表 | 见下表 | +| keeptime | 灯光动作保持时间 | uint8_t | 0x00~0xFF | 这个动作最长持续时间,单位s | +| gap | 每次闪烁间隔 | uint8_t | 0x00 | 常亮模式 | +| gap | 每次闪烁间隔 | uint8_t | 0x01~0xFF | 每次闪烁的间隔时间,单位s | +| crc16 | crc16校验值 | uint16_t | \ | | + +**color参数值对应功能描述:** + +| color 参数值 | 对应color | +| ------------ | -------------------------- | +| 0x07 | RED + GREEN + BLUE = WHITE | +| 0x06 | RED + GREEN = CYAN | +| 0x05 | RED + BLUE = YELLOW | +| 0x04 | RED | +| 0x03 | GREEN + BLUE = MAGENTA | +| 0x02 | GREEN | +| 0x01 | BLUE | +| 0x00 | BLACK | + +##### 5.2. 0x9A 参数配置示例 + +1. * 设置灯光全部熄灭: +`HEX: 5A 00 00 9A 00 03 00 00 00 00 00 00 7C 5D A5` +2. * 设置蓝灯常亮10s +`HEX: 5A 00 00 9A 00 03 00 00 00 01 0A 00 1C 0A A5` +3. * 设置白灯常亮10s +`HEX: 5A 00 00 9A 00 03 00 00 00 07 0A 00 1D EA A5` +4. * 设置蓝灯闪烁20s 闪烁间隔为2s +`HEX: 5A 00 00 9A 00 03 00 00 00 01 14 02 7D 82 A5` #### 5.2. 0x9B 控制播放音频 @@ -385,16 +411,16 @@ HEX: 5A 00 00 9C 00 24 00 00 00 data1_LL data1_LH data1_HL data1_HH (data2_ * 4) } ``` -##### 参数配置示例 +##### 5.2. 0x9C 参数配置示例 1. * 对BPM低于300的值不进行矫正 九个参数分别为 `300 1000000 0 0 0 0 0 0 0` - +`HEX: 5A 00 00 9C 00 24 00 00 00 2C 01 00 00 40 42 0F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 71 A8 A5` 2. * 对所有BPM低于300的值进行校准, 使用公式 **outBPM(校正后BPM) = 0.95 * BPM(矫正前BMP) + 2** 九个参数分别为 `300 950000 2000000 0 0 0 0 0 0` - +`HEX: 5A 00 00 9C 00 24 00 00 00 2C 01 00 00 f07e0e00 80841e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 490e A5` 3. * 对所有BPM低于300的值进行校准, 使用公式 **outBPM(校正后BPM) = 1.099 * BPM(矫正前BMP) - 1.945** 九个参数分别为 `300 1099000 -1945000 0 0 0 0 0 0` @@ -475,25 +501,25 @@ HEX: 5A 00 00 9D 00 02 00 00 00 TreatmentPhase DiseaseTypes crc16_L crc16_H A5 #### 6.1. 0x40~0x5f: 脑电数据的上传 -| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | -| ------ | ---------------------------------------------------- | -------------- | -------------- | ---------------------------------------- | -| 0x40 | 发送脑电信号采集到的原始值 | N | int32_t | | -| 0x41 | 发送 脑电信号采集到的值 换算为电压值的**系数的倒数** | 1 | int32_t | 真实电压 = 原始值 * (1 / 系数的倒数) | -| 0x42 | 分解出的5种脑波的值 | 5 | int32_t | 顺序:Delta,Theta,Alpha,Beta,Gamma。 | +| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | +| ------ | -------------------------------------------------------- | -------------- | -------------- | ---------------------------------------- | +| 0x40 | 发送脑电信号采集到的电压值 的 100倍 | N | int32_t | 接收到的数据缩小100倍后单位为uV | +| 0x41 | ~~发送 脑电信号采集到的值 换算为电压值的**系数的倒数**~~ | 1 | int32_t | ~~真实电压 = 原始值 * (1 / 系数的倒数)~~ | +| 0x42 | 分解出的5种脑波的值 | 5 | int32_t | 顺序:Delta,Theta,Alpha,Beta,Gamma。 | #### 6.1. 0x60~0x7f:心率数据的上传 -| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | -| ------ | ---------------------- | -------------- | -------------- | ---- | -| 0x60 | 计算得出的每分钟心率值 | 1 | int16_t | | -| 0x61 | 心率波形 | N | int32_t | | +| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | +| ------ | ----------------------------------------------------- | -------------- | -------------- | ---- | +| 0x60 | 计算得出的每分钟心率值计算得出的每分钟心率值 的 100倍 | 1 | int16_t | | +| 0x61 | 心率波形 | N | int32_t | | #### 6.1. 0x80~0x9f:肌电数据的上传 -| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | -| ------ | ---------------------------------------------------- | -------------- | -------------- | --------------------------------------------------------------------- | -| 0x80 | 发送肌电信号采集到的原始值 | N | int32_t | | -| 0x81 | 发送 肌电信号采集到的值 换算为电压值的**系数的倒数** | 1 | int32_t | 真实电压 = 原始值 * (1 / 系数的倒数); 此系数与0x41功能码的系数应一致; | +| 功能码 | 功能名称 | 数据段数据个数 | 每个数据的类型 | 备注 | +| ------ | -------------------------------------------------------- | -------------- | -------------- | ------------------------------------------------------------------------- | +| 0x80 | 发送肌电信号采集到的电压值 的 100倍 | N | int32_t | 接收到的数据缩小100倍后单位为uV | +| 0x81 | ~~发送 肌电信号采集到的值 换算为电压值的**系数的倒数**~~ | 1 | int32_t | ~~真实电压 = 原始值 * (1 / 系数的倒数); 此系数与0x41功能码的系数应一致;~~ | ### 6.2 功能码详解 @@ -637,7 +663,7 @@ HEX: 5A 01 ID 42 00 14 00 00 00 AA_LL AA_LH AA_HL AA_HH BB_LL BB_LH BB_HL BB_HH | AA BB CC DD EE | 顺序对应:Delta,Theta,Alpha,Beta,Gamma。 | 5 * int32_t | | | | crc16 | crc16校验值 | uint16_t | | | -#### 6.3. 0x60 发送 计算得出的每分钟心率值 +#### 6.3. 0x60 发送 计算得出的每分钟心率值 的 100倍 数据帧示例: @@ -645,14 +671,14 @@ HEX: 5A 01 ID 42 00 14 00 00 00 AA_LL AA_LH AA_HL AA_HH BB_LL BB_LH BB_HL BB_HH HEX: 5A 01 ID 60 00 02 00 00 00 AA_L AA_H crc16_L crc16_H A5 ``` -表示设备电池电量 -定时主动发送此功能码 +为保留两位小数,上传前下位机将数值放大了一百倍 +上位机接收后需要缩小100倍 -| 参数名称 | 参数描述 | 参数类型 | 参数值 | 参数值对应功能描述 | -| -------- | ---------------------- | -------- | ------ | ------------------ | -| ID | 设备ID | uint8_t | | | -| AA | 计算得出的每分钟心率值 | uint16_t | | | -| crc16 | crc16校验值 | uint16_t | | | +| 参数名称 | 参数描述 | 参数类型 | 参数值 | 参数值对应功能描述 | +| -------- | ------------------------------- | -------- | ------ | ------------------ | +| ID | 设备ID | uint8_t | | | +| AA | 计算得出的每分钟心率值 的 100倍 | uint16_t | | | +| crc16 | crc16校验值 | uint16_t | | | #### 6.3. 0x61 发送 心率波形