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.

[参考译文] CC2340R2:32kHz 内部振荡器精度

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1636032/cc2340r2-32khz-internal-oscillator-accuracy

器件型号: CC2340R2

您好、

在了解相关主题后、客户已对 LF 内部振荡器精度进行了一些初步测试。  按照我们的理解、25°C 处的精度应为 500ppm。

他们的结果根本不是那么准确。  对于该测试、FW 选择 LFOSC 并在 DIO12 上输出。  在 25°C 附近、它们的频率约为 32.601kHz、32.970kHz、32.688kHz。  这是千 ppm 偏差。

在较高和较低温度下、它们确实会看到预期的漂移、远低于 600ppm/C

他们的问题是:

  • 您对 25°C 处不准确的程度有何评论?
  • 我怀疑我测量的频率包含任何校正因数。 是否有办法在应用校正因数的情况下测量内部振荡器? 或者以某种方式确定校正因数是什么?

此致、
Luke

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

    您好 Luke、

    我指派了我们的硬件专家来帮助您、他们应该能够尽快为您提供帮助。  

    谢谢、
    Alex F

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

    您好、

    对此有任何更新?

    此致、

    Luke

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

    Luke、

    它们如何测量频率精度? 它们是使用示波器还是频率计? 根据示波器设置的不同、时序可能会不准确。 此外、 硬件配置和 PCB 设计注意事项应用手册中的表 6-1 提到了将 LF 时钟输出路由到 DIO19 — 原则上,我不会看到这是否会影响此测量,但他们可以尝试查看是否有任何变化? 可能有一些隐藏的东西,我们不知道。  

    漂移似乎在 Bun 在另一个线程中提到的规格范围内。 尽管没有提到初始频率、但数据表中讨论的 LFOSC 的校准频率为 32.768kHz、因此它不应该太远。

    此致、

    Rafael

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

    尊敬的 Rafael:

    他们使用示波器 和协议分析器来测量从端口引脚发送的 LFCLK 信号。

     根据我们去年提供的代码片段、以下是他们将 LFCLK 从端口引脚发送出去的代码:

    #define CLOCKOUT_PIN 12U

    //*****************************************************************************
    // FUNCTION NAME: enable_32k_clock_out
    // DESCRIPTION: This function contains the code to enable the 32k clock output.
    //
    // Returns: CLOCKOUT_SUCCESS if successful, CLOCKOUT_FAILED if port pin could not
    //          be to configured to output, low.
    //
    //******** PARAMETERS, GLOBAL, EEPROM, CODECHIP, IO, ETC. *******
    // Name         Type      Usage
    //******************************************************************************
    static uint8_t enable_32k_clock_out(void)
    {
        uint8_t status = CLOCKOUT_SUCCESS;
    
        // drive output low first
        if(GPIO_setConfig(CLOCKOUT_PIN, ((uint32_t)GPIO_CFG_OUTPUT | (uint32_t)GPIO_CFG_OUT_LOW)) != GPIO_STATUS_SUCCESS)
        {
            status = CLOCKOUT_FAILED;
        }
        else
        {
            // Configure the IOC.IOC12.PORTCFG MMR to select DTB
            HWREG((uint32_t)IOC_BASE + IOC_O_IOC12) &= ~IOC_IOC12_PORTCFG_M;  // Clear bit IOC_IOC12_PORTCFG_M
            HWREG((uint32_t)IOC_BASE + IOC_O_IOC12) |= IOC_IOC12_PORTCFG_DTB; // Set bit IOC_IOC12_PORTCFG_DTB
    
            // Make sure the DTB mux selects in IOC (and if required in
            // source clock IP) are reset that zero is driven on DTB0.
            // ULLSEL mux select (select CKMD)
            HWREG((uint32_t)IOC_BASE + IOC_O_DTBCFG) &= ~IOC_DTBCFG_ULLSEL_M;
            HWREG((uint32_t)IOC_BASE + IOC_O_DTBCFG) |= (0x1u << IOC_DTBCFG_ULLSEL_S); // 0x1 to route CKMD to DTB0
    
            // Map DTB[2:0] to DTB[15:13]
            HWREG((uint32_t)IOC_BASE + IOC_O_DTBCFG) &= ~IOC_DTBCFG_PADSEL_M;
            HWREG((uint32_t)IOC_BASE + IOC_O_DTBCFG) |= IOC_DTBCFG_PADSEL_DTB2TO0;
    
            // Enable IOC.DTBOE.EN0
            HWREG((uint32_t)IOC_BASE + IOC_O_DTBOE) &= ~IOC_DTBOE_EN0_M;
            HWREG((uint32_t)IOC_BASE + IOC_O_DTBOE) |= IOC_DTBOE_EN0_ENABLE;
    
            // select which clock (CKMD) to output on DTB0 (DTB[0])
            HWREG((uint32_t)CKMD_BASE + CKMD_O_DTBCTL) &= ~CKMD_DTBCTL_CLKSEL_M;
    
            // Select LFCLK as the clock source
            HWREG((uint32_t)CKMD_BASE + CKMD_O_DTBCTL) |= CKMD_DTBCTL_CLKSEL_LFCLK;
    
            // enable DTB output
            HWREG((uint32_t)CKMD_BASE + CKMD_O_DTBCTL) &= ~CKMD_DTBCTL_EN_M;
            HWREG((uint32_t)CKMD_BASE + CKMD_O_DTBCTL) |= CKMD_DTBCTL_EN;
        }
    
        return status;
    }


    该输出信号仅显示馈入的任何内容、并且与使用该信号的设计中的外部 LF 时钟匹配。 我们假设在设计中使用 RFOSC 时、它是 RFOSC。 但它不为它们提供输出补偿信号的选择。

    您是否认为 500ppm 只能通过 RSSOSC 的补偿来满足? 提到的补偿是 LFINC、如果您 在 CKMD_O_LFINCOVR 寄存器中设置 CKMD_LFINCOVR_OVERRIDE 位、则会被禁用。

    我不知道有什么方法可以校准 RFOSC 信号。 如果可以、 您能帮助我们了解如何操作吗?

    此致、
    Luke

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

    您好的团队、

    对此有任何更新?

    此致、

    Luke

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

    全部、  

    对于遵循此主题的其他应用、此问题正在内部处理。 我会发布任何相关的更新。  

    此致、

    Rafael

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

    此主题结束:  

    在给定温度下、LF RCOSC 初始频率精度的器件间变化为 0.5%至 1.0%。  

    在 25°C 条件下、围绕初始频率精度的漂移可高达±500ppm。 换句话说、在器件运行期间、频率可能在初始值附近变化。

    --拉斐尔