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.

[参考译文] ADS9219:ADS9219 DCLK 频率公式

Guru**** 2917090 points

Other Parts Discussed in Thread: ADS9219, ADS9218

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1639398/ads9219-ads9219-dclk-frequency-formula

器件型号: ADS9219
主题: ADS9218 中讨论的其他器件

亲爱的

对于 24 位双路 DDR 模式下的 ADS9219:

  1. 此配置是否支持 OSR 数据平均? 表 7-3 和表 7-4 建议为是、但表 7-4 要求 CLK3 (0xC5[9])= 1、而当 DATA_LANES = 2 时、器件似乎强制 CLK3 = 0。 寄存器 0xC5 值 I WRITE 为 0x0220 (CLK3=1、RD_CLK=1)、但回读为 0x0020 (CLK3=0、RD_CLK=1)。
  2. 如果双通道 DDR 支持 OSR、那么正确的寄存器编程序列和 CLK3 值是多少?
  3. 考虑到 OSR=4、SMPL_CLK 频率 = 8MHz、24 位帧和 DDR 模式、我期望 f_DCLK=2ADC 输入 24 位帧 f_SMPL_CLK/(2 个通道 * 2(DDR 模式)* 4 (OSR=4))24MHz这是正确的吗? 在实践中、尽管多次重写了初始化功能并验证了寄存器的关键值是否已被读取为已写入(0xC5 除外、其中位 CLK3 看起来被强制为零)、但我看到 12MHz 的频率仍然为 8x“DCLK=DCLK“ 96MHz!  大概没有考虑 OSR 值。  
  4. 这是我的完整初始化功能。 如果您找到 problems.ADS9219_Init.txt、请告知您 

感谢您对此问题的支持!

此致、

