This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/ADS7953EVM-PDK:在单触发模式和连续模式下均无法读取ADC输出

Guru**** 1555210 points
Other Parts Discussed in Thread: ADS7953, ADS7953EVM-PDK, ADCPRO, REF5025
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/628948/linux-ads7953evm-pdk-unable-to-read-adc-output-both-in-one-shot-mode-and-continuous-mode

部件号:ADS7953EVM-PDK
在“线程”中讨论的其他部件:ADS7953,, ADCProREF5025

工具/软件:Linux

尊敬的TI E2E社区:

我试图从ADS7953中获取数据,但没有成功。 我的设置由以下内容组成:

-一个通过SPI连接到ADS7953评估板(ADS7953EVM-PDK)的i.MX6 EVB

-基于以下内核的Freescale Linux映像:4.1 .43-fslc+ga7.3554万d.

ADS (ti-ads7950.c)的驱动程序已正确安装,我看到以下层次结构:

root@imx6qdlsabersd:~# ls -la /sys/bus/IIO/devices/IIO\:device0/
drwxr-xr-x 6 root 根 1970年1月1日。
drwxr-xr-x 4 root 根 1970年1月1日..
drwxr-xr-x 2根 根 0 09月29日09:30 buffer
-r--r--1根 根 4096 9月29日09:30 dev
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage0_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage10_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage11_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage12_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage13_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage14_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage15_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage1_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage2_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage3_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage4_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage5_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage6_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage7_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage8_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage9_raw
-rw-r--r-- 1根 根 4096 9月29日09:30 in_voltage_scale
-r--r--r-- 1根 根 4096 9月29 09:30名称
lrwxrwxrwx 1 root 根 0 sep 29 09:30 of_node ->.//././././././././././firmware/devicese/base/so/aips- bus@200万/spba-bus@200万/ecspi@200.8万/ADC@0
drwxr-xr-x root 2 根 0 sep 29 09:30 power
drwxr-xr-x 2 root 根 0 9月29日09:30 scan_elements
lrwxrwxrwx 1 root 根 0 9月29日09:30子系统->.//././././././././././bus/IIO
drwxr-xr-x 2根 根 0 9月29日09:30触发
器-rw-r--r-- 1根 根 4096 1月1日1970 uevent 

我尝试按照此处的说明操作,但没有成功: http://processors.wiki.ti.com/index.php/Linux_Core_ADC_Users_Guide

当我尝试在通道#0上执行一个cat时,我得到了0,当我尝试在我得到的11个通道中的任何其他通道上执行一个cat时:

root@imx6qdlsabersd:~# cat /sys/bus/IIO/devices/IIO\:device0/in_voltage7_raw
 cat:读取错误:输入/输出错误 

我已将内核设备树配置为:

&ecspi1 {
	FSL,SPI-num-chipselects =<1>;
	cs-GPIOs =<&GPIO4 9 0>;
	pinctrl-names ="default";
	pinctrl-0 =<&pinctrl_ecspi1>;
	status ="oke";

ADC@0 {
	兼容="ti,ads7953";
	reg =<0>;
	#IO-channel-cells =<1>;
	vref-supply =<3000>;
	SPI-max-frequency =<2000万>;
};
};

是否可以指定3V的参考电压? 是否可以使用20MHz的SPI频率?

提前感谢您的帮助

编辑:Vref以mV表示,因为它是由ADS7953EVM-PDK提供的,我不确定Vref-supply字段是否有用

此致,

