ADS1299 寄存器配置参考
面向二次开发者的 CONFIG、通道、BIAS 与测试信号配置说明。
版本:v1.0
适用硬件:BCIKit AFE8 外部时钟菊花链板
默认 CLK:2.048 MHz
默认 SPI:4 MHz,Mode 1,MSB first
1. SPI 命令
| 命令 | 值 | 用途 |
|---|---|---|
| WAKEUP | 0x02 | 退出 standby |
| STANDBY | 0x04 | 进入 standby |
| RESET | 0x06 | 复位寄存器和数字滤波器 |
| START | 0x08 | 开始或同步转换 |
| STOP | 0x0A | 停止转换 |
| RDATAC | 0x10 | 连续输出数据 |
| SDATAC | 0x11 | 停止连续输出,RREG 前必须发送 |
| RDATA | 0x12 | 命令式读取一次数据 |
| RREG | `0x20 | address` |
| WREG | `0x40 | address` |
RREG/WREG 第二字节为 count - 1。多字节事务期间 CS 必须一直为低。
uint8_t rreg_cmd = 0x20u | (address & 0x1Fu);
uint8_t wreg_cmd = 0x40u | (address & 0x1Fu);
uint8_t count_m1 = count - 1u;
2. 寄存器地址
| 地址 | 名称 | 主要用途 |
|---|---|---|
0x00 | ID | 器件识别,ADS1299 通常为 0x3E |
0x01 | CONFIG1 | 菊花链、时钟输出、采样率 |
0x02 | CONFIG2 | 内部测试信号 |
0x03 | CONFIG3 | 内部参考、BIAS |
0x04 | LOFF | lead-off 幅度、频率、阈值 |
0x05..0x0C | CH1SET..CH8SET | 通道掉电、增益、SRB2、MUX |
0x0D | BIAS_SENSP | P 端参与 BIAS 的通道 |
0x0E | BIAS_SENSN | N 端参与 BIAS 的通道 |
0x0F | LOFF_SENSP | P 端 lead-off 使能 |
0x10 | LOFF_SENSN | N 端 lead-off 使能 |
0x11 | LOFF_FLIP | lead-off 电流方向翻转 |
0x12 | LOFF_STATP | P 端 lead-off 状态,只读 |
0x13 | LOFF_STATN | N 端 lead-off 状态,只读 |
0x14 | GPIO | GPIO 方向和数据 |
0x15 | MISC1 | SRB1 路由 |
0x16 | MISC2 | 保留,写 0x00 |
0x17 | CONFIG4 | 连续/单次转换、lead-off comparator |
3. CONFIG1 采样率
当前硬件统一使用 ADS1299 daisy mode,因此 DAISY_EN=0。
| SPS | DR bits | CONFIG1 |
|---|---|---|
| 16000 | 000 | 0x90 |
| 8000 | 001 | 0x91 |
| 4000 | 010 | 0x92 |
| 2000 | 011 | 0x93 |
| 1000 | 100 | 0x94 |
| 500 | 101 | 0x95 |
| 250 | 110 | 0x96 |
首版产品只承诺 250 和 500 SPS。不要使用 DR=111。
若未来单独设计非菊花链主控板,并需要 multiple readback,可将 bit6 置 1,即在表中数值基础上加 0x40。
4. CHnSET 编码
bit7 PD: 1=channel power-down
bit6:4 GAIN
bit3 SRB2: 1=connect channel negative input to SRB2
bit2:0 MUX
4.1 增益编码
| gain | GAIN bits | Normal differential | Normal + SRB2 |
|---|---|---|---|
| 1 | 000 | 0x00 | 0x08 |
| 2 | 001 | 0x10 | 0x18 |
| 4 | 010 | 0x20 | 0x28 |
| 6 | 011 | 0x30 | 0x38 |
| 8 | 100 | 0x40 | 0x48 |
| 12 | 101 | 0x50 | 0x58 |
| 24 | 110 | 0x60 | 0x68 |
4.2 常用 MUX
| MUX | bits | gain 24 示例 |
|---|---|---|
| Normal electrode input | 000 | 0x60 |
| Input shorted | 001 | 0x61 |
| BIAS measurement | 010 | 0x62 |
| Internal test signal | 101 | 0x65 |
禁用通道时优先使用 0x81:channel power-down、gain 1、input shorted。
5. 推荐寄存器配置
所有配置都应在 SDATAC 后写入,并在启动采集前读回验证。
5.1 eeg_srb2_250_gain24
首版默认 EEG 公共参考模式。
| Register | Value | 说明 |
|---|---|---|
| CONFIG1 | 0x96 | daisy mode,250 SPS |
| CONFIG2 | 0xC0 | 外部输入,不启用内部测试 |
| CONFIG3 | 0xEC | 内部参考、内部 BIASREF、BIAS buffer 开启 |
| LOFF | 0x00 | lead-off 初始关闭 |
| CH1SET..CH8SET | 0x68 | gain 24,normal,SRB2 |
| BIAS_SENSP | 0xFF | P 端参与 BIAS 派生的起始配置 |
| BIAS_SENSN | 0x00 | 公共参考 N 端不重复参与 |
| LOFF_SENSP/N | 0x00/0x00 | lead-off 关闭 |
| LOFF_FLIP | 0x00 | 不翻转 |
| GPIO | 0x0F | GPIO 作为输入,不由固件驱动 |
| MISC1 | 0x00 | SRB1 关闭 |
| MISC2 | 0x00 | 保留 |
| CONFIG4 | 0x00 | continuous,lead-off comparator disabled |
在真实电极测试中,如果某通道长期饱和或脱落,应将对应位从 BIAS_SENSP 清除。
5.2 eeg_srb2_500_gain24
与上一配置相同,仅:
CONFIG1 = 0x95
5.3 differential_250_gain24
| Register | Value | 说明 |
|---|---|---|
| CONFIG1 | 0x96 | 250 SPS |
| CONFIG2 | 0xC0 | 外部输入 |
| CONFIG3 | 0xEC | 参考和 BIAS 开启 |
| CH1SET..CH8SET | 0x60 | gain 24,全差分 |
| BIAS_SENSP | 0xFF | P 端参与 BIAS,需实测调整 |
| BIAS_SENSN | 0xFF | N 端参与 BIAS,需实测调整 |
| MISC1 | 0x00 | SRB1 关闭 |
| CONFIG4 | 0x00 | lead-off 关闭 |
5.4 eeg_srb1_250_gain24
| Register | Value |
|---|---|
| CONFIG1 | 0x96 |
| CONFIG2 | 0xC0 |
| CONFIG3 | 0xEC |
| CH1SET..CH8SET | 0x60 |
| MISC1 | 0x20 |
| CONFIG4 | 0x00 |
SRB1 和 SRB2 不应在默认配置中同时启用。
5.5 internal_test_250_gain24
| Register | Value | 说明 |
|---|---|---|
| CONFIG1 | 0x96 | 250 SPS |
| CONFIG2 | 0xD0 | internal test,基础幅度,fCLK/2^21 |
| CONFIG3 | 0xE0 | 内部参考开启,BIAS 关闭 |
| CH1SET..CH8SET | 0x65 | gain 24,test MUX |
| BIAS_SENSP/N | 0x00/0x00 | 不参与 BIAS |
| MISC1 | 0x00 | SRB1 关闭 |
| CONFIG4 | 0x00 | continuous |
2.048 MHz 时:
test frequency = 2.048 MHz / 2^21 = 0.9765625 Hz
test amplitude = 4.5 V / 2400 ~= 1.875 mV
ideal gain-24 raw amplitude ~= 83886 counts
将 CONFIG2 改为 0xD1 可选择约 1.953125 Hz;改为 0xD4 可选择约两倍幅度。
5.6 input_short_250_gain24
| Register | Value |
|---|---|
| CONFIG1 | 0x96 |
| CONFIG2 | 0xC0 |
| CONFIG3 | 0xE0 |
| CH1SET..CH8SET | 0x61 |
| BIAS_SENSP/N | 0x00/0x00 |
| MISC1 | 0x00 |
| CONFIG4 | 0x00 |
6. Lead-off 开发策略
首版初始化必须默认关闭 lead-off。基础采集稳定后再增加:
- 先配置
LOFF的电流、频率和阈值。 - 写
LOFF_SENSP/LOFF_SENSN选择通道。 - 设置
CONFIG4 bit1 = 1,启用 comparator。 - 从每个 27 字节板块状态字读取
LOFF_STATP/N。
SRB2 公共参考模式下,不要对同一个公共参考重复启用多个等价电流源。参考电极 lead-off 应单独设计和验证。
7. 读回验证
不要直接逐字节比较包含只读状态位的寄存器。为每个寄存器定义 writable mask:
if ((readback & writable_mask) != (expected & writable_mask)) {
register_verify_error++;
}
至少验证:
- CONFIG1..CONFIG4
- CH1SET..CH8SET
- BIAS_SENSP/N
- LOFF_SENSP/N
- GPIO
- MISC1/MISC2
多板共享 CS/DIN 时,读回结果不能证明每一块板都单独配置成功。因此生产测试应先做单板寄存器验证,再做整链数据验证。