Part Number:ADS131A04
我想要使用ADS131A04的同步主机模式,但是并没有找到相关的说明或者例程。我目前可以收到时钟信号并且可以在示波器上看到FF04的返回,因为时钟没有间隙所以使用spi从机去读取会一直收到0。我想知道如何在同步主机模式下完成初始化并且获取到adc的数据。
Amy Luo:
您好,
在ADS131A04 产品主页如下路径提供了example code,我直接附在这里:ADS131A04 Example C Code
ADS131A04 产品主页链接:https://www.ti.com.cn/product/cn/ADS131A04
您现在可以正确读写寄存器吗?即寄存器写入后可以正确读出来?
M0, M1, and M2 pins 您配置的是什么电平状态?
datasheet 中 Figure 106 有 ADS131A0x Configuration Sequence。
datasheet 中 第9.5.2.2 部分有Synchronous Master Mode( 同步主机模式)的相关说明。
,
xzq:
我的M0、M1、M2均是接地。例程和手册我都看过,主要描述的都是异步中断模式,同步主机模式具体使用的说明较少。我目前遇到的问题是spi无法保持同步,例如FF04的返回信息我可能是以FF FE 08的方式读取到,出现了移位,所有目前我的单片机和模块无法正常通信。
,
Amy Luo:
xzq said:我目前遇到的问题是spi无法保持同步,例如FF04的返回信息我可能是以FF FE 08的方式读取到,出现了移位,所有目前我的单片机和模块无法正常通信。
请注意,在 同步主机模式,SCLK是从ADC输出的,连接的控制器是作为slaver,控制器需检测ADS131A04输出的SCLK的边沿来输出和输入数据:
,
xzq:
我目前通过spi从机发送解锁寄存器等指令,示波器观察输出波形正常但是没有得到反馈。我注意到反馈是需要通过发送NULL在下一个数据帧中读取,而目前DIN这条线上常态处于低电平。我想知道我是否不用发送NULL指令然后在下个数据帧读取就可以了呢?还是说DIN也和DOUT一样需要进行常态的上拉,谢谢!
,
Amy Luo:
建议您先发送一个NULL命令,读取响应以确保ADC已准备好接受解锁命令。
DIN不用接上拉,DIN受spi从机控制。因为您使用 同步主机模式,DIN也就是受MCU/控制器控制。
,
xzq:
按照我的理解,因为时钟信号是持续输出的,如果模块一直在读取DIN上的数据,而DIN本身为低电平,那么相当于每次读取我都是发的NULL命令?如果不是,那么NULL命令(全0)应该怎么发送呢?还是说同步主机模式下我需要在特定的时刻发送指令呢?我在手册上没有找到相关的说明,期待你的回复,谢谢!
,
xzq:
这是我目前观察到的波形,图一是DOUT上的0xFF04就绪信号,图二是我发送的0x0655解锁指令,可以看到发送解锁指令后没有观察到返回
,
Amy Luo:
xzq said:按照我的理解,因为时钟信号是持续输出的,如果模块一直在读取DIN上的数据,而DIN本身为低电平,那么相当于每次读取我都是发的NULL命令?
发送命令需要一帧一帧的,一帧的开始是拉低CS信号,拉高CS信号后结束这一帧。因此您这里是否按照一帧的SCLK周期数拉低和拉高CS信号?
发送0x0655解锁指令时,您可以附上完整的SPI时序图吗,包括CS、SCLK、DIN和DOUT信号,这样才能看出一帧的命令和响应。
,
xzq:
按照手册的说明,同步主机模式下似乎没有使用CS信号?如图63所示,我将ads模块的cs与done连接,然后单片机使用软件cs并内部持续拉低进行持续的spi通信。DRDY引脚使用另一个单独的GPIO引脚作为中断输入,但是在初始化过程中我没有使能这个中断。按照您的回复和手册的连接方式,是不是表示只有在DRDY拉低的时间内进行通信才是有效的呢?上面的图片中展示的是DIN和DOUT信号,因为测试中发现在SCLK上使用示波器会在DIN引入严重的串扰,所有没有接。但是模块的ICLK使用2M时钟,经实际测量DIN和DOUT时序上没有问题,同时我已经可以正确读取到FF04的就位信号,但是发出的指令没有返回。
,
xzq:
我观察了CS(DRDY)的波形,他确实是只包含一个二十四位的数据帧,因此我修改了代码并在这个数据帧内进行指令的发送,但是仍然没有收到正常的回复。下图是我最后一次发送解锁寄存器指令的数据帧
,
Amy Luo:
xzq said:按照您的回复和手册的连接方式,是不是表示只有在DRDY拉低的时间内进行通信才是有效的呢?
是的,DRDY是ADC的输出,您需要检测DRDY的状态,在DRDY变低电平时才可以通信。
,
Amy Luo:
对了,您程序上读到FF04信号了吗?如果没有检查下主控端和ADC SPI通信电平是否兼容:
另外,上述波形是否有DRDY信号?检测到 DRDY信号低电平后一帧的通信就开始了,所以在DRDY低电平后就要发送0x065500(刚开始默认是24bit一帧),所以需要发送24bit数据。
您需要附上完整的时序图,包括DRDY、SCLK、DIN、DOUT。
,
xzq:
FF04信号在程序中被读取为00FF,不知道您是否知道原因。这张图包含DIN、DOUT和SCLK,发送内容为解锁寄存器065500,DRDY与图示中的FF0400(24bit)同步,由于屏幕大小的限制没有启用显示。我在下一个数据帧仍然收到的是FF04的信号,因此实际还是没有通信成功。
,
xzq:
您好!
我发现问题来源于示波器的连接导致解锁失败,目前我已经能够实现adc正常的通信并且收到了数据,感谢您之前的耐心回复。但是我测试时发现了一个新的问题,在同步主机模式下似乎无法跑满128k的采样速率。
模块产生的spi时钟fICLK最大只有8.192M,而在128k的采样速率下每个数据帧为120位,实际需要128k*120=15.36M的spi时钟。实际测试下实现了85.333k的采样速率,128k下会报spi错误。
,
Amy Luo:
xzq said:
实际测试下实现了85.333k的采样速率,128k下会报spi错误。
不明白您这里的描述,在同步主机模式下,SCLK是ADC产生输出的,它是由输入频率 fCLKIN 通过配置寄存器CLK1产生的。
fICLK确定了,或者说SCLK频率确定了,通过配置CLK2寄存器 ADC output data rate也就确定了。
您输入的 fCLKIN 频率是多少?CLK1寄存器您配置的是什么?
,
xzq:
使用16.384MHz的晶振,CLK1配置为0X02,fICLK为8.192MHz,也就是SPI的频率。CLK2配置为0X2E,fMOD为4.096MHz,fData为4.096MHz/32 = 128kHz。但是在四通道全部启用的情况下,一个完整的数据帧有120bit,所需的spi通信速率为128kHz*120 = 15.36MHz,这远大于了fICLK的值。
,
Amy Luo:
哦哦,明白了,是的在同步主机模式下,SCLK的频率最大是fCLKIN / 2,因此,如果您同时启用四个通道,那么SCLK速率不够。在128KSPS速率下,您只能启用一个ADC通道。
或者使用24.576MHZ的时钟输入,SCLK为12.288MHZ,128KSPS的速率可以同时启用3通道ADC。