Cristian

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

    您好 Cristian、  

    是的、 ADS9219 在 24 位双通道 DDR 模式下确实支持 ORS = 4

    此配置是否支持 OSR 数据平均? 表 7-3 和表 7-4 建议为是、但表 7-4 要求 CLK3 (0xC5[9])= 1、而当 DATA_LANES = 2 时、器件似乎强制 CLK3 = 0。 I WRITE 的寄存器 0xC5 值为 0x0220 (CLK3=1、RD_CLK=1)、但回读为 0x0020 (CLK3=0、RD_CLK=1)。

    对于 ADS9219 和 ADS9218、CLK3 固定为 0、它使用 CLK5。 因此、在 OSR 初始化序列中可以忽略它、其他一切都可以在该序列中保持不变。

    考虑到 OSR=4、SMPL_CLK 频率 = 8MHz、24 位帧和 DDR 模式、我期望 f_DCLK=2ADC 输入 24 位帧 f_SMPL_CLK/(2 个通道 * 2(DDR 模式)* 4 (OSR=4))24MHz这是正确的吗? 在实践中、尽管多次重写了初始化功能并验证了寄存器的关键值是否已被读取为已写入(0xC5 除外、其中位 CLK3 看起来被强制为零)、但我看到 12MHz 的频率仍然为 8x“DCLK=DCLK“ 96MHz!  大概没有考虑 OSR 值。  [/报价]

    这应该是正确的、应该是公式 4 中的 DCLK 速度除以 OSR。  

    感谢您分享初始化序列共享,它看起来很棒,唯一的建议是:  

    • 与 OSR_EN 类似、能否在结束之前避免设置 OSR?
    • 跳过设置 CLK3(CLK5 也将在 2 个通道中保持为 0,因此也无需写入该位)

    此致、  

    Yolanda

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Yolanda:
         感谢您提供的信息。 我已经应用了您的建议(不是写入 CLK3、将 OSR 推迟到最后,等等)。 运气不好!  我现在可以在电路板上确认以下器件行为:
    1. DCLK = 96MHz(恒定)(SMPL_CLK = 8MHz 时)、24 位双通道 DDR、与 OSR 设置无关。
    2. FCLK = 2MHz、OSR=4 启用、即 SMPL_CLK / OSR = 8/4 = 2MHz。 这证实 OSR=4 确实参与了均值滤波器。
    3. FCLK = 8MHz、OSR 被禁用、即 DCLK / 12 = 96/12、如图 6-1 所示。
    因此在 24 位双通道 DDR 模式下、DCLK 不会以 OSR 减慢。 相反、FCLK 速率从 (SMPL_CLK× 1) 下降到 (SMPL_CLK / OSR)。
    这与“DCLK =公式 4 / OSR“公式相矛盾。 您能否澄清一下:
    • 在双通道 DDR 模式下、这是预期/指定的器件行为吗?
    • 在单通道 DDR 模式(必须进行均值计算)下、DCLK 是否会减慢 OSR?
    • 是否应该更新数据表以阐明在 2 通道模式下、OSR 会降低 FCLK(而不是 DCLK)、在  有效帧之间的 DOUTA/DOUTB 上可能具有无效数据?
    数据表中的其他令人费解的矛盾之处:
    - ADS919 初始化过程。 根据“表 7-13. 仅适用于 ADS9219的初始化配置“、 在步骤 1 中、建议设置值 0x3 的寄存器 0x0D[9:8]位[15:0]。 由于所有位[15:0]都是相关的、根据我的理解、这相当于设置整个寄存器 0x0D = 0x300。 但图 8-14 所示。 明确提到同一寄存器的位 1-0 是保留的、应保留为 0x2。
    - ADS919 初始化过程。 根据“表 7-13. 仅 ADS9219的初始化配置“、 在步骤 2 中、建议将寄存器 0x34[1]设置为 0x1。 但根据第 8.2.12 段、寄存器 34h(偏移= 34h)、位 1 被保留、不应修改。
    那么、一个应该遵循表 7-13 还是不遵循表 7-13?
    -寄存器 0x34 说明。  根据图 8-35、寄存器的位 8 被保留、复位后、其读数应为“0“。 实际上、复位后它读数为“1“。 这意味着、当写入 LAT_EN(位 4)时、将其他位根据数据表建议保持为零、也不愿意修改保留位值。 这是不是不重要的?
    -寄存器 0x34 说明。 关于 LAT_EN 位、数据表建议:“对于 ADS9219、请将该字段设置为 11b 以获得出色的 INL 性能。那么、应该修改一个或多个位吗?
    -寄存器 0xC0 说明。 根据图 8-42、应根据表 7-4 设置 0xC0 寄存器中的位 9-7。 对于 OSR=4、根据此表、0xC0[9:7]=4(位 9 = 1)。 但根据表 7-6、对于 4 倍抽取率、 0xC0[9:7]= 0。 我同意这可能不是相同的功能,但,考虑到上下文,它是有趣的。 对于 OSR=4、哪个值正确?
     我还同意、可能所有这些不匹配都与我的主要问题无关:DCLK 频率高于预期、并且单通道功能可能存在不一致。 但这会增加不确定性。  
         为了最大限度地简化、我通过注释掉已经具有与 OSR=4 兼容的值的寄存器的所有初始化、重新考虑了初始化过程。 在实践中、只有少数寄存器需要初始化。 这是我的第二个初始化代码。 没有运气也有 DCLK!
    您是否有一些 OSR = 2 或 4 或更多的测试 SPI 初始化过程?
    感谢您的支持!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Yolanda、

    除了我前面的消息外、我今天还使用一个新的 ADS9219 芯片进行了测试、OSR=8(2 个通道、也 1 个通道)。 始终处于 DDR 模式

    OSR 的新值旨在消除 OSR=4 的可能奇点。 有关不同的 ADS9219 芯片的想法也是一样。

    在 2 通道模式下、SMPL_CLK=DDR 8MHz 且 OSR=8、在 DDR 模式下、我看到1MHz96MHz! (适用于两个芯片)

    在单通道模式下、SMPL_CLK=DDR 且 OSR=8、在 8MHz 模式下、我看到 FCLK=2* SMPL_CLK/OSR=DDR2MHz 、这与 1 通道配置一致。 但是、时钟保持在 96MHz。 这是令人费解的,因为我期待在 24MHz 时钟,或在 192MHz ! !!

    OSR=8、2 个通道的特定初始化

    //等待 30ms 以唤醒芯片

    USleep(30000);
    //强制复位以强制执行寄存器的默认值
    ads9219_SPI_WRITE(0x000x0005);

    //等待 30ms 以唤醒芯片

    USleep(30000);
    //启用旧 SPI
    ads9219_SPI_WRITE(0x000x0004);
    // OSR=8 具体信息
    ads9219_SPI_WRITE(0xC00x0680);
    ads9219_SPI_WRITE(0xC40x0022);
    ads9219_SPI_WRITE(0xC50x0020);
    ads9219_SPI_WRITE(0x0D0x23CA);//在末尾启用 OSR  
    /************************************************************************************ /
    /***** OSR= 8、1 车道的具体情况 ********************************************* /
    ads9219_SPI_WRITE(0xC00x0680);//与之前相同、OSR=8
    ads9219_SPI_WRITE(0xC40x0022); //与之前相同、OSR=8
    ads9219_SPI_WRITE(0xC50x0020); //与之前相同、OSR=8
    ads9219_SPI_WRITE(0xFB0x002);//选择一个通道
    //指向气缸组 2
    ads9219_SPI_WRITE(0x030x0010);
    //在组 2 中初始化寄存器 1C
    ads9219_SPI_WRITE(0x1C、0x0C0 );
    //再次指向气缸组 1
     ads9219_SPI_WRITE(0x030x0002);
    //最终初始化
     ADS9219_SPI_WRITE(0x0D0x23CA);
       这些 操作很容易被您或您的团队中的某人重现、以确认报告的行为!
       某些背景: 我们的应用具有非常嘈杂的环境(EMI 扰动)。 我很高兴可以增加 OSR 参数、从而降低 DCLK 频率(更好的电气噪声抗扰度)、同时保持接近 20Msamples/s 的高采样率
       DCLK 频率没有随着 OSR 的增加而降低这一事实是一个相当大的问题。 我只是希望我做错了什么!
       期待您的支持!
        此致、
        Cristian
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Yolanda、您好的团队、

    又是我了...

    您能否重现 ADS9219 初始化问题?  

    您是否对该主题有任何更新?

    感谢您的支持!

    此致、

    Cristian

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

    您好 Cristian、  

    对延迟深表歉意。  

    我一直在研究这一点、我能够使 OSR4 正常工作、我的寄存器写入如下  

    ADC 复位

    设置 RESET[0]= 1

    延迟 25ms  

    设置 RESET[0]= 0

    启用 SPI 模式、SPI_MODE[2]= 1

    启用组 1:(0x03、0x0002)

    #ADS9219 初始化

    writeReg (0x0D、0x0300)

    writeReg (0x34、0x0010)

    #SET 寄存器 0x0D
    # data_format [13]= 1b -> 2s 补偿
    # LAT_INC [9:8]= 11b(应尝试 01b)
    # GE_CAL_EN1 [7]= 1
    # OSR_EN [6]= 0 -->将稍后启用
    # OSR [5:2]= 0 -->将在稍后启用;OSR 4 = 1、OSR 8 = 2、OSR 16 = 3
    #保留[1:0]= 0x2
    #
    # 0x0D = 0x2382
    writeReg (0x0D、0x2382)

    设置 LAT_EN
    #DeviceEVM.writeReg (0x34、0x0010)
    设置 GE_CAL_EN2&3
    DEVICE.writeReg (0x33、0x2040)

    OSR = 4 时为#Init
    DeviceEVM.writeReg (0xC0、0x0600)#OSR_init1 [11:10]= 1;OSR_CLK [9:7]= 100b
    DeviceEVM.writeReg (0xC4、0x0022)#OSR_INIT2 [5:4]= 2;OSR_INIT3[1]= 1
    DeviceEVM.writeReg (0xC5、0x0020)#OSR_RD [6:5]= 1
    DeviceEVM.writeReg (0x0D、0x23C6)#OSR_EN [6]= 1;OSR [5:2]= 1

    此致、  

    Yolanda

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

    你好、Yolanda、

    感谢您的反馈。 我已经尝试了您发送给我的初始化代码 (OSR=4)。

    我的配置的简短剩余部分: DDR 模式、2 个通道、SMPL_CLK=DDR 8MHz。  

    运行您提供的初始化代码后、我会看到 FCLK = SMPL_CLK/OSR = DCLK/4=2MHz 但是 8MHz 会保持在 96MHz、就像 OSR=1!!! 96MHz 频率的预期值为 DCLK/OSR=DCLK24MHz

    那么 Yolanda、您能否确认、在您的设置中 、DCLK 频率会降低 OSR 值? 具体而言、如果您设置 OSR=1、将获得比设置 OSR=4 高 4 倍的 DCLK 频率?

    最后、如果 DCLK 频率无论 OSR 值如何都保持恒定、则应该如何解释数据? 是否应该采用 DCLK 的前 24 个边沿来对数据进行采样(在 FCLK 上升沿之后)?

    下面是 考虑您反馈的初始化代码:

    int ads9219_init_v5(void)
      uint16_t 回读;

      /*------------------------------------------------------------------------------------
       第 1 步. 上电延迟
       *     TPU = 25ms(开关特性,表 6-6)
       *     我们等待 30ms 来获取裕度。
       *-------------------------------------------------------------------------------- */
      USleep(30000); 

      /*------------------------------------------------------------------------------------
       第 2 步. 通过寄存器 0x00 进行软复位(组 0,始终可访问)
       *     图 8-2/图 8-3.
       *      位[2] SPI_MODE = 1 (传统,单器件)
       *      位[1] SPI_RD_EN = 0 (仅写入)
       *      位[0]复位  = 1 (复位所有寄存器)
       *     写入的值:0x0005
       *     然后再次 WAIT > TPU = 25ms。
       *-------------------------------------------------------------------------------- */
      ads9219_SPI_WRITE(0x000x0005);
      
      uSleep(30000);  //再次等待 30ms 以唤醒器件

      /*------------------------------------------------------------------------------------
       *步骤 3 为所有后续访问启用传统 SPI 模式
       *     写入 0x00 = 0x0004:
       *      位[2] SPI_MODE = 1 (旧模式,读取时需要)
       *      位[1] SPI_RD_EN = 0 (仅写入)
       *      位[0]复位  = 0
       *-------------------------------------------------------------------------------- */
      ads9219_SPI_WRITE(0x000x0004);

      /*启用组 1:(0x03、0x0002)*/
      ads9219_SPI_WRITE(0x030x0002);

      /* ADS9219 初始化*/
      ads9219_SPI_WRITE(0x0D0x0300);

      ads9219_SPI_WRITE(0x340x0010);

      /*设置寄存器 0x0D
      # data_format [13]= 1b -> 2s 补偿
      # LAT_INC [9:8]= 11b(应尝试 01b)
      # GE_CAL_EN1 [7]= 1
      # OSR_EN [6]= 0 -->将稍后启用
      # OSR [5:2]= 0 -->将在稍后启用;OSR 4 = 1、OSR 8 = 2、OSR 16 = 3
      #保留[1:0]= 0x2
      #
      # 0x0D = 0x2382
      writeReg (0x0D、0x2382)*/
      ads9219_SPI_WRITE(0x0D0x2382);


      /*#设置 LAT_EN
      #DeviceEVM.writeReg (0x34、0x0010)
      设置 GE_CAL_EN2&3
      DeviceEVM.writeReg (0x33、0x2040)*/
      ads9219_SPI_WRITE(0x330x2040);

      ads9219_SPI_WRITE(0xC00x0600); //#OSR_INIT1 [11:10]= 1;OSR_CLK [9:7]= 100b

      ads9219_SPI_WRITE(0xC40x0022); //#OSR_INIT2 [5:4]= 2;OSR_INIT3[1]= 1

      ads9219_SPI_WRITE(0xC50x0020); //#OSR_RD [6:5]= 1

      ads9219_SPI_WRITE(0x0D0x教会 6); //OSR_EN [6]= 1;OSR [5:2]= 1


      uSleep(30000);//等待 30ms、确保考虑所有设置。
       //在以前的代码变体中、我还读取了写入的寄存器值以确认写入、但我消除了读取、希望获得 DCLK 频率的一些//更改。 运气差。

      返回 XST_Success;
    }

    感谢你的帮助。

    此致、

    Cristian  

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

    尊敬的 Yolanda、您好 TI 团队!

    当 OSR 与 1 不同时、您是否有关于 DCLK 频率的任何更新?

    请注意、 从该主题的开头开始、与 OSR 值相关的 DCLK 计算公式就是我的问题

    我们仍在等待答案!

    此致、

    Cristian