目录
此文档基于神念科技的 TGAM1 模块。
技术规格
概述
类型 | 规格 | 备注 |
---|---|---|
产品系列 | ThinkGear-AM | A = ASIC, M = Module |
模块型号 | TGAM1 | |
模块版本 | 2.4 | 适用于 2.3 |
模块尺寸 (Max) | 27.9mm x 15.2mm x 2.5mm | 1.10in x 0.60in x 0.10in (L x W x H) |
模块重量 (Max) | 130mg | 0.0045oz |
工作电压 | 2.97V ~ 3.63V | SP6200 3.0~6.0V MAX1595 1.8~5.5V |
电压噪声 (Max) | 10mV 峰对峰 | |
最大功耗 | 15mA @ 3.3V | |
静电保护 | 4kV 接触放电 8kV 空气放电 | 测试于 EEG, REF, GND |
输出接口标准 | UART(串口) | TX, RX, VCC(+), GND(-) |
输出波特率 | 1200, 9600, 57600 | 使用 Stuff 设置默认值 |
#EEG 通道 | 1 | 3 触点 (EEG, REF, GND) |
引脚
接头 P1 – 电极
引脚 | 功能 | 丝印 |
---|---|---|
1 | EEG 电极 | EEG |
2 | EEG 屏蔽 | |
3 | GND 电极 | |
4 | REF 屏蔽 | |
5 | REF 电极 | REF |
接头 P4 – 电源
引脚 | 功能 | 丝印 |
---|---|---|
1 | VCC | + |
2 | GND | – |
接头 P3 – UART/串口
引脚 | 功能 | 丝印 |
---|---|---|
1 | GND | – |
2 | VCC | + |
3 | RXD | R |
4 | TXD | T |
跳线/默认设置
TGAM1 有两个配置焊盘,可用于更改芯片上电时应用的两个默认设置。
芯片上电时应用的两个默认设置。配置焊盘位于 TGAM1 背面,如红色和蓝色方框所示。
BR0 和 BR1 焊盘用于在 TGAM1 上电后设置输出波特率和数据内容。M 焊盘决定陷波滤波器的频率。
顶部焊盘为 GND,底部焊盘为 VCC 。
BR1 | BR0 | 功能 |
---|---|---|
GND | GND | 9600 波特率 正常输出模式 |
GND | VCC | 1200 波特率 正常输出模式 |
VCC | GND | 57.6k 波特率 正常+原始波形输出模式 |
VCC | VCC | N/A |
对应固件 1.7 的 ThinkGear 控制命令字节第 0 页前三条命令字节。
正常输出模式包括以下输出:POOR_SIGNAL、ASIC_EEG_POWER_INT、eSense™ 测量值。
如前所述,TGAM1 的陷波滤波器频率可通过 M 配置焊盘进行设置。它可用于选择 50Hz 或 60Hz,以降低特定市场的交流噪声。将 M 焊盘绑在 VCC 焊盘上可选择 60Hz,将 M 焊盘绑在 GND 上可选择 50Hz。
与 BR0、BR1 配置不同,M 配置没有相应的 ThinkGear 控制命令字节。
串口通信
ThinkGear 数据值
不同模块和固件支持的数据值和默认状态值各不相同,详见数据包部分。
POOR_SIGNAL 质量
默认情况下,该数据值的输出是启用的。通常每秒输出一次。
这个无符号单字节整数值描述了 ThinkGear 测量的信号有多差。数值范围为 0 至 255。任何非零值都表示检测到了某种噪声污染。数值越大,检测到的噪声越多。数值为 200 有一个特殊含义,即 ThinkGear 电极没有接触到人的皮肤。
该值通常每秒输出一次,表示最近的测量结果不佳。信号不良可能由多种原因造成,按严重程度排序:
- EEG、GND 或 REF 电极不在人的头部(即没有人佩戴 ThinkGear 时)。
- EEG、GND 或 REF 电极与人的皮肤接触不良(即头发挡住等)。
- 佩戴者过度运动(即过度移动头部或身体,推搡电极)。
- 环境静电噪音过大(某些环境有强烈的电信号或佩戴传感器的人体内有静电积聚)。
- 过多的非电子脑电图生物测量噪音(即肌电图、心电图/电子脑电图、眼电图等)。
在正常使用 ThinkGear 的过程中,一定量的噪声是不可避免的,NeuroSky 的过滤技术和 eSense™ 算法都被设计用于检测、纠正、补偿、考虑和容忍多种类型的非电子脑电图噪声。大多数只对使用 eSense 值(如注意力和冥想)感兴趣的典型用户无需过多关注 POOR_SIGNAL 质量值,只需注意在检测到 POOR_SIGNAL 时,注意力和冥想值不会更新。POOR_SIGNAL 质量值对某些需要对噪声更加敏感的应用(如某些医疗或研究应用),或者需要在检测到轻微噪声时立即知道的应用更为有用。
eSense™ 测量值
对于所有不同类型的 eSense(如注意、冥想),测量值都是按照 1 到 100 的相对 eSense 标度报告的。在这个量表中,任何特定时刻的数值在 40 到 60 之间被认为是"中性"的,其概念类似于传统脑电图测量技术中建立的"基线"(尽管确定 ThinkGear 基线的方法是专有的,可能与传统脑电图不同)。60 到 80 之间的数值被视为"轻微升高",可解释为可能高于正常水平(对于特定的人来说,注意或冥想水平可能高于正常水平)。80 到 100 之间的值被视为"升高",这意味着它们强烈表明该电子感觉的水平有所提高。
同样,在量表的另一端,数值在 20 到 40 之间表示电子感应水平"降低",而数值在 1 到 20 之间表示电子感应水平"强烈降低"。根据每种电子体感的相反情况,这些水平可能表示分心、激动或异常的状态。
eSense 测量值为 0 是一个特殊值,表示 ThinkGear 无法可靠地计算 eSense 信号电平。这可能是(通常也是)噪音过大所致,如上文"信号质量不良"部分所述。
每种解释的范围之所以有些宽,是因为 eSense 算法的某些部分是动态学习的,有时会采用一些"慢适应"算法,以适应每个用户的自然波动和趋势,考虑并补偿人脑脑电图的正常差异和波动范围。这也是 ThinkGear 传感器能够在极其广泛的个人和环境条件下对各种人进行操作,同时还能提供良好的准确性和可靠性的部分原因。我们鼓励开发人员进一步解释和调整这些指导范围,以便根据自己的应用进行微调(例如,应用可以忽略低于 60 的数值,只对 60-100 之间的数值做出反应,将其解释为注意力开始高度集中)。
注意 eSense
默认情况下,该数据值的输出是启用的。通常每秒输出一次。
这个无符号单字节值用于报告用户当前的 eSense 注意力指数,表示用户精神"集中"或"注意力"的强度,例如在高度集中注意力和定向(但稳定)精神活动时的强度。其数值范围为 0 至 100。分心、思绪游离、注意力不集中或焦虑都会降低注意力指数。
冥想 eSense
默认情况下,该数据值的输出是启用的。通常每秒输出一次。
这个无符号单字节值用于报告用户当前的 eSense 冥想值,它表示用户精神上的"平静"或"放松"程度。其值范围为 0 至 100 。请注意,"冥想"是衡量一个人的精神水平,而不是身体水平,因此仅仅放松身体的所有肌肉可能不会立即提高"冥想"水平。不过,对于大多数人来说,在大多数正常情况下,放松身体往往也有助于放松精神。冥想与大脑中活跃的心理过程活动减少有关,长期以来人们观察到的一个效果是,闭上眼睛可以关闭处理来自眼睛的图像的心理活动,因此闭上眼睛往往是提高冥想水平的有效方法。分心、思绪游离、焦虑、激动和感官刺激可能会降低冥想表的水平。
8BIT_RAW 波形值
默认情况下,该数据值的输出是禁用的。与普通带符号的原始波形值一样,8BIT_RAW 波形值通常每秒输出 128 次,即大约每 7.8ms 输出一次。
该数据值仅在 ThinkGear 嵌入式模块 (TGEM) 中可用。在 MindWave 和 MindWave Mobile 中使用的 ThinkGear ASIC (TGAT/TGAM1) 中没有该数据值。
这个无符号的单字节值等同于下面描述的有符号的原始 16 位波形值,只是它被缩放为无符号,并且只输出最有意义的 8 位("最有意义"是根据特定的 ThinkGear 硬件定义的)。这样就可以在 9600 波特串行通信的带宽限制下输出原始波值,但代价是不能输出精度最低的几个比特。对于许多应用(如实时显示原始波形图)来说,显示 8 位精度就足够了,因为人眼通常无法快速分辨可能对应较低精度位的像素。如果需要更高精度,可考虑使用正常带符号的 16 位 RAW 波值(如下所述)以更高的波特率输出。
启用 8BIT_RAW
输出后,虽然只有最有意义的 8 位被输出,但 ThinkGear 内部仍会根据 ThinkGear 硬件可用的最高精度原始波形信息进行所有计算,因此内部不会丢弃任何信息。为了节省串行带宽,只有输出的原始值被减少到 8 位。
RAW_MARKER 片段起始
默认情况下,该数据值的输出是禁用的。通常每秒输出一次。
该数据值仅在 ThinkGear 模块中可用。ThinkGear ASIC(如 MindWave 和 MindWave Mobile)无法使用。
这不是一个真正的数据值,主要用于调试非常精确的时间和原始波的同步或研究目的。该值始终为 0x00 。
原始波形值
对于 TGEM,该数据值的输出默认为禁用。启用后,原始波值通常每秒输出 128 次,即大约每 7.8ms 输出一次。而 ThinkGear ASIC(TGAT/TGAM1)则每秒输出 512 次,即大约每 2 毫秒输出一次。默认情况下,它通常是打开的。默认值可在模块级进行调整,详情请查阅规格表。
TGAM1 只报告大约 -2048 到 2047 之间的原始波形。
该数据值由两个字节组成,代表一个原始波形样本。其值是一个带符号的 16 位整数,范围从 -32768 到 32767 。数据值的第一个字节代表二进制的高位,第二个字节代表低位。要重构完整的原始波值,只需将第一个字节左移 8 位,并与第二个字节进行位或运算即可:
short raw = (Value[0] << 8) | Value[1];
其中 Value[0] 是高阶字节,Value[1] 是低阶字节。
每个 ThinkGear 型号仅在整个 -32768 至 32767 范围内的某些区域报告原始波形信息。例如,ThinkGear ASIC 可能只报告大约 -2048 到 2047 之间的原始波形,而 ThinkGear 模块可能只报告大约 0 到 1023 之间的原始波形。更多信息,请查阅特定 ThinkGear 硬件的文档。
由于该值的输出速率较高,且涉及的数据字节数较多,因此只能在 57600 波特及以上的串行通信流中输出 16 位原始波值。如果需要 9600 波特的原始波形信息,请考虑使用 8BIT_RAW
波形值输出。
EEG_POWER
默认情况下,禁用该数据值的输出。启用后,通常每秒输出一次。
该版本的 EEG_POWER 使用浮点数,仅适用于 ThinkGear 模块,不适用于 ASIC。有关 ASIC 版本,请参阅
ASIC_EEG_POWER_INT
。自 ThinkGear 固件 v1.7.8 起,ASIC 版本是读取 EEG 波段功率的标准和首选格式,浮点格式已被弃用,仅用于向后兼容。
该数据值表示 8 种常见脑电图频带(脑电波)的当前幅度。它由 8 个 4 字节浮点数组成,依次为:
- delta 0.5 – 2.75Hz
- theta 3.5 – 6.75Hz
- low-alpha 7.5 – 9.25Hz
- high-alpha 10 – 11.75Hz
- low-beta 13 – 16.75Hz
- high-beta 18 – 29.75Hz
- low-gamma 31 – 39.75Hz
- mid-gamma 41 – 49.75Hz
这些值没有单位,因此只有在相互比较和自身比较时才有意义,用于考虑相对数量和时间波动。浮点格式是标准的 big-endian IEEE 754 ,因此值的 32 个字节可以直接在 C 语言中(在 big-endian IEEE 754 环境下)转换为 float
。
ASIC_EEG_POWER_INT
默认情况下,该数据值的输出为启用状态,通常每秒输出一次。
从 ThinkGear 固件 v1.7.8 起,EEG_POWER 这种形式是脑电图波段功率的标准输出格式,而 EEG_POWER 中描述的输出格式仅为向下兼容而保留,并且只能通过命令开关访问。在 v1.7.8 之前,EEG_POWER 是标准格式。
该数据值代表 8 种常见脑电波类型的当前幅度。它相当于 ASIC 的 EEG_POWER
,主要区别在于该数据值是以 8 个 3 字节无符号整数的形式输出,而不是 4 字节浮点数。这些 3 字节无符号整数采用大端格式。
八种 EEG 功率按以下顺序输出:
- delta 0.5 – 2.75Hz
- theta 3.5 – 6.75Hz
- low-alpha 7.5 – 9.25Hz
- high-alpha 10 – 11.75Hz
- low-beta 13 – 16.75Hz
- high-beta 18 – 29.75Hz
- low-gamma 31 – 39.75Hz
- mid-gamma 41 – 49.75Hz
这些值没有单位,因此只有相互比较和自身比较才有意义,以考虑相对数量和时间波动。
眨眼强度
该数据值目前无法通过 ThinkGear 串行数据流 API 获取。它不能从任何当前 ThinkGear 硬件直接输出。对于 TGCD,请参阅与 TG_GetValueStatus()
和 TG_GetValue()
函数一起使用的 TG_DATA_BLINK_STRENGTH
数据类型。
走神级别
这个无符号单字节值用于报告用户"走神级别"的强度。其值范围为 0 至 10。数值为 0 表示"不适用"。数值从 1 到 10 表示等级(数值越大,表示走神级别越高)。
ThinkGear 数据包
ThinkGear 组件以异步串行字节流的形式传输数字数据。必须将串行数据流解析为 ThinkGear 数据包,才能正确提取和解释上一章所述的 ThinkGear 数据值。
ThinkGear 数据包是由 3 部分组成的数据包格式:
- 数据包标头
- 数据包有效负载
- 有效负载校验和
数据包格式的设计主要是为了保证其稳健性和灵活性: 数据包标头和校验和提供了数据流同步和数据完整性检查功能,而数据有效载荷的格式则确保将来可以在数据包中添加新的数据字段(或删除现有的数据字段),而不会破坏任何现有应用程序/设备中的数据包解析器。这就意味着,任何正确实现了 ThinkGear 数据包解析器的应用程序都可以使用较新型号的 ThinkGear 模块,而无需更改其解析器或应用程序,即使较新的 ThinkGear 包含新的数据字段也是如此。
数据包结构
数据包以异步串行字节流的形式发送。
传输介质可以是 UART、串行 COM、USB、蓝牙、文件或任何其他可以传输字节流的机制。
每个数据包都以其标头开始,然后是数据有效负载,并以有效负载的校验和字节结束,如下所示:
[SYNC] [SYNC] [PLENGTH] [PAYLOAD...] [CHKSUM]
_______________________ _____________ ____________
^^^^^^^^(Header)^^^^^^^ ^^(Payload)^^ ^(Checksum)^
允许 [PAYLOAD…] 部分最长为 169 字节,而 [SYNC]、[PLENGTH] 和 [CHKSUM] 各为一个字节。这意味着一个完整、有效的数据包长度最少为 4 字节(如果数据有效载荷长度为 0 字节),最多为 173 字节(如果数据有效载荷长度最大为 169 字节)。
下面的解析数据包分步指南中给出了正确解析 ThinkGear 数据包的过程。
数据包标头
数据包头由 3 个字节组成:两个同步 [SYNC] 字节(0xAA 0xAA),然后是一个 [PLENGTH](有效载荷长度)字节:
[SYNC] [SYNC] [PLENGTH]
_______________________
^^^^^^^^(Header)^^^^^^^
两个 [SYNC] 字节用于发出新到达数据包开始的信号,是值为 0xAA(十进制 170)的字节。同步是两个字节,而不是只有一个字节,以减少数据包中出现的 [SYNC] (0xAA) 字节被误认为是数据包开始的可能性。虽然仍有可能在数据包中出现两个连续的 [SYNC] 字节(导致解析器试图将数据包的中间部分作为数据包的开头开始解析),但 [PLENGTH] 和 [CHKSUM] 的组合可确保这种"错误同步的数据包"不会被意外解释为有效数据包(更多详情,请参阅下面的有效负载校验和)。
[PLENGTH] 字节表示数据包的数据有效载荷 [PAYLOAD…] 部分的长度(字节),可以是 0 到 169 之间的任意值。任何较大的值都表示出错(PLENGTH TOO LARGE)。请务必注意,[PLENGTH] 是数据包有效载荷的长度,而不是整个数据包的长度。数据包的完整长度总是 [PLENGTH] + 4 。
数据包有效负载
数据包的数据有效载荷只是一系列字节。数据包中数据有效载荷的字节数由数据包头部的 [PLENGTH] 字节给出。数据有效载荷字节与上一章中描述的 ThinkGear 数据值之间的关系,在下面的数据有效载荷结构部分有详细定义。请注意,在按照下一节所述验证有效载荷校验和字节 [CHKSUM] 之前,通常不应尝试解析数据有效载荷。
有效负载校验和
[CHKSUM] 字节必须用于验证数据包有效载荷的完整性。
有效载荷的校验和定义为:
- 将数据包数据有效负载的所有字节相加。
- 取和的最低 8 位。
- 对这最低的 8 个比特进行按位反运算。
接收数据包的接收方必须使用这 3 个步骤来计算他们收到的数据有效载荷的校验和,然后与随数据包一起收到的 [CHKSUM] 校验和字节进行比较。如果计算出的有效负载校验和与接收到的 [CHKSUM] 值不匹配,则整个数据包应作为无效丢弃。如果两者匹配,接收方可按下文 "数据有效载荷结构 "部分所述的步骤解析数据有效载荷。
数据有效负载结构
一旦验证了数据包的校验和,就可以对数据有效载荷的字节进行解析。数据有效载荷本身由一系列连续的数据值组成,每个数据值都包含在称为数据行的一系列字节中。每个数据行包含数据值代表的内容、数据值的长度和数据值本身的字节等信息。因此,要解析数据有效载荷,必须解析其中的每个数据行,直到解析完数据有效载荷的所有字节。
数据行格式
数据行由以下格式的字节组成:
([EXCODE]...) [CODE] ([VLENGTH]) [VALUE...]
____________________ ____________ ___________
^^^^(Value Type)^^^^ ^^(length)^^ ^^(value)^^
括号中的字节是有条件的,这意味着它们只出现在某些数据行中,而不会出现在其他数据行中。
数据行可以 0 个或多个 [EXCODE](扩展代码)字节开始,这些字节的值为 0x55。[EXCODE] 字节的个数表示扩展代码级别。扩展代码级别反过来与 [CODE] 字节结合使用,以确定该数据行包含的数据值类型。因此,解析器在开始解析数据行时,应首先计算出现的 [EXCODE] (0x55) 字节数,以确定数据行 [CODE] 的扩展代码级别。
[CODE] 字节与扩展代码级别相结合,表示数据行中编码的数据值类型。例如,在扩展代码级别 0,[CODE] 为 0x04 表示数据行包含一个 eSense 注意值。有关定义的 [CODE] 含义列表,请参阅下面的 CODE 定义表。请注意,0x55 的 [EXCODE] 字节永远不会用作 [CODE](顺便说一句,0xAA 的 [SYNC] 字节也永远不会用作 [CODE])。
如果 [CODE] 字节介于 0x00 和 0x7F 之间,则暗示 [VALUE…] 为 1 字节长(称为单字节值)。在这种情况下,没有 [VLENGTH] 字节,因此单 [VALUE] 字节将紧接着 [CODE] 字节出现。
但是,如果 [CODE] 大于 0x7F,则 [CODE] 字节后紧跟一个 [VLENGTH] (值长度)字节,这就是 [VALUE…] 中的字节数(称为多字节值)。这些较高的 CODE 对于传输数值数组或无法放入单字节的数值非常有用。
以这种方式定义数据行格式是为了在将来添加代表任意长 DATA… 值的新 CODE 时,任何正确实施的解析器都不会中断(它们只是忽略未识别的 CODE,但不会在解析时中断),或在数据包中重新排列 CODE 的顺序,或某些 CODE 并不总是在每个数据包中传输。
正确解析数据包和数据行的步骤分别见下文解析数据包分步指南和解析数据包有效载荷中的数据行分步指南。
CODE 定义表
如果 [CODE] 小于 0x7F,则表示单字节值,无 [VLENGTH] 字节。
如果 [CODE] 大于 0x7F,则表示多字节值,有 [VLENGTH] 字节。
代码级别 | [CODE] | [LENGTH] | 值含义 | 值范围 | TGAM1 |
---|---|---|---|---|---|
0 | 0x01 | N/A | 电池电量 | 0-255 | 不支持 |
0 | 0x02 | N/A | POOR_SIGNAL | 0-255 | 默认开启 |
0 | 0x03 | N/A | HEART_RATE | 0-255 | 不支持 |
0 | 0x04 | N/A | 注意 eSense | 0-100 | 默认开启 |
0 | 0x05 | N/A | 冥想 eSense | 0-100 | 默认开启 |
0 | 0x06 | N/A | 8BIT_RAW | 0-255 | 不支持 |
0 | 0x07 | N/A | RAW_MARKER | 0 | 不支持 |
0 | 0x80 | 2 | 原始波形值 | int16 | 默认关闭* |
0 | 0x81 | 32 | EEG_POWER | float32[8] | 不支持 |
0 | 0x83 | 24 | ASIC_EEG_POWER | uint24[8] | 默认开启 |
0 | 0x86 | 2 | RRINTERVAL | uint16 | 不支持 |
Any | 0x55 | N/A | 为 [EXCODE] 保留 | N/A | N/A |
Any | 0xAA | N/A | 为 [SYNC] 保留 | N/A | N/A |
TGAM1 的原始波形值为 int12 格式,范围为 -2048 到 2047 。
有关各类数据值含义的详细解释,请参阅 ThinkGear 数据值章节。
无论何时开启 ThinkGear 模块,它总是以标准配置启动,默认情况下仅输出上述部分数据值。要启用或禁用 ThinkGear 输出的数据值类型,请参阅高级章节 ThinkGear 命令字节。
示例数据包
以下是一个典型的数据包。除了 [SYNC]、[PLENGTH] 和 [CHKSUM] 字节之外,所有其他字节(字节 [3] 到 [10])都是数据包数据有效负载的一部分。请注意,不保证有效负载中的数据行出现在每个数据包中,也不保证数据包规范所保证的任何数据行以任何特定顺序出现。
[ 0]: 0xAA // [SYNC]
[ 1]: 0xAA // [SYNC]
[ 2]: 0x08 // [PLENGTH] 数据包长度为 8 字节
[ 3]: 0x02 // [CODE] POOR_SIGNAL
[ 4]: 0x20 // 检测到一些不良信号 (32/255)
[ 5]: 0x01 // [CODE] 电池电量
[ 6]: 0x7E // 电池几乎充满 3V (126/127)
[ 7]: 0x04 // [CODE] 注意 eSense
[ 8]: 0x12 // 注意 eSense 水平为 18%
[ 9]: 0x05 // [CODE] 冥想 eSense
[10]: 0x60 // 冥想 eSense 水平为 96%
[11]: 0xE3 // [CHKSUM]
解析数据包的分步指南:
- 继续从数据流中读取字节,直到遇到 [SYNC] 字节 (0xAA)。
- 读取下一个字节,确保它也是一个 [SYNC] 字节
- 如果不是 [SYNC] 字节,返回步骤 1 。
- 否则,继续执行步骤 3 。
- 从数据流中读取下一个字节作为 [PLENGTH] 。
- 如果 [PLENGTH] 为 170([SYNC]),则重复步骤 3 。
- 如果 [PLENGTH] 大于 170,则返回步骤 1(长度过大)。
- 否则,继续执行步骤 4 。
- 从数据流中读取 [PAYLOAD…] 的下一个 [PLENGTH] 字节,并将其保存到缓冲区。在读取每个字节时,通过递增校验累加器(
checksum += byte
)来求和。 - 取校验累加器的最低 8 位并反相。
checksum &= 0xFF
checksum = ~checksum & 0xFF
- 从数据流中读取下一个字节作为 [CHKSUM] 字节。
- 如果 [CHKSUM] 与计算出的 CHKSUM 不匹配(CHKSUM 失败)。
- 否则,您现在可以将有效载荷的内容解析为数据行,以获取数据值,如下所述。
- 无论哪种情况,请返回步骤 1 。
解析数据包有效负载中的数据行的分步指南:
- 解析并计算可能位于当前数据行开头的 [EXCODE] (0x55) 字节数。
- 解析当前数据行的 [CODE] 字节。
- 如果 [CODE] >= 0x80,则将下一个字节解析为当前数据行的 [VLENGTH] 字节。
- 根据数据行的 [EXCODE]、[CODE] 和 [VLENGTH] 解析并处理当前数据行的 [VALUE…] 字节。
- 如果从 payload[] 数组中未解析出所有字节,则返回步骤 1,继续解析下一个数据行。
ThinkGear 控制命令字节
开机时,ThinkGear 模块/AISC 始终以出厂默认状态启动。例如,FWv1.7.13 及更早版本的 ThinkGear 模块总是以 9600 波特启动,并且只输出电池、信号不良、ASIC_EEG、注意和静置值。这种配置足以满足大多数玩具、游戏和演示应用的需要。然而,上电后,ThinkGear 模块可以发送命令字节来改变其配置,例如切换到 57.6k 波特,或启用原始波值输出。ThinkGear 命令字节是一种高级功能,用于对 ThinkGear 硬件行为进行自定义。
ThinkGear 命令字节通过用于接收数据包字节的同一 UART 接口发送到 ThinkGear 硬件。命令字节是具有某些位设置的单字节(8 位)值。本节介绍要设置哪些位以更改 ThinkGear 模块的配置。
在断电后,ThinkGear 模块将恢复上述默认设置。
另外需要注意的是,在应用程序向 ThinkGear 发送任何命令字节之前,应首先确保已经从 ThinkGear 读取了至少一个完整、有效的数据包,以确保以正确的波特率发送命令字节。以错误的波特率发送命令字节可能会导致 ThinkGear 无法运行,直到电源循环(重置为默认配置)。
命令字节语法
一个命令字节由 8 个比特组成,每个比特均可设置或取消设置。最低(最小有效)的四位用于控制模式,如 9600 与 57.6k 波特模式、注意输出启用或禁用模式等。高四位(最重要)称为 "命令页",用于定义低四位的含义。
发送第 0 页或第 6 页字节后,应用程序本身必须更改自身以开始以新请求的波特率进行通信,然后以新请求的波特率等待从 ThinkGear 接收完整、有效的数据包,然后再尝试向 ThinkGear 发送任何其他命令字节。在执行此检查之前发送另一个命令字节可能会使 ThinkGear 模块进入不确定(且不可操作)状态,直到重新启动为止。
例如,0x0E 的命令字节的位模式为 0000 1110。上面(最重要的)四位是 0000,指的是命令页零。从下表中的命令页零位(1.6 版固件)可以看出,1110 的低四位分别用于控制波特率、原始波输出、冥想输出和注意力输出的设置。由于波特率位为 1,模块的波特率将被设置为 57.6k 模式。由于原始波输出和冥想输出位均为 1,因此将分别启用这两种类型的输出。由于注意力输出位为 0,注意力输出将被禁用。因此,向 ThinkGear 模块发送 0x0E 字节,可指示其在 57.6k 波特模式下工作,以数据包形式输出原始值和冥想值,但不输出注意力值。
请注意,在模块固件的 1.6 和 1.7 版本之间,命令页的顺序发生了很大变化。还请注意,ThinkGear ASIC(如 MindWave 和 MindWave Mobile)仅能识别 1.7 版固件第 0 页上的 4 个命令字节;所有其他命令字节都可能使 ThinkGear ASIC 进入不可操作状态,直到电源循环。请参考 ThinkGear 硬件附带的文档以及下表,确定哪些命令字节对您的硬件有效。
ThinkGear ASIC 只能识别固件 1.7 第 0 页的命令字节。
TGAM1 只能识别固件 1.7 第 0 页的前三条命令字节。
任何其他命令字节都可能使其进入无法运行状态,直到电源循环。
固件 1.6 命令字节表:
Page 0 (0000____) (0x0_):
bit[0] (____0001): 设置/取消设置以启用/禁用注意 eSense 输出
bit[1] (____0010): 设置/取消设置以启用/禁用冥想 eSense 输出
bit[2] (____0100): 设置/取消设置以启用/禁用原始波形输出
bit[3] (____1000): 设置/取消设置以使用 57.6k/9600 波特率
Page 1 (0001____) (0x1_):
bit[0] (____0001): 设置/取消设置以启用/禁用 EEG_POWER 输出
bit[1] (____0010): 设置/取消设置以使用 10 位/8 位原始波形输出
Page 15 (1111____) (0xF_):
bit[0] (____0001): 设置/取消设置以启用/禁用测试模式
固件 1.7 命令字节表:
Page 0 (0000____) (0x0_): 标准/ASIC 配置命令
bit[0] (____0000): 9600 波特率 正常输出模式
bit[1] (____0001): 1200 波特率 正常输出模式
bit[2] (____0010): 57.6k 波特率 正常+原始波形输出模式
bit[3] (____0011): 57.6k 波特率 FFT 输出模式
Page 1 (0001____) (0x1_): 原始波输出
bit[0] (____0001): 设置/取消设置以启用/禁用原始波形输出
bit[1] (____0010): 设置/取消设置以使用 10 位/8 位原始波形输出
bit[2] (____0100): 设置/取消设置以启用/禁用原始标记输出
bit[3] (____1000): 忽略
Page 2 (0010____) (0x2_): 测量输出
bit[0] (____0001): 设置/取消设置以启用/禁用 POOR_SIGNAL 输出
bit[1] (____0010): 设置/取消设置以启用/禁用 ASIC_EEG_POWER 输出
bit[2] (____0100): 设置/取消设置以启用/禁用 EEG_POWER输出
bit[3] (____1000): 设置/取消设置以启用/禁用电池输出
Page 3 (0011____) (0x3_): eSense 输出
bit[0] (____0001): 设置/取消设置以启用/禁用注意 eSense 输出
bit[1] (____0010): 设置/取消设置以启用/禁用冥想 eSense 输出
bit[2] (____0100): 忽略
bit[3] (____1000): 忽略
Page 6 (0110____) (0x6_): 波特率选择
bit[0] (____0000): 无变化
bit[1] (____0001): 1200 波特率
bit[2] (____0010): 9600 波特率
bit[3] (____0011): 57.6k 波特率
机械制图
TGAM1 的尺寸和主要部件如图所示的机械图。
右上角和左下角有两个安装孔,用于将 TGAM1 固定到外壳。
尺寸单位为 mil
和 inch
。