AD4695 驱动程序

用于 Analog Devices Inc. AD4695 和类似设备的 ADC 驱动程序。模块名称是 ad4695

支持的设备

该驱动程序支持以下芯片

支持的功能

SPI 接线模式

该驱动程序目前支持以下 SPI 接线配置

4 线模式

在这种模式下,CNV 和 CS 连接在一起,并且只有一条 SDO 线。

+-------------+         +-------------+
|          CS |<-+------| CS          |
|         CNV |<-+      |             |
|     ADC     |         |     HOST    |
|             |         |             |
|         SDI |<--------| SDO         |
|         SDO |-------->| SDI         |
|        SCLK |<--------| SCLK        |
+-------------+         +-------------+

要使用此模式,请在设备树中省略 cnv-gpiosspi-rx-bus-width 属性。

SPI 卸载接线

与 SPI 卸载一起使用时,支持的接线配置为

+-------------+         +-------------+
|    GP0/BUSY |-------->| TRIGGER     |
|          CS |<--------| CS          |
|             |         |             |
|     ADC     |         |     SPI     |
|             |         |             |
|         SDI |<--------| SDO         |
|         SDO |-------->| SDI         |
|        SCLK |<--------| SCLK        |
|             |         |             |
|             |         +-------------+
|         CNV |<-----+--| PWM         |
|             |      +--| GPIO        |
+-------------+         +-------------+

在这种情况下,需要 cnv-gpiospwms 属性。还需要 #trigger-source-cells = <2> 属性以连接回 SPI 卸载。SPI 卸载将具有 trigger-sources 属性,其中包含单元以指示忙信号和使用的 GPx 引脚,例如 <&ad4695 AD4695_TRIGGER_EVENT_BUSY AD4695_TRIGGER_PIN_GP0>

另请参阅

SPI 卸载支持

通道配置

由于芯片支持多种配置每个通道的方式,因此必须在设备树中根据实际连接到输入的配置进行描述。

有三种典型的配置

INx 引脚用作正输入,REFGNDCOM 或下一个 INx 引脚用作负输入。

与 REFGND 配对

每个 INx 引脚都可以与 REFGND 引脚结合使用,作为伪差分输入。设备树将如下所示

channel@0 {
    reg = <0>; /* IN0 */
};

如果不需要其他通道属性(例如 adi,no-high-z),则可以完全省略通道节点。

这将以 voltage0 通道的形式出现在 IIO 总线上。处理后的值(原始值 × 比例)将是 IN0 引脚上相对于 REFGND 的电压。(与 REFGND 配对时,偏移量始终为 0。)

与 COM 配对

每个 INx 引脚都可以与 COM 引脚结合使用,作为伪差分输入。设备树将如下所示

com-supply = <&vref_div_2>;

channel@1 {
    reg = <1>; /* IN1 */
    common-mode-channel = <AD4695_COMMON_MODE_COM>;
    bipolar;
};

这将以 voltage1 通道的形式出现在 IIO 总线上。处理后的值((原始值 + 偏移量)× 比例)将是在 IN1 引脚上相对于 REFGND 测量的电压。(偏移量由 com-supply 电压确定。)

宏来自

#include <dt-bindings/iio/adc/adi,ad4695.h>

配对两个 INx 引脚

偶数编号的 INx 引脚和以下奇数编号的 INx 引脚可以用作伪差分输入。使用 IN2 作为正输入和 IN3 作为负输入的设备树将如下所示

in3-supply = <&vref_div_2>;

channel@2 {
    reg = <2>; /* IN2 */
    common-mode-channel = <3>; /* IN3 */
    bipolar;
};

这将以 voltage2 通道的形式出现在 IIO 总线上。处理后的值((原始值 + 偏移量)× 比例)将是在 IN1 引脚上相对于 REFGND 测量的电压。(偏移量由 in3-supply 电压确定。)

VCC 电源

该芯片支持通过 VCC 输入由外部 LDO 供电,或通过 LDO_IN 输入由内部 LDO 供电。驱动程序会查看设备树以确定使用哪种方式。如果存在 ldo-supply,则使用内部 LDO。如果存在 vcc-supply,则使用外部 LDO,并且禁用内部 LDO。

