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
尊敬的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
否,我没有任何其他SPI工作。 我已检查设备树,似乎正常。
昨天,我在驱动程序的探测之后立即注意到一个奇怪的错误:
TI_ads7950_probe /soC/AIPS-bus@200万/spba-bus@200万/ecspi@200.8万/ADC@0:找不到phandle
这是什么意思? 为什么找不到ADC节点的指针?
此致,
Fabio
您好,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中获得转换操作的结果。
请参见以下图像:
在第一个脉冲的缩放下,0x1840字:
然后缩放第二个脉冲,再次显示0x1840单词:
最后是第三个词,全是零(这是我预期miso的转换结果时的情况):
问题:
-驾驶员行为是否正确? 是否可以发送两次相同的16位字(0x1840)?
-在设备通电后,我不进行任何配置,我是否需要配置某些功能才能在手动模式下工作? 我可以直接发送0x1840字从通道0读取吗?
提前感谢您的参与
此致,
Fabio
您好,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
啊,好吧,我对数据表的解释很差。 感谢您的清晰解释。
昨天,我尝试用万用表跟踪电源。 详细地说,我尝试检查J2上的VCC_D。 我没有安装跳线,因此J2未连接到接地,我期望5伏,但我得到的电压低于1伏。 似乎是ADS7953正在降低电压(GPIO2,GPIO3输入)。 我已要求硬件人员检查组件是否损坏。
我会不断更新您的信息,再次感谢您的帮助
此致,
Fabio