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.

[参考译文] ADC09DJ1300:ADC09DJ1300

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1109729/adc09dj1300-adc09dj1300

器件型号:ADC09DJ1300
主题中讨论的其他器件:ADC09QJ1300

大家好 、

 我们的客户之一提出的问题:

 ADC09QJ1300测试数据

@JMODE2四通道1GHz

CH1序列正确、但缺少数字、仅为0~31、不是0~255;CH2~CH4零件数据位置发生更改。

JESD204B   phy 配置

  JESD204B 配置

  1.  FPGA 项目

返回页首

系统

clk_wiz_inst0

5. 硬件拓扑图

 ADC JESD 配置代码

#include "xparameters.h"

#include "xspi.h"  /* SPI 设备驱动程序*/

#include "xstatus.h"

#include "stdio.h"

#include "xgpipops.h"

 

XSpi SpiInstance;  

 

U8 ADC_REG[50][3]=

//0

{0x00、0x00、0xb0}、//重置

{0x00、0x02、0x00}、//nomal /powerdown 00 03

{0x80、0x0c、0x00}、//vender_ID 2字节

{0x82、0x70、0x00}、//vender_ID 2byte

//4.

{0x00、0x29、0xec}、//CLK_CTRL0~2.

{0x00、0x2a、0x00}、//SYSREF_inverted

{0x00、0x2b、0x15}、

//7.

{0x00、0x30、0x00}、//FS_RANGE L

{0x00、0x31、0xa0}、//fs_range H

//9.

{0x00、0x3D、0x05}、//CPLL_FBIV1

{0x00、0x3E、0x14}、//CPLL_FBIV2

{0x00、0x3f、0x4a}、//CPLL_VCOCTRL1

//12.

{0x00、0x57、0x82}、//TRIGOUT_CTRL

{0x00、0x58、0x83}、//CPLL_OVR

//14.

{0x80、0x59、0x00}、//VCO_FREQ_TRIM 读取

//15.

{0x00、0x5c、0x00}、//CPLL_RESET

{0x00、0x5d、0x41}、//VCO_CAL_CTRL

{0x80、0x5e、0x00}、//VCO_CAL_STATUS

//18

{0x00、0x61、0x01}、//CAL_EN

{0x00、0x62、0x0a}、/CAL_CFG0背景

{0x00、0x65、0x05}、//CAL_CFG1 OSREF 直流耦合

/21.

{0x80、0x6A、0x00}、//CAL_STATUS

{0x00、0x6b、0x00}、//CAL_PIN_CFG CAL_SOFT_TRIG

{0x00、0x6c、0x01}、/CAL_SOFT_TRIG

/24.

{0x02、0x00、0x01}、//JESD_EN

{0x02、0x01、0x02}、//JMODE

{0x02、0x02、0x1f}、//KM1

/27号文件

{0x02、0x04、0x00}、//单扰码器

{0x82、0x08、0x00}、//JESD_STATUS

/29.

{0x82、0x70、0x00}、//init_status

//30

{0x02、0x03、0x01}、//JCTRL

{0x02、0x05、0x00}、//test 15:时钟测试模式(0x00FF)

{0x02、0x07、0x02}、//mode k28.5

//33.

{0x02、0x08、0x03}、//单模式

{0x00、0x48、0x00}、//SER_PE

 

//35.

{0x00、0x37、0x46}、//LP1

{0x02、0x9a、0x06}、//LP1

{0x02、0x9b、0x00}、//LP1

{0x02、0x9C、0x14}、//LP1

 

//39.

{0x00、0x3c、0x00}、// PLLREFO_CTRL

 

};

 

