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.

[参考译文] TMS320C6678:POR 之后的 I2C 时钟频率?

Guru**** 2558390 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/607528/tms320c6678-i2c-clock-freq-after-por

器件型号:TMS320C6678

您好、香榭丽舍

根据下面的 C6678数据表(SPRS691E、第28页)、如果 BOOTMODE[11]设置为1、I2C 时钟将为 CORECLK/250。  
我们板上的 CORECLK 为100MHz、设计了与 C6678EVM 相同的 I2C I/F b/w C6678和 EEPROM、因此 I2C 时钟应在 POR 后为400kHz。
但我测量到它是365kHz。

这可能会有什么问题?  是否有任何相关信息?

 o C6678数据表[SPRS691E MAR14]
   (http://www.ti.com/lit/gpn/tms320c6678)

   第28页

     表2-11 I2C 主模式器件配置字段说明(第1页、共2页)

       位       :11.
       字段     :速度
       说明:I2C 数据速率配置
                    0 = I2C 慢速模式。 在对 PLL 和时钟进行编程之前、初始数据速率为 CORECLK/5000
                    1 = I2C 快速模式。 在 PLL 和时钟被编程前、初始数据速率为 CORECLK/250


此致、
J-Breeze

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

    您是否验证了 I2C 输入时钟频率? 请参阅《I2C 时钟生成用户指南》(www.ti.com/.../sprugv3.pdf)第2.3节。 验证产生 I2C 输入时钟的 PLL 是否设置正确、然后检查 IPSC 和 ICCL/ICCH 中编程的值。

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

    您好!

    我验证了 SYSCLKOUT 引脚上的 I2C 输入时钟频率为16.7MHz。  它是100MHz CORECLK 的1/6速率。

    我询问了 I2C 引导。  当 BOOTMODE[11]设置为0时、我还验证了 I2C SCL 时钟频率为20kHz。  它是100MHz CORECLK 的1/5000速率。
    那么、我想再次询问您。  RBL 产生20kHz 的剂量是多少?
    使用 IPSC 和 ICCL/ICCH 寄存器?  如果是、您能否告诉我在 PG2.0 RBL 源代码中设置值的寄存器值和代码?  

    此致、
    J-Breeze

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

    请在此处参阅 Shannon bootROM 代码:
    processors.wiki.ti.com/.../Keystone_Device_Architecture

    在 nysh.c 中、bootROM 读取 DEVSTAT 位12或 bootmode[11]、以确定 I2C 时钟是否应为20Khz 或400kHz。 在 i2main.c 文件中的代码中初始化 I2C 引导的引导参数表时调用此函数。 实际的时钟初始化代码存在于 I2C_init.c 和 HW 文件夹中的函数 hwI2CInit.c 文件中。

    希望这对您有所帮助。

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

    您好、Rahul、

    您可以在下面查看我的计算结果吗?  它以红色突出显示。
    哪个函数生成正确的寄存器值、i2C_Init.c 中的 i2c_Init()​或 i2c.c 中的 hwI2Cinit()?

     o i2c_Init()

       PSC = coreFreqMhz / I2C_TARGET_MODULE_FREQ_MHz;
           = 100 / 12
           = 8
       如果(PSC > 0)
         PSC = PSC - 1;
             = 8 - 1
             = 7
     ​​ trueModFreqMhz = coreFreqMhz /(PSC + 1);
                      = 100 /(7 + 1)
                      = 12

       tmp =(trueModFreqMhz * 1000)/i2cFreqKhz;
           =(12 * 1000)/ 400
           = 30
       如果(tmp > 12) {
         CLKX =(tmp - 12)>> 1;
              =(30 -12)>> 1.
              = 9
       }否则{
         CLKX=0;
       }

       Li2ccfg.i2cpsc = 0x00000019; // I2CPSC -   预分频300MHz 至12MHz *

     o hwI2Cinit()

      moduleFreqMhz Q1 =(coreFreqMhz << 1)/模数除数;
                       =(100 << 1)/ 6
                       = 200 / 6
                       = 33
       PSC =模块频率 MhzQ1/I2C_TARGET_MODULE_FREQ_MHz_Q1;
           = 30 / 27
           = 1
       如果(PSC > 0)
         PSC = PSC - 1;
             = 1 - 1
             = 0
       trueModFreqHz =((UINT32) coreFreqMhz *(UINT32) 1000000)/(模数除数*(PSC+1));
                     =(100 * 1000000)/(6 *(0 + 1))
                     = 166666
    ​  ​​tmp = trueModFreqHz /(clkFreqKhz * 1000);
           = 16666666 /(400 * 1000)
           = 41
      ​​如果(tmp > 12)
        ​​CLKX =(tmp - 12)>> 1;
              =(41-12)>> 1.
              = 14
      ​​其他
       ​​CLKX=0;

    此致、
    J-Breeze

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

    您好、Rahul、

    很抱歉让你着急。  但是、您能告诉我 RBL 在代码中使用的寄存器值吗?

    此致、
    J-Breeze

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

    您好!

    对此进行了任何更新?

    此致、
    J-Breeze

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

    您好!

    Dose、有人帮助我吗?

    此致、
    J-Breeze

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

    很抱歉耽误你的时间。 以上计算结果与我对 ROM 代码的理解一致。 此外、我能够在 EVM 上重现您的问题、并根据 ROM 引导作者过去在该器件上观察到的情况与他们进行了跟进。

    "I2C 根据基准时钟和 PLL 乘法器进行计算、以避免超过最大频率。 由于分频器相当大、因此可以看到10%的差异、这一点并不奇怪。 只要我们站在缓慢的一边、他们就认为这是预期行为。 如果我们超过10%的速度、这将是一个问题。"

    希望这能澄清并回答您对此问题的疑问。

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

    您好、Rahul、

    感谢您的信息。
    我想再问一个问题。  您使用了什么 EVM 来重现我的问题?  

    此致、
    J-Breeze

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用了 C6678 EVM 将 EVM 配置为 I2C POST 引导设置和 POST 引导、解锁 KICK 寄存器并设置引导模式、执行 CPU 复位并测量示波器上的时钟。

    此致、
    Rahul