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.

[参考译文] ADS7957:无法通过 Linux IIO 读取通道

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/950709/ads7957-unable-to-read-channels-via-linux-iio

器件型号:ADS7957
主题中讨论的其他器件:AM3357

您好!

我有以下设置:

在器件树中、我有以下配置(仅相关器件):

am33xx_pinmux{
pinctrl-names ="默认值";
SPI1_Pins: pinmux_SPI1_pins{

pinctrl-single、pins =<
AM33XX_IOPAD (0x90c、PIN_input | MUX_mod2)/*(H17) gmii1_crs.SPI1_d0 *
/ AM33XX_IOPAD (0x910、PIN_input | MUX_DEUX_1*




)*(0x3320_MODIO0*)*(0x3320_0_MOUX_DR_0*)*(0x3320_0_MODIO0_DR_0_IN_IN_DR_0*)*(0x33_MODIO0_18_IN_IN_MODIO0*)*(0x94_UPD_0_IN_0_0_0*)*(0x33_MODIO0_MODI_IN_MODIO0_18_IN_MODIO0_IN_IN_MODI_18_IN_IN_MODIO0*(0x17_DR_MO0_MODI_DR_18_DR_IN_DR_DR_DR_0*)**



&SPI1{
status ="确定";
pinctrl-names ="默认值";
pinctrl-0 =<&SPI1_PINs>;
cs-GPIO =<&GPIO0 12 GPIO_ACTIVE_LOW>、<&GPIO0 13 GPIO_ACTIVE_LOW>;
SPI-max-frequency =<60000000>;

ads7957:ADC@1{
compatible ="ti、ads7957";
reg =<1>;
#IO-channel-cells =<1>;
SPI-max-frequency =<10000000>;
};
}; 

TI 的 Linux 驱动程序已正确加载、IIO 子系统检测 ADS7957芯片:

root@am335x-cmpc30:~ dmesg | grep ADS
[5.806242] ads7950 spi1.1:未找到 spi1.1电源 Vref、使用虚拟稳压
器[5.878974] ads7950 spi1.1:作为消费者链接到 regulator .0 

但是、我无法读取除第一个和最后一个通道之外的任何通道(并且值错误)。 以下是 IIO_INFO Linux 工具的输出:

root@AM335x-cmpc30:~# IIO_info
库版本:0.15 (git tag:v0.15)
使用后端编译:使用
本地后端创建本地 xml IP USB IIO 上下文。
后端版本:0.15 (git 标记:v0.15)
后端说明字符串:Linux AM335x-cmpc30 4.19.94-rt39cmpc30_v8-ga242ccf3F1 #1挤占 RT 星期五10月23日10:26:45 UTC 2020 armv7l
IIO 上下文具有1个属性:
本地、内核:4.19.94-rt39cmpc30_v8-ga242ccf3F1
IIO 上下文有1个器件:
IIO:device0:ads7957 (支持缓冲器)
找到17个通道:
voltage0:(输入,索引:0,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始值:1
属性1:比例错误:无效参数(-22)
voltage1:(输入,索引:1,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage2:(输入,索引:2,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage3:(输入,索引:3,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage4:(输入,索引:4,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage5:(输入,索引:5,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage6:(输入,索引:6,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage7:(输入,索引:7,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage8:(输入,索引:8,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage9:(输入,索引:9,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage10:(输入,索引:10,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage11:(输入,索引:11,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage12:(输入,索引:12,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage13:(输入,索引:13,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage14:(输入,索引:14,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始错误:输入/输出错误(-5)
属性1:比例错误:无效参数(-22)
voltage15:(输入,索引:15,格式:be:U10/16>2)
找到2个通道特定属性:
属性0:原始值:523
属性1:比例错误:无效参数(-22)
时间戳:(输入,索引:16,格式:LE:S64/64>0)
找到1个特定于器件的属性:
属性0:CURRENT_TIMESTAMP_CLOCK 值:实时

找到2个特定于缓冲器的属性:
属性0:水印值:1.
属性1:DATA_Available 值:0 

Scale 返回错误、因为我没有在器件树中指定稳压器。 这是出于目的、因为 ADS7957在我的 PCB 上具有硬接线3.3V 电压。 但通道应该正常工作。

调试时、我在 TI 的 ADS7957驱动程序中添加了内核日志、并显示以下错误:

[598.869235] chan->address != TI_ADS7950_extract (ret、12、4)->(1!= 0)
[598.880442] chan->address != TI_ADS7950_extract (ret、12、4)->(2!= 1)
[598.891315] chan->address!= TI_5950_extract!= TI
、ADS7950_4
!= ADS5950_extract (ret、ADS7912_4)、[ADS7912_extract!= ADS7950_4、[ADS598012_4!= ADS7950_extract! 4)->(5!= 2)
[598.923756] chan->address!= TI_ADS7950_extract (ret、12、4)->(6!= 3)
[598.934229] chan->address!= TI_ADS7950_extract (ret、12、4)->(7!= 3)[598.934229](

ret_address!= TI 7950_extract、ADS7950_9412>ADS7950_ret_extract (ret_4)->(ret_9412>ADS7950_9412>ADS7950_9412>ADS7950<= t_9412>ADS7950_9412>ADS7950_9412>ADS7950_9412>ADS7950_9412<=
[598.966881] chan->address!= TI_ADS7950_extract (ret、12、4)->(10!= 13)
[598.977712] chan->address!= TI_ADS7950_extract (ret、12、4)->(11!= 13)
[598.988269] chan->address!= TI_5950_extract!= ADS7950_ret、[ADS7912>ADS7912_extract!
=[ADS7950]14
、ADS7912_extract!= ADS7950_13、ADS7912_unc!= ADS7950_unc、[ADS7912_unc!= ADS7950_extract! 4)->(14!= 15) 

因此、对于每个读取值驱动程序检测到的值、它似乎来自其预期的不同通道。

我检查了使用逻辑分析仪进行的 SPI 传输、解码后的字节看起来有效(传输结束时从正确的通道中读取的值正确)。

在 SYS/BIOS 上使用自编码裸机驱动程序时、同一 PCB 工作正常、因此芯片工作正常。

我出了什么问题?

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

    您好!

    您首先联系了 ADC 团队的 TI 专家、在查看了更换后、似乎可以让 ADS7957在手动配置时正常工作、但在通过器件树和/或应用程序进行配置时遇到了难题?   

    如果波形看起来正常、并且 ADS7957根据需要工作、我们将邀请我们的 AMxxxx 专家来查看所拨打的电话。

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

    是的、芯片本身看起来不错、但我的器件树配置或 Linux 驱动程序不工作。

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

    您好、Kuba、

    我们的 ADC 应用团队可以帮助调试 SPI 波形和所有类型的深入硬件问题、但我们在 Linux 驱动程序方面的专业知识目前相当有限。  很抱歉、除了提供我们已经推荐的一些基本指导之外、我不确定我们在这里有很多关于驱动程序本身不能正常编译或运行的问题。   

    我将尝试与我们 AM3357团队的一些专家交流、看看他们是否有任何想法。

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

    您好!

    这是为了向您提供最新信息、我需要从我们的团队中抽出一些人员来提供帮助。  

    此致、

    Schuyler

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

    对于未来的读者、本文将继续讨论 无法通过 Linux IIO 读取 ADS7957通道的问题。