电路设计论坛
直播中

王斌

7年用户 1323经验值
私信 关注
[问答]

AD7606采集不了电压的原因?

AD7606使用imx6cpu,内核版本是6.1.22,以下是设备树,7606b挂载在spi1上:
adc_vref: fixedregulator {
        compatible = "regulator-fixed";
        regulator-name = "adc_vref";
        regulator-min-microvolt = <5000000>;
        regulator-max-microvolt = <5000000>;
        // GPIO属性被移除,因为不需要通过GPIO控制电源
        regulator-always-on;
    };


ecspi1 {
    cs-gpios = < gpio3 19 GPIO_ACTIVE_LOW>;
    pinctrl-names = "default";
    pinctrl-0 = < pinctrl_ecspi1>;
    status = "okay";

    ad7606@0 {
        compatible = "adi,ad7606b";
        reg = <0>;
        spi-max-frequency = <1000000>;
        spi-cpol;
        // spi-cpha;
        //busy 4 24
        //reset 4 22
        //adi,conversion-start-gpios 4 23
        //adi,first-data-gpios 4 25
        //interrupt 4 21

        avcc-supply = < adc_vref>;  //很重要,电源的重写可以规避识别不了的问题

        interrupts = <24 IRQ_TYPE_EDGE_FALLING>;    //目前给的是busy信号
        interrupt-parent = < gpio4>;

        adi,conversion-start-gpios = < gpio4 23 GPIO_ACTIVE_HIGH>;
        reset-gpios = < gpio4 22 GPIO_ACTIVE_HIGH>;
        adi,first-data-gpios = < gpio4 25 GPIO_ACTIVE_HIGH>;
        // adi,oversampling-ratio-gpios = < gpio 18 GPIO_ACTIVE_HIGH
        //               gpio 23 GPIO_ACTIVE_HIGH
        //               gpio 26 GPIO_ACTIVE_HIGH>;
        // standby-gpios = < gpio 24 GPIO_ACTIVE_LOW>;
        adi,sw-mode;
        // status = "okay";
    };
};
目前使用的中断管教给的是busy信号,不知道会不会有影响

// adi,oversampling-ratio-gpios = < gpio 18 GPIO_ACTIVE_HIGH
        //               gpio 23 GPIO_ACTIVE_HIGH
        //               gpio 26 GPIO_ACTIVE_HIGH>;
        // standby-gpios = < gpio 24 GPIO_ACTIVE_LOW>;

这几个管教因为硬件直接上拉了,所以设置不了。


内核下打开7606的配置,目前可以在sys下看到设备:
root@imx6q-custom:~# cd /sys/bus/iio/devices/iio:device0
root@imx6q-custom:/sys/bus/iio/devices/iio:device0# ls -l
drwxr-xr-x 2 root root 0 Mar 10 01:08 buffer
drwxr-xr-x 2 root root 0 Mar 10 01:08 buffer0
-rw-r--r-- 1 root root 4096 Mar 10 01:08 current_timestamp_clock
-r--r--r-- 1 root root 4096 Mar 10 01:08 dev
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage0_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage0_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage1_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage1_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage2_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage2_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage3_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage3_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage4_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage4_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage5_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage5_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage6_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage6_scale
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage7_raw
-rw-r--r-- 1 root root 4096 Mar 10 01:08 in_voltage7_scale
-r--r--r-- 1 root root 4096 Mar 10 01:08 in_voltage_scale_available
-r--r--r-- 1 root root 4096 Mar 10 01:08 name
lrwxrwxrwx 1 root root 0 Mar 10 01:08 of_node -> ../../../../../../../../../../firmware/devicetree/base/soc/bus@2000000/spba-bus@2000000/spi@2008000/ad7606@0
-rw-r--r-- 1 root root 4096 Mar 10 01:08 oversampling_ratio
-r--r--r-- 1 root root 4096 Mar 10 01:08 oversampling_ratio_available
drwxr-xr-x 2 root root 0 Mar 10 01:08 power
drwxr-xr-x 2 root root 0 Mar 10 01:08 scan_elements
lrwxrwxrwx 1 root root 0 Mar 10 01:08 subsystem -> ../../../../../../../../../../bus/iio
drwxr-xr-x 2 root root 0 Mar 10 01:08 trigger
-rw-r--r-- 1 root root 4096 Mar 10 01:07 uevent
-r--r--r-- 1 root root 4096 Mar 10 01:08 waiting_for_supplier

但是我根据官方的文档,打开通道报如下错误:
root@imx6q-custom:/sys/bus/iio/devices/iio:device0# cat in_voltage0_raw
cat: read error: Input/output error

请帮我分析下,是设备树还有问题吗,还是需要一些初始化才能成功

回帖(1)

李华

2024-5-27 17:46:26
根据您提供的信息,我将逐步分析可能导致AD7606无法采集电压的原因:

1. 检查硬件连接:首先,请确保AD7606与IMX6 CPU的SPI1接口连接正确。检查SPI数据线、时钟线、片选线等是否连接正确,以及电源线是否连接到AD7606的VDD和VREF引脚。

2. 检查电源:请确保AD7606的电源线连接正确,并且VDD和VREF引脚的电压在规定的范围内。根据您的设备树配置,VREF的电压范围是5000000微伏(5V),请检查实际电压是否符合要求。

3. 检查SPI通信:请确保IMX6 CPU的SPI1接口与AD7606之间的通信正常。检查SPI时钟速率、数据格式等参数是否设置正确。您可以使用示波器或逻辑分析仪来监测SPI通信。

4. 检查设备树配置:根据您提供的设备树配置,AD7606的VREF电压是固定的5V。请确保这个配置与您的硬件设计和AD7606的数据手册要求相匹配。

5. 检查软件驱动:请确保IMX6 CPU的内核版本6.1.22支持AD7606,并已正确加载了SPI驱动和AD7606驱动。您可以检查内核的配置文件,以确保SPI和AD7606驱动已启用。

6. 检查应用程序:请检查您的应用程序是否正确初始化了SPI接口和AD7606设备,以及是否正确发送了读取电压值的命令。

7. 检查AD7606本身:如果以上步骤都无法解决问题,可能是AD7606本身存在问题。您可以尝试更换一个新的AD7606芯片,或者使用其他已知正常的SPI设备来测试IMX6 CPU的SPI1接口。

通过以上步骤,您应该能够找到导致AD7606无法采集电压的原因,并采取相应的解决措施。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分