AD4630 使用SPI模式FPGA控制

一、SPI信号引脚概述


*

多通道SPI模式

(1)CS(输入)。芯片的选择。CS必须设置为低,以启动和启用数据传输到或从ADC的SDI引脚或SDOx引脚。CS读取样本数据的时间可以通过观察BUSY引脚的状态来调节。对于回显时钟模式和主机时钟模式,CS时序必须由主机处理器控制,因为BUSY引脚用于这些时钟模式的位时钟输出。
(2)SDI(输入)。串行数据输入流从主控制器到ADC。SDI仅在将数据写入AD4630-24/AD4632-24的一个用户寄存器时使用。
(3)CNV(输入)。CNV信号由主控制器设置并启动采样转换。CNV信号的频率决定了AD4630-24/AD4632-24的采样率。CNV时钟的最大频率为2Msps。
(4)SCK(输入)。串行数据时钟源SCK来自主机控制器。输出数据传输支持的最大SCK速率为100Mhz。当使用寄存器读写模式时:
1)当VIO > 1.71 V时,最大SCK速率为86 MHz;
2)当VIO < 1.71 V时,最大SCK速率为81 MHz。
(5)SDO0 ~ SDO7(输出)。数据输出至主控制器的通道。SDO0至SDO3通道分配给ADC通道0,而SDO4至SDO7通道分配给ADC通道1。为每个通道配置的数据通道数量可以是1、2或4个通道。数据通道的数量可在模式寄存器中配置。请注意,所选的数据通道数适用于两个ADC通道。通道不能单独配置。
(6)BUSY/SCKOUT(输出)。BUSY/SCKOUT引脚的行为取决于所选的时钟模式。

二、寄存器配置

2.1配置方法

AD4630上电时处于转换模式,所以要访问用户寄存器主机控制器必须通过SPI发送一个特殊的访问命令,如下图所示:
在这里插入图片描述
*

进入寄存器配置模式

当此寄存器访问命令通过SPI发送时,设备进入寄存器配置模式。要从寄存器部分中列出的一个用户寄存器中获取回读值,主机控制器必须发送如下图所示的时序模式。
在这里插入图片描述
*

寄存器读取模式

要向其中一个用户寄存器写入,主机控制器必须发送如下图所示的时序模式。

在这里插入图片描述
*

寄存器写入模式

在任何一种情况下(读/写),主控制器必须始终在SCK线上发出24个时钟脉冲,并在整个过程中将CS拉低。
在写入或读取适当的用户寄存器之后,主机控制器必须通过将0x01写入寄存器地址0x0014来退出寄存器配置模式。寄存器读/写访问的方法如下:
1)从伪寄存器地址0x3FFF执行一次回读,以进入寄存器配置模式(文字描述与图片不一致,实际使用时应该写入0XBFFF)。
2)从所需要操作的寄存器地址开始回读或写入。
3)将0x01写入寄存器地址0x0014,退出寄存器配置模式。退出寄存器配置模式会导致寄存器更新生效。

2.2配置代码

(1)进入寄存器配置模式的代码如下:
在这里插入图片描述
在这里插入图片描述
其中:
parameter reg_conf_mode = 16’hbfff;//表示进入寄存器配置模式,因为根据寄存器配置模式示意图,地址前三位必须为101,所以需要将0X3fff(0011_1111_1111_1111)首位置1,变成0Xbfff(1011_1111_1111_1111)。
SCLK_OUT<=1;//表示此时输出SCLK
数据上升沿采样,下降沿输出。
(2)进行寄存器写入模式的代码如下:
在这里插入图片描述
其中:
parameter MODES_REGISTER = 24’h002000;
//表示写入寄存器的地址+数据,0x00为地址填充位(因为需要写入,所以最高位要为0),
//然后8位(0x20)是寄存器地址,最后8位是要写入的数据
//此处为模式寄存器,写入的后八位数据表示 one lane per channel,SPI clocking mode. SDR,24-bit differential data。 具体配置请查看下图
SCLK_OUT<=1;//表示此时输出SCLK
数据上升沿采样,下降沿输出。
在这里插入图片描述
在这里插入图片描述
(3)退出寄存器配置模式的代码如下:
在这里插入图片描述
其中:
parameter EXIT_CONFIGURATION_MODE_REGISTER = 24’h001401;//退出配置模式寄存器
SCLK_OUT<=1;//表示此时输出SCLK
数据上升沿采样,下降沿输出。

三、数据采集与传输

3.1采样转换配置方法

采样转换时序和数据传输转换开始于CNV信号的上升沿,如下图所示。转换完成后,判断CS是否被拉低,这将导致当前转换结果加载到输出移位寄存器中。
在这里插入图片描述

