<!--
 * @Author: mypx
 * @Email: mypx_coder@163.com
 * @Date: 2025-06-23 10:56:41
 * @LastEditors: mypx mypx_coder@163.com
 * @Description: 
-->
## AD7792与AD7793的核心区别总结

---

### 🔍 **核心差异概览**
| **参数**               | **AD7792**         | **AD7793**         | **说明**                                                                 |
|------------------------|--------------------|--------------------|--------------------------------------------------------------------------|
| **分辨率**             | 16位               | 24位               | AD7793有效分辨率高达23位，适合更高精度测量。 |
| **输出数据范围**       | 0–65535 (16位)     | 0–16,777,215 (24位) | 24位分辨率提供更精细的量化级别。                               |
| **噪声水平**           | 较高（同增益下）   | 更低（40nV RMS @4.17Hz） | 低噪声设计使AD7793在微弱信号检测中表现更优。          |
| **有效分辨率**         | ≤16位              | 最高23位            | 实际可用分辨率受噪声限制，AD7793在低速率下更接近理论值。 |
| **典型应用场景**       | 一般工业控制       | 高精度测量（如医疗、实验室） | 热电偶、RTD测温等场景优先选用AD7793。                |

---

### ⚙️ **功能与性能细节**
1. **模拟前端一致性**  
   - **相同点**：  
     - 均支持3路差分输入，内置可编程增益放大器（PGA，增益1–128）。  
     - 集成激励电流源（10μA/210μA/1mA）和偏置电压发生器。  
     - 供电电压范围均为2.7V–5.25V，功耗典型值400μA。  
   - **差异点**：  
     - AD7793的输入缓冲器噪声更低，直接支持小信号输入（如PT100测温）。

2. **动态性能优化**  
   - **数据速率**：两者均支持4.17Hz–470Hz可调输出速率。  
   - **滤波能力**：AD7793在低速率下（如4.17Hz）通过数字滤波实现更优的50Hz/60Hz工频抑制。

3. **基准电压与校准**  
   - 均支持内部带隙基准（1.17V）或外部差分基准（如2.5V）。  
   - **校准模式**：两款芯片均提供内部/系统零点和满量程校准寄存器。

---

### 📊 **选型建议**
- **AD7792适用场景**：成本敏感型应用，如工业过程控制、便携仪器仪表，对分辨率要求≤16位即可满足。  
- **AD7793适用场景**：  
  - 高精度传感器测量（如RTD测温精度达0.2℃）。  
  - 微弱信号采集（如气体分析、血液检测）。  
  - 需23位有效分辨率的系统（如实验室设备）。

---

### 💎 **总结**
AD7793在分辨率、噪声控制和有效位数上全面优于AD7792，但成本更高；  
AD7792则以更低成本覆盖中精度需求场景。  
若系统要求分辨率≤16位且预算有限，选AD7792；反之，追求极限精度或微弱信号检测，必选AD7793。

---



## 推荐初始化流程（AD7793）

1. 配置 `ad7793_hw_if_t` 硬件接口结构体，填充 SPI/GPIO/延时等函数指针。
2. 定义 `ad7793_config_t` 配置结构体，指定参考源、增益、通道、速率、缓冲等参数。
3. 调用 `ad7793_init(&dev, &hw_if, cs_pin, &cfg)` 完成初始化。
4. 采集数据前建议调用 `ad7793_wait_ready` 等待数据就绪。
5. 采集数据用 `ad7793_read_data`，转换电压用 `ad7793_convert_to_voltage`。
6. 如需切换通道/增益/参考源，建议先 idle，再切换参数，最后恢复 continuous。

## 常见故障排查

- STATUS=0x48/0xC8：多为参考源配置与硬件不符、增益/缓冲冲突、IEXC未配置等。
- 读数全0或极大：检查参考电压、SPI连线、通道/增益配置。
- 写寄存器失败：检查 SPI 速率、CS 时序、硬件接口实现。
- 温度跳变/毛刺：建议应用层做温度跳变/低码滤波。
- 采样速率异常：确认速率配置与主时钟、SPI速率匹配。

## IEXC（激励电流）配置注意事项

- 仅当硬件实际将 IOUT1/IOUT2 接到 RTD 或传感器回路时才需配置 IEXC。
- 若 IOUT1/IOUT2 悬空（未连接），请勿使能 IEXC，否则可能导致不可预期行为或错误状态（如 STATUS=0x48）。
- IEXC 配置必须与硬件连接方式一致。若用外部电流源或定值电阻，IEXC 应保持关闭。

## 缓冲/增益策略

- 关闭缓冲（BUF=0）时，增益不得大于2（G<=2），驱动已强制限制。
- 开启缓冲（BUF=1）可用高增益，但输入偏置电流和功耗增加。

## 寄存器dump与诊断

- 可用 `ad7793_dump_registers` 或 `ad7793_dump_registers_mode` 打印所有寄存器值，便于调试。
- 检测到持续错误（STATUS.ERR）时建议dump寄存器，辅助定位参考、缓冲、增益、IEXC等配置问题。

## API典型用法与边界说明

- 所有API均检查设备初始化和参数有效性，未初始化或参数非法均返回false。
- 具体API用法和边界条件详见头文件注释。

## Buffer/Gain Policy

- When buffer is disabled (BUF=0), gain must not exceed 2 (G<=2). The driver enforces this restriction and will return false if you attempt to set G>2 with buffer off.
- Enabling the buffer (BUF=1) allows higher gain settings, but increases input bias current and power consumption.

## Register Dump and Diagnostics

- Use `ad7793_dump_registers` or `ad7793_dump_registers_mode` to print all register values for debugging.
- When persistent error (STATUS.ERR) is detected, perform a register dump to help diagnose the cause (reference, buffer, gain, IEXC, etc.).

