主题中讨论的其他器件:AM3357、
您好!
我有以下设置:
- CPU:Sitara AM3357、
- 模拟:ADS7957
- GPIO0.13上的 SPI1芯片选择
- 操作系统:基于 TI 内核 v4.19.94rt 的 Yocto Linux (摘自 https://git.ti.com/cgit/processor-sdk/processor-sdk-linux?h=processor-sdk-linux-rt-4.19.y、提交 a242ccf3f13f03d41d521411ce2cc09775c873a2)。
在器件树中、我有以下配置(仅相关器件):
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 工作正常、因此芯片工作正常。
我出了什么问题?