参考电压

该芯片支持通过 REF 输入的外部参考电压或通过 REFIN 输入的内部缓冲参考电压。驱动程序会查看设备树以确定使用哪种方式。如果存在 ref-supply,则使用外部参考电压,并且禁用内部缓冲器。如果存在 refin-supply,则使用内部缓冲参考电压。

增益/偏移校准

通过 calibscalecalibbias 属性,分别使用通道增益和偏移寄存器来支持系统校准。

过采样

当使用 SPI 卸载时,芯片支持每通道过采样,可用的过采样率 (OSR) 为 1(默认)、4、16 和 64。在通道上启用过采样会将采样数据的有效位数提高到 17 (OSR == 4)、18 (16) 或 19 (64)。这可以通过 oversampling_ratio 属性进行设置。

设置通道的过采样率也会更改该通道的采样率,因为它需要每次采样进行多次转换。具体来说,新的采样频率是 PWM 采样频率除以特定的 OSR。这会在设置 oversampling_ratio 属性时由驱动程序自动设置。例如,如果设备的当前 sampling_frequency 为 10000,并且在通道 voltage0 上设置了 4 的 OSR,则该通道的新报告采样率将为 2500(忽略 PWM API 舍入),而所有其他通道将保持在 10000。随后在该通道上将采样频率设置为更高的值将调整所有通道的 CNV 触发周期,例如,如果 voltage0 的采样频率从 2500(OSR 为 4)调整为 10000,则 in_voltage0_sampling_frequency 报告的值将为 10000,但所有其他通道现在将报告 40000。

为简单起见,应首先设置设备的采样频率(考虑要使用的最高期望 OSR 值),然后再为特定通道配置过采样。

未实现的功能

  • 其他接线模式

  • 阈值事件

  • GPIO 支持

  • CRC 支持

SPI 卸载支持

为了能够实现最大采样率,该驱动程序可以与 AXI SPI 引擎 一起使用,以提供 SPI 卸载支持。

另请参阅

SPI 卸载接线

当使用 SPI 卸载时,某些属性将有所不同。

  • trigger 目录将被删除。

  • 添加了 in_voltage0_sampling_frequency 属性,用于设置采样率。

  • 添加了 in_voltage0_sampling_frequency_available 属性,用于查询最大采样率。

  • timestamp 通道将被删除。

  • 与不使用卸载时相比,缓冲区数据格式可能不同,例如 buffer0/in_voltage0_type 属性。

设备缓冲区

该驱动程序支持硬件触发缓冲区。这使用芯片的“高级序列器”功能来触发一系列转换。

另请参阅 工业 IIO 设备缓冲区 以获取更多常规信息。

缓冲读取的有效采样率

当不使用 SPI 卸载时,采样率由用户空间中手动配置的触发器确定。收到触发器时,将以突发方式读取所有启用的通道。

当使用 SPI 卸载时,采样率是按通道配置的。所有通道都将具有相同的速率,因此只需要设置一个 in_voltageY_sampling_frequency 属性。由于该速率确定了每次单独转换之间的延迟,因此每个采样的有效采样率实际上是缓冲读取中每个启用通道的周期之和。换句话说,它是 in_voltageY_sampling_frequency 属性的值除以启用的通道数。因此,如果启用了 4 个通道,并将 in_voltageY_sampling_frequency 属性设置为 1 MHz,则有效采样率为 250 kHz。

启用过采样后,有效采样率还取决于分配给每个通道的 OSR。例如,如果前面提到的 4 个通道中的一个通道配置了 4 的 OSR,则该通道的有效采样率变为(1 MHz / 4)= 250 kHz。然后,所有四个通道的有效采样率为 1 / ((3 / 1 MHz) + (1 / 250 kHz)) ~= 142.9 kHz。请注意,在这种情况下,“采样”是指对所有启用通道的一次读取(即,通过自动序列器的一个完整周期)。