XGpioPs GPIO;/* GPIO 设备的驱动程序实例。 *

#define GPIO_PIN_0 78

#define GPIO_PIN_1 79

 

 

 

U8 SPI_sendbuf[8]={0x00、0x00、0xb0};

U8 SPI_recvbuf[8]={0、};

 

空 InitADC (空)

XSpi       * SpiInstancePtr = SpiInstance;

XSpi_Config *配置 Ptr;

INT 状态;

 

ConfigPtr = XSpi_LookupConfig (XPAR_SPI_0_DEVICE_ID);

if (ConfigPtr = NULL){

返回 XST_FAILURE;

 

状态= XSpi_CfgInitialize (SpiInstancePtr、ConfigPtr、

ConfigPtr -> BaseAddress);

if (Status!= XST_SUCCESS){

返回 XST_FAILURE;

 

状态= XSpi_SetOptions (SpiInstancePtr、 XSP_MASTER_OPTION);

if (Status!= XST_SUCCESS){

返回 XST_FAILURE;

 

/*

*启动 SPI 驱动程序、以便启用器件。

*

XSpi_Start (SpiInstancePtr);

XSpi_IntraGlobalDisable (SpiInstancePtr);

 

 

//step1 SOFT_RESET READ nIT_STATUS Vendor_ID

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[0]、SPI_recvbuf、3);

usleep(5000);

 

SPI_recvbuf[2]= 0;

while (SPI_recvbuf[2]!= 0x01)

       XSpi_SetSlaveSelect (SpiInstance、0x01);

       XSpi_Transfer (SpiInstance、&ADC_REG[3]、SPI_recvbuf、3);

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[2]、SPI_recvbuf、4);

 

if ((SPI_recvbuf[2]!= 0x51)|(SPI_recvbuf[3]!= 0x04)

 

 xIL_printf ("读取 ADC ID 错误!\n\n"\});

 返回;

 

//STEP2对 C-PLL 进行编程

ADC_REG[15][2]= 0x01;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[15]、SPI_recvbuf、3);//CPLL_RESET

usleep(5000);

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[11]、SPI_recvbuf、3);// VCO_BIAS

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[9]、SPI_recvbuf、3);//PLL_P_DIV、PLL_V_DIV 和 PLL_N_DIV

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[10]、SPI_recvbuf、3);//PLL_P_DIV、PLL_V_DIV 和 PLL_N_DIV

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[16]、SPI_recvbuf、3);// VCO_CAL_EN

usleep(5000);

 

ADC_REG[15][2]= 0x00;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[15]、SPI_recvbuf、3);//启用 CPLL

 

//STEP3停止 JESD204校准

ADC_REG[24][2]= 0x00;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[24]、SPI_recvbuf、3);//JESD_EN = 0

 

ADC_REG[18][2]= 0x00;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[18]、SPI_recvbuf、3);///CAL_EN = 0

 

 

 

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[39]、SPI_recvbuf、3);// PLLREFO_CTRL

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[34]、SPI_recvbuf、3);// SER_PE

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[35]、SPI_recvbuf、3);//LP1

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[36]、SPI_recvbuf、3);//LP2

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[37]、SPI_recvbuf、3);//LP3

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[38]、SPI_recvbuf、3);//LP4

 

//setp4 JMODE KM1

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[25]、SPI_recvbuf、3);//JMODE

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[31]、SPI_recvbuf、3);//test

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[32]、SPI_recvbuf、3);//k28.5

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[26]、SPI_recvbuf、3);//KM1

 

//setp5 SYNC_SEL SYSREF

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[27]、SPI_recvbuf、3);//SYNCSE

 

ADC_REG[4][2]= 0xa0;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[4]、SPI_recvbuf、3);

//CLK_CTRL0//SYSREF_RECV_EN

 

usleep(1);

 

ADC_REG[4][2]= 0xe0;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[4]、SPI_recvbuf、3);

//CLK_CTRL0//SYSREF_PROC_EN

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[5]、SPI_recvbuf、3);//CLK_CTRL1

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[6]、SPI_recvbuf、3);//CLK_CTRL2

 

//step6前台或后台校准模式和偏移

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[19]、SPI_recvbuf、3);// CAL_CFG0背景

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[20]、SPI_recvbuf、3);// CAL_CFG1直流耦合

 

//STEP7 TRIGOUT_CTRL

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[12]、SPI_recvbuf、3);

 

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[35]、SPI_recvbuf、3);

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[36]、SPI_recvbuf、3);

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[37]、SPI_recvbuf、3);

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[38]、SPI_recvbuf、3);

 

 

 

//     MB_SLEEP (5);

//STEP8读取 VCO_CAL_DONE CPLL_LOCKED

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[17]、SPI_recvbuf、3);

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[27]、SPI_recvbuf、3);

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[28]、SPI_recvbuf、3);

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[31]、SPI_recvbuf、3);

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[32]、SPI_recvbuf、3);

//

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[33]、SPI_recvbuf、3);

 

//STEP9 CAL_EN JESD_EN

ADC_REG[18][2]= 0x01;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[18]、SPI_recvbuf、3);///CAL_EN = 1

 

//     mb_sleep (10);

 

ADC_REG[24][2]= 0x01;

XSpi_SetSlaveSelect (SpiInstance、0x01);

XSpi_Transfer (SpiInstance、&ADC_REG[24]、SPI_recvbuf、3);//JESD_EN = 1

 

 

//step10触发前台校准

//     ADC_REG[23][2]= 0;

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[23]、SPI_recvbuf、3);

//

//     MB_SLEEP (1);

//

//     ADC_REG[23][2]= 1;

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[23]、SPI_recvbuf、3);

//     MB_SLEEP (1);

 

//     睡眠(5);

//     XSpi_SetSlaveSelect (SpiInstance、0x01);

//     XSpi_Transfer (&SpiInstance、&ADC_REG[21]、SPI_recvbuf、3);

 

//     XGpio_SetDataDirection (&GPIO1、Channel1、WRITE8);

//     XGpio_DiscerteWrite (&GPIO1、Channel1、0x01);

//     XGpio_DiscerteWrite (&GPIO1、Channel1、0x00);

 

 

/********* /

/**

*

*主函数。

*

*@param 无

*

*@返回 XST_FAILURE。

*

*@注意  无限循环、因此返回失败!

*

秘书长的报告 /

 

//XPAR_JESD204_PHY_0_BASEADDR

//XPAR_JESD204_0_BASEADDR

 

int main (空)

INT 状态;

XGpioPs_Config *配置 Ptr;

 

/*初始化 GPIO 驱动程序。 *

ConfigPtr = XGpioPs_LookupConfig (XPAR_XGPOPS_0_DEVICE_ID);

状态= XGpioPs_CfgInitialize (&GPIO、ConfigPtr、

                            ConfigPtr->BaseAddr);

if (Status!= XST_SUCCESS){

       返回 XST_FAILURE;

 

 

InitADC();//star ADC clk

 

睡眠(2);

 

XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x604、0x0F);//RXPOLARITY

XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x420、1);//TX 复位 phy

XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x424、1);//复位 phy

usleep(1000);

XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x424、0);//复位 phy

usleep(1000);

 

XIL_Out32 (XPAR_JESD204_0_BASEADDR + 0x004、2);//复位

usleep(1000);

XIL_Out32 (XPAR_JESD204_0_BASEADDR + 0x004、0);//复位

 

 

usleep (100000);

 

//sysref_en

XGpioPs_SetOutputEnablePin (&GPIO、GPIO_PIN_1、1);

XGpioPs_SetDirectionPin (&GPIO、GPIO_PIN_1、1);

XGpioPs_WritePin (&GPIO、GPIO_PIN_1、1);

usleep(40);

XGpioPs_WritePin (&GPIO、GPIO_PIN_1、0);

 

usleep(10);

 

 返回0;

此致、

罗美

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

    您好、Amy、

    您能否确保客户正在执行以下寄存器写入操作以正确设置 ADC。  

    此致、

    Neeraj

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

    Neeraj、您好!  

    感谢您的回答。

    客户反馈:

    这些寄存器以正确的方式进行检查和配置。

    另找到寄存器0x29 CLK_CTRL0时钟控制0 (默认值:0x80)该寄存器配置为0xf0~0xff、仍然产生与屏幕截图1相同的输出。

    此致、

    Amy  

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

    很抱歉推送、这里有更新吗?

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

    您好、Amy、

    我将等待 Neeraj 对 ADC 寄存器设置做出响应、但我对 Xilinx JESD IP 有疑问。 是否有任何错误标志处于活动状态? 我不确定数据为何会在 CH2-CH4上重新排序。 ILAS 序列在所有通道上是否看起来都正确? 此外、是否需要如此高的插入损耗设置? 我不确定他们的硬件设置、但大多数具有短控制路由的电路板应该可以使用6-8dB 的值。

    我相信斜坡测试模式将在每个多帧边界上复位。 在这种情况下、多帧为32字节、因此它会复位为0x1F。 请尝试 K 设置为64 (或 Km1设置为63)的测试。 这可能表明斜坡上升到0x3F。 我还将与 ADC 设计团队确认这种行为。

    此致、

    阿迈德

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

    您好、Amy、  

    对于寄存器地址0x29、您提到它会产生与屏幕截图1相同的输出。 您能告诉我什么是屏幕截图1吗? 将寄存器0x29设置为0xF0可启用 SYSREF 处理、启用 sysref 接收器、还可启用 sysref 缩放功能。 寄存器0x29的位3:0应在读取 sysref 窗口位置后进行编程。 请阅读数据表 www.ti.com/.../adc12qj1600-q1.pdf 中的以下段落 、了解如何对 sysref_SEL 进行编程。

    9.3.4.4.2 SYSREF 位置检测器和采样位置选择(SYSREF 窗口)

    此致、

    Neeraj