*

数据传输区域时序实例

Sample N有两个可选的数据传输区域。区域1(ZONE 1)表示在Sample N转换(在SPI转换模式下)的BUSY信号解除断言之后立即断言CS的用例,或者在300 ns之后的回环和主机时钟模式下断言CS(该报告里面没用到回环模式和主机模式)。
对于区域1,读取样本N的可用时间为:
*

区域1数据读取窗口= t_CYC -t_CONV-t_(QUIET_CNV_ADV)

例如:f_CNV为2MSPS (t_CYC= 500 ns),采用t_CONV的典型值(282 ns),则可用窗宽为198.4 ns (500 ns - 282 ns - 19.6 ns)。
区域2(本报告中未使用)表示CS读取样本N的断言延迟到开始转换样本N + 1之后的情况。为了防止数据损坏,必须在CNV信号的每个上升沿前后观察到一个安静区,如上图所示。紧临CNV上升沿的安静区标记为t_(QUIET_CNV_ADV),等于19.6 ns。紧挨着CNV上升沿的安静区标记为t_(QUIET_CNV_DELAY),等于9.8 ns。假设CS在CNV上升沿周围的安静区之后立即拉高,则可用的时间为:
区域2数据读取窗口= t_CYC -t_(QUIET_CNV_DELAY)-t_(QUIET_CNV_ADV)
例如,f_CNV为2 MSPS (t_CYC= 500 ns),使用t_CONV的典型值(282 ns),则可用的窗宽为470.6 ns (500 ns - 9.8 ns - 19.6 ns)。区域2的传输窗口比区域1的传输窗口长,这可以在SPI上使用较慢的SCK,并减轻接口的时序要求。
当使用区域2进行数据传输时,在安静区域之后立即断言CS。CS必须在样本N+1的BUSY下降沿前至少25ns断言。否则,“样本N”将被“样本N+1”覆盖。

3.2配置SPI时钟模式方法

SPI时钟模式是AD4630-24/ AD4632-24的默认时钟模式,其中主控制器使用自己的时钟锁存输出数据。
SPI兼容的时钟模式是通过将0x00写入模式寄存器的CLK_MD位域(地址为0X20)来启用的。在这种模式下,BUSY信号是有效的,并表示完成了转换(BUSY的高到低转换)。一个简化的示例周期如下图所示。当不处于平均模式时,如果主控制器不使用BUSY信号来检测转换的完成,而是使用内部计时器来检索数据,则主控制器必须在CNV脉冲上升沿后至少等待300ns才能断言CS低。当以平均模式运行时(本报告中未使用),主控制器必须在块中最后一个样本的CNV脉冲上升沿后不早于300ns断言CS低。
在这里插入图片描述

3.3使用SPI模式进行转换与数据传输代码

(1)空闲等待时间:
在这里插入图片描述
其中:
此处使用67个时钟周期来用作延时等待(67并不是准确值,可以自行通过代码或者时序确定得到准确值),用于凑齐100KHz采样率所需的系统周期的时间,即采样频率为100KHz(系统时钟为12.5MHz)。
(2)将CNV信号(启动转换)拉高1个时钟周期(80ns):
在这里插入图片描述
其中:
通过下图可知,CNV最小高电平时间为10ns,所以此处拉低40ns完全足够。
在这里插入图片描述
在这里插入图片描述
(3)等待200ns之后开始判断Busy信号是否被拉低:
在这里插入图片描述
其中:
Busy在CNV被拉高时同时自动被拉高,表示处于转换状态,若Busy信号被拉低,表示转换结束。
(4)Busy拉低后,将CS拉低,然后开始进行数据传输:
在这里插入图片描述
其中:
数据发送时需要先发送高位,然后发送低位。且因为上升沿采样,所以在下降沿发送。时序图如下所示:
在这里插入图片描述

四、全过程状态机

下图是整个采样过程状态机,不包括与上位机通讯串口发送程序
在这里插入图片描述

五、寄存器读取模式

参考2.1节,在需要读取寄存器结果时,需要写入被读取的寄存器的地址,然后获取SDO上的值具体参考如下(这是另一个程序的代码):
在这里插入图片描述
在这里插入图片描述
parameter VENDOR_ID_HIGH_REGISTER_address = 16’h800d;//供应商id高寄存器地址,因为读寄存器时,最高位需要发送1,所以在实际地址0x0D前增加了0x80
下面是AD4630所有寄存器的参数(reg表示地址)
在这里插入图片描述
有关寄存器控制源码可点击该链接
有关寄存器读取源码可点击该链接
均为博主自己所写,由于不太熟练,代码中会有很多的瑕疵,请见谅

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.yhww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值