Fabio Emiliani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Fabio,

    >>>>> 是否可以指定3V的参考电压? 是否可以使用20MHz的SPI频率?

    ADS7953EVM-PDK具有板载2.5V参考。 这是默认选项。 请查阅用户手册
    www.ti.com/.../slau262

    20MHz SPI频率很好:ADS7953可在最大SPI频率20MHz下工作。

    >>>>> 我尝试按照此处的说明操作,但没有成功: processors.wiki.ti.com/.../Linux_Core_ADC_Users_Guide

    以上链接中的说明适用于AM335x EVM和AM335x ADC驱动器。 它不适用于ADS7953EVM-PDK。

    我们仅为该EVM提供基于Windows的ADCPro软件。

    >>>>> 我的设置由以下内容组成:
    -一个通过SPI连接到ADS7953评估板(ADS7953EVM-PDK)的i.MX6 EVB
    -基于以下内核的Freescale Linux映像:4.1 .43-fslc+ga7.3554万d.

    ADS7953EVM-PDK由MMB0主板和ADS7953EVM组成。 如果您要连接i.MX6 EVM,我建议您单独连接ADS7953EVM。 不带MMB0板。 MMB0板上已经有一个MCU,您不需要两个SPI主控尝试访问ADS7953。 请参阅上面提到的ADS7953EVM-PDK用户手册。

    >>>已正确安装ADS (ti-ads7950.c)驱动程序

    此驱动程序似乎是在Torvalds/Linux GitHub中开发和发布的。 您也可以与该文档的原始作者进行核对。

    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Vishi,非常感谢您的回答。

    我已经从ADS7953EVM-PDK中移除了ADS7953EVM,并尝试单独启动它。

    从EVB的数据表第4章:
    P3是电源输入连接器。 表5列出了P3的配置详细信息。 仅+5V模拟和
    为EVM供电需要+5V数字。 如果需要,可提供跳线选件(W6)为提供
    ADS7953数字内核,具有+3.3V电压。

    关于模拟电源,我已经将一个5V的电压连接到了WFP的3.3 插针,它在WFP 3.6 上接地。 关于数字供应,是否需要?

    将第5章I改为:
    ADS7953EVM具有三个基准电压源。 跳线W2可选择REFP电压
    从REF5025(U3)或从应用于WFP 1.18 的外部来源获得。 跳线W3可选择
    来自模拟接地(AGND)或应用到WFP 1.20 的外部电源的REFM电压。

    W2配置为使用REF5025生成参考电压。 此电压是否由第4章中提到的数字电源产生?

    此致,
    Fabio
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >>>关于模拟电源,我已将5V电压连接到了WFP 3.3 插脚,该插脚在WFP 3.6 上接地。 关于数字供应,是否需要?

    是的,需要数字电源。 逻辑电平应与您要连接的Freescale MCU相同。

    >>W2配置为使用REF5025生成参考电压。 此电压是否由第4章中提到的数字电源产生?

    不能。提供给WFP 3.3 插针的+5V电源也为REF5025供电。 对于REFP,使用来自U3 (REF5025)的VREF+;对于REFM,将其保持连接至AGND。

    ADS795x需要+VBD引脚上的数字电源,以便进行I/O和SPI通信。

    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的信息,我已按照数据表中的说明添加了模拟和数字电源。 REF5025是参考电压的来源。

    关于接线连接的最后一个疑问与时钟选择有关。 数据表中有两个选项:
    - PIN名称CNTL ->信号名称:CS
    PIN名称FSX ->信号名称:FSYNC Xmit

    CS和FSYNC Xmit之间的区别是什么? 我必须使用哪个信号作为时钟选择?

    谢谢,此致,
    Fabio
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Fabio,
    请查看下面的链接

    e2e.ti.com/.../62.0182万

    有一张EVM的照片,其中显示了所有要仔细检查的连接。 CS是芯片选择,FSYNC是DSP的帧同步信号。 我认为Freescale不会有用于SPI通信的帧同步信号(像旧DSP一样)。 因此,对W5使用CS选项,如上面链接的照片所示。 基本上,只有在断言CS时才能进行整个SPI通信。 所有SPI信号仅在活动CS期间激活。

    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Vishi,
    我已检查链接,所有接线均已正确连接。 我还开始使用W5的CS选项。

    在过去的几天里,我检查了i.MX6端的SPI功能。 一切正常。 如果i.MX6正正确地控制SPI总线,我已断开了使用示波器检查的TI ADC anche。 是的,我可以看到所有预期的信号。

    我认为问题可能出在设备树和TI驱动程序之间。 仍在努力...有什么想法?

    此致,
    Fabio
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Fabio,
    无论连接到ADS7953的i.MX6的SPI端口/GPIO (特别是CS)如何,都应在Linux内核树中注册,以便正确配置权限。
    您是否有任何其他SPI设备在工作?
    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否,我没有任何其他SPI工作。 我已检查设备树,似乎正常。

    昨天,我在驱动程序的探测之后立即注意到一个奇怪的错误:

    TI_ads7950_probe
    /soC/AIPS-bus@200万/spba-bus@200万/ecspi@200.8万/ADC@0:找不到phandle 

    这是什么意思? 为什么找不到ADC节点的指针?

    此致,

    Fabio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Fabio,
    我会检查这一点。 同时,建议您在iMx6社区中查看相关信息。 我在那里看到了关于Linux SPI驱动程序的积极讨论。 Google iMx6 Linux SPI驱动程序。
    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vishi,

    该问题是由设备树中对ADC的错误描述引起的。 请参阅以下绑定:

    *德州仪器(TI) ADS7950系列的A/DC芯片
    
    所需属性:
    -兼容:必须为"ti,ads7950","ti,ads7951","ti,ads7952",
    "ti,ads7953","ti,ads7954", "TI,ads7955","ti,ads7956","ti,ads7957",
    "ti,ads7958","ti,ads7959", TI,ads7960"或"ti,ads7961"
    - reg:SPI芯片器件选择号
    -#IO-channel-cells:必须为1 (根据./spi- iio-bindings.txt
    电源):向提供2.5V
    或5V参考电压
    
    建议属性的调节器节点发送电话:
    -
    		树-最大频率:定义依据Documents/devices/spi/saddindings spi-bus.txt
    
    
    :“@”/spi
    	,790/
    	reg =<0>;
    	#IO-channel-cells =<1>;
    	vref-supply =<&refin_supply>;
    	SPI-max-frequency =<1000万>;
    };
    

    由于Vref是由ADS7953EVM-PDK而不是由i.MX6 EVB生成的,因此无需"refin_supply"。 因此我创建 了一个虚拟调节器并在该字段中指定了它。 phandle错误已消失。

    我在调试过程中采取了进一步的步骤。 到目前为止,我看到CS,CLK和MOSI信号正常移动,但Miso仍无响应。 我无法从ADC获得任何输出。 我希望很快能回来解决问题

    --

    Fabio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Fabio,

    感谢您的更新。

    请注意,ADS7953在启动时有2个周期延迟... 在"Cycle N"(循环N)中,您将告诉它在"Cycle N+1"(循环N+1)中切换到哪个信道,然后在"Cycle N+2"(循环N+2)中给出该信道的转换。

    例如 ,下面我发送0x1880,0x1900和0x1980以手动模式从通道1,通道2和通道3读取数据。 通道1输入= 1.25V,通道2 =通道3 = 0.625V。 请参见下面的逻辑分析器捕获,了解ADS795x和MSP430之间的SPI交换:通道1数据在第3帧中输出,通道2数据在第4帧中输出,通道3数据在第5帧中输出。

    谢谢!

    Vishy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vishi,

    我知道 ADS7953 在启动时有2个周期延迟。 这就是驱动程序的行为方式:

    /*
     *设置默认消息。 在第一个样本的末尾读取样本
     *转移,则需要一个完整的周期来转换样本和一个
     *更多循环以发送值。 转换过程由驱动
     * SPI时钟,这就是我们有3个传输的原因。 中间的是
     *仅在芯片转换样品时发送虚拟数据
     *在第一次传输结束时读取。
     */
    st->scan_singal_xfer[0].tx_buf =&st->tx_buf[0];
    st->scan_single_xfer[0].len = 2;
    st->scan_singal_xfer[0].cs_change = 1;

    st->scan_singal_xfer[1].tx_buf =&st->tx_buf[0];
    st->scan_single_xfer[1].len = 2;
    st->scan_singal_xfer[1].cs_change = 1;

    st->scan_singal_xfer[2].rx_buf =&st->rx_buf[0];
    st->scan_single_xfer[2].len = 2;

    SPI_MESSAGE_INIT_WITH_Transfers(&st->SCAN_SINGLE_msg, st->SCAN_SINGLE_xfer, 3);

    当我执行原始读取时,例如:

    cat /sys/bus/IIO/devices/IIO\:device0/in_voltage0_raw

    我在MOSI上看到了三个16位字的展览。 第一个脉冲串是:

    0001 10000 1 00000 = 0x1840

    这意味着:

    DI15-12:0001 =选择手动模式

    DI11:1=启用位DI06到DI00的编程

    DI10-07:0000 =通道0

    DI06:1=选择5V输入范围

    DI05:0=设备正常运行(不断电)

    DI04:0= SDO引脚输出DO15至DO12位通道的当前通道地址,然后输出DO11至DI00位的12位转换结果

    DI03-00:0000 =配置为输出的通道的GPIO数据

    第二个脉冲相同,驾驶员再次发出相同的有效负载。

    第三个脉冲由所有零组成,驱动程序将从miso中获得转换操作的结果。

    请参见以下图像:

    这是原始读取的概述,黄色为时钟,蓝色为MOSI:

    在第一个脉冲的缩放下,0x1840字:

    然后缩放第二个脉冲,再次显示0x1840单词:

    最后是第三个词,全是零(这是我预期miso的转换结果时的情况):

    问题:

    -驾驶员行为是否正确? 是否可以发送两次相同的16位字(0x1840)?

    -在设备通电后,我不进行任何配置,我是否需要配置某些功能才能在手动模式下工作? 我可以直接发送0x1840字从通道0读取吗?

    提前感谢您的参与

    此致,

    Fabio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Fabio,

    >>>驱动程序行为是否正确? 是否可以发送两次相同的16位字(0x1840)?

    在我看来,驾驶员行为正常。 可以发送两次相同的16位字(0x1840)。 由于在帧1和帧2中选择了通道0,因此在帧3和帧4中读取通道0数据。 由于驱动程序自动进行3次传输,您应在第三次传输结束时看到通道0数据读出。

    >>>在设备通电后,我没有进行任何配置,我是否需要配置某些设备以在手动模式下工作? 我可以直接发送0x1840字从通道0读取吗?

    是的,您可以直接发送0x1840从通道0读取。 对于手动模式,没有程序寄存器。 您不需要任何其他配置即可在手动模式下工作。

    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Vishi,

    感谢您的确认。

    我仍有以下疑问:

    —我的MOSI信号处于高怠速状态,您的MOSI处于低怠速状态。 是否正常?

    -您是否可以确认与ADS7953一起使用的SPI模式是SPI_MODE_0 (CPOL=0,CPHA=0?

    我不理解DI11位的描述,在数据表中我读到:

    1 ->允许对位DI06到DI00进行编程

    0 ->设备保留上一帧中DI06到DI00的位值

    如果我将DI11设置为1,会发生什么情况? 是否代表DI0 (GPIO0)忽略了DI06的值?

    由于我想手动指定DI06的值(我对5V输入范围-> DI06 = 1感兴趣),我必须为DI11指定哪个值?

    谢谢,此致,

    Fabio

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Fabio,

    >>>能否确认与ADS7953一起使用的SPI模式是SPI_MODE_0 (CPOL=0,CPHA=0?
    是的,对于ADS795x,您应该能够运行SPI模式0 (CPOL =0,CPHA =0)。 仅供参考,ADS795x器件预期SCLK上升沿的DIN数据会稳定下来。 您的示波器屏幕截图显示了在SCLK上升边缘期间SDI已稳定下来。

    >>>如果我将DI11设置为1会发生什么情况? 是否代表DI0 (GPIO0)忽略了DI06的值?

    不能。不会代表DI0忽略DI06的值。

    DI11设置为1时,位为DI06,DI05,DI04,..., 用户可以对DI00进行编程。 基本上,它可以对'范围和GPIO '进行编程。 例如,当您将DI06写入1时,将选择5V输入范围。 当您将DI05写为1时,设备会在第16 SCLK下降边缘关闭电源,依此类推。

    如果不清楚,请告诉我。

    谢谢!
    Vishy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊,好吧,我对数据表的解释很差。 感谢您的清晰解释。

    昨天,我尝试用万用表跟踪电源。 详细地说,我尝试检查J2上的VCC_D。 我没有安装跳线,因此J2未连接到接地,我期望5伏,但我得到的电压低于1伏。 似乎是ADS7953正在降低电压(GPIO2,GPIO3输入)。 我已要求硬件人员检查组件是否损坏。

    我会不断更新您的信息,再次感谢您的帮助

    此致,

    Fabio