## Typical API Usage and Boundary Notes

- All API functions check for device initialization and parameter validity; invalid parameters or uninitialized device will return false.
- See header file comments for typical usage and boundary conditions for each API.

---

## 通信寄存器用法

通信寄存器在AD7793中起到控制数据传输方向和指定目标寄存器的作用。它是SPI通信接口的核心控制寄存器，用于告诉AD7793后续的操作是读还是写，以及操作的目标寄存器是哪一个。

### 通信寄存器的作用
1. **读写控制**：通过设置`RW`位（bit6）来区分是读操作还是写操作。
2. **寄存器选择**：通过`RS2-RS0`位（bits5-3）来指定要操作的目标寄存器。
3. **连续读模式**：通过设置`CREAD`位（bit2）可以启用连续读模式，用于连续读取数据寄存器。

### 是否每个寄存器操作前都需要设置通信寄存器？
是的，在每次操作AD7793的寄存器之前，都需要先通过通信寄存器指定操作类型（读/写）和目标寄存器。这是因为AD7793采用的是串行接口，需要通过通信寄存器来告知器件接下来要进行的操作。

### 通信寄存器的操作流程
1. **构建通信命令**：根据要操作的目标寄存器和操作类型（读/写），构建通信寄存器的值。
2. **发送通信命令**：将构建好的通信命令发送给AD7793。
3. **执行数据传输**：根据通信命令的指示，进行数据的读写操作。

### 代码示例
以下是一个写寄存器的示例，展示了如何使用通信寄存器：

```c
bool ad7793_write_reg(uint8_t reg, uint8_t *data, uint16_t len)
{
    uint8_t cmd = 0;

    /* Build communication command: WEN=0, R/W=0(write), register address */
    cmd  = (reg & 0x07) << 3;  // 设置RS2-RS0位，指定目标寄存器
    cmd &= ~COMM_RW;           // 清除RW位，设置为写操作
    cmd &= ~COMM_WEN;          // 清除WEN位（默认值）

    ad7793.hw_if.gpio_set(ad7793.cs_pin, false);  // 使能片选
    ad7793_spi_transfer(cmd, data, NULL, len);    // 发送通信命令和数据
    ad7793.hw_if.gpio_set(ad7793.cs_pin, true);   // 禁用片选

    return true;
}
```

### 注意事项
1. **通信命令字节**：通信寄存器的设置是通过发送一个专门的命令字节来实现的，而不是直接写入通信寄存器的地址。
2. **连续操作**：在连续操作同一个寄存器时，不需要每次都重新设置通信寄存器，除非操作类型或目标寄存器发生变化。
3. **数据寄存器的特殊处理**：数据寄存器（REG_DATA）在读模式下有特殊的连续读功能，可以通过设置`CREAD`位来启用。

理解通信寄存器的工作原理对于正确操作AD7793至关重要，它是实现与器件通信的基础。

---

# AD7793/AD7792 应用配置与调试注意事项

## 推荐配置（PT100/RTD 测温典型拓扑）

```c
static const ad7793_config_t g_ad7793_config = {
    .use_internal_ref        = false,         // 使用外部参考（如2.5V），REFIN+已实测2.5V
    .external_ref            = 2.500f,
    // 传感器差分约 0.043V，需保证 < Vref / Gain
    // 选择 GAIN=4 -> 满量程 2.5/4=0.625V，安全覆盖 43mV 输入
    .init_gain               = AD7793_GAIN_4,
    .init_channel            = AD7793_CHANNEL_1, // AIN1(+) - AIN1(-)
    .init_rate               = AD7793_RATE_8_33HZ,
    .unipolar                = true,          // 只测正向信号
    .buffered                = true,          // 启用缓冲
    .calibrate_system_zero   = false          // 禁用 system zero 校准，防止 OFFSET 被污染
};
```

## 配置与调试注意事项

1. **参考电压必须与硬件一致**：
   - 若硬件 REFIN+ 接外部参考（如2.5V），`use_internal_ref` 必须为 `false`，`external_ref` 填实际电压。
   - 若用内部参考（1.17V），需保证 REFIN+/- 悬空且 `use_internal_ref=true`。

2. **增益选择**：
   - 满量程 = 参考电压 / 增益。输入信号最大值必须小于满量程。
   - 输入信号远小于满量程时可适当提高增益（如 GAIN=8/16），但不能超量程。

3. **校准操作**：
   - 禁用 system zero 校准（`calibrate_system_zero=false`），防止在参考/输入异常时 OFFSET 被写坏。
   - 若需校准，必须保证参考和输入都正常且在允许范围内。

4. **错误状态与保护**：
   - STATUS.ERR（bit6=1）表示参考/输入异常，采样数据无效。
   - 采样线程应对 ERR/低码做过滤，避免异常温度。
   - OFFSET/FULLSCALE 寄存器应在每次初始化和异常时 dump 检查。

5. **常见故障排查**：
   - STATUS=0x48 持续：多为参考配置与硬件不符或输入超量程。
   - OFFSET=0x800000 为正常中点，极大/极小为校准异常。
   - 采样码值极低或全0，多为参考/输入/校准异常。

6. **硬件测量建议**：
   - 用万用表测 REFIN+ 对地、AIN1+/AIN1- 差分，确认与配置一致。

7. **调试建议**：
   - 先用低增益（如 GAIN=2/4）确保不超量程，采样正常后再逐步提高增益。
   - 采样线程建议加低码/ERR保护，防止异常数据影响温度计算。

---

如需更高分辨率或特殊应用，请根据实际输入信号幅度和参考电压合理调整增益与参考配置。