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.
工具与软件:
您好!
我使用的是 TMS570LS3137ZWT 器件。
我已经将 VCLK 设置为90MHz
我已将 I2C 预分频器配置为8、以获得10MHz 的模块频率。
按照数据表公式、要获得400kHz I2C 总线、我应该将 CLKH 配置为7、将 CLKL 配置为8
然而、为了获得400kHz 频率、我必须将 CLKH 配置为4、将 CLKL 配置为4...曲折的 VCLK 频率。
我可以通过 ECLK 检查 VCLK:ECLK = VCLK/900给了我一个非常棒的100kHz 方波信号...
我对这种配置感到困惑...
您能帮助我理解吗?
提前感谢您。
Francois
尊敬的 Francois:
[quote userid="632776" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1443913/tms570ls3137-i2c-clock-configuration 通过数据表公式获得400kHz I2C 总线、我应该将 CLKH 配置为7、将 CLKL 配置为8正确、值仅应为7和8。
[报价 userid="632776" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1443913/tms570ls3137-i2c-clock-configuration "]但是、为了获得400kHz 频率、我必须将 CLKH 配置为4、将 CLKL 配置为4...曲折的 VCLK 频率。您如何对此进行验证?
为什么您怀疑 VCLK 错误? 是否确定所有其他配置? 请确保在相应的寄存器中包含以下内容。
I2CPSC 应为8
I2CCLK 和 I2CCLK 应该为5。
——
谢谢、此致、
Jagadish。
你好 Jagadish ,谢谢你的答复。
要检查 I2C 频率、请使用示波器。
您能详细说明一下您的答案吗?
首先、您说 CLKH=7和 CLKL=8是正确的、然后您说它们应该是5...
您是如何得到5的值的?
VCLK = 90MHz (使用 ECLK 引脚上的示波器进行检查)。
I2CPSC = 8、
ModuleClockFrequency = VCLK /(I2CPSC + 1)= 10MHz;还有 D 值为5。
MasterClockFrequency = ModuleClockFrequency /((CLKH + D)+(CLKL + D))。
400kHz = 10MHz /((7 + 5)+(8 + 5))
我错了吗?
但在7和8中、我得到了312kHz
与4和4个值
您如何得到值5?
抱歉、我的错是个拼写错误、
I2CCLK 和 I2CCLK 的组合值应该为15
很抱歉、"组合价值"是这里的一项新内容。
您在哪里可以找到此商品? 您如何计算它?
您好、Jagadish。
感谢您分享该计算。
我们对计算方法保持一致。 我应该将7和8设置为 CLKL/H 配置值。
但是、通过使用这些值、我没有将正确的 I2C 频率作为输出...
尊敬的 Francois:
我现在没有这块板了、是否可以在我结束时分享您的完整项目以进行验证?
我会很快核实并提供建议。
——
谢谢、此致、
Jagadish。
很抱歉、我无法共享该项目。
以下是用于通过示波器检查 VCLK 的代码部分
//set ECPCLKFUN bit to 1 in SYSPC1 systemREG1->SYSPC1 = 1U; //set output direction systemREG1->SYSPC2 = 1U; //set pull up-down systemREG1->SYSPC9 = 1U; //LEAVE CLK_TEST_EN in CLKTEST to use ECPNTL //ECPCNTL set by default to VCLK + STOP on suspend + divide by 900 systemREG1->ECPCNTL = (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 23U) | (uint32)((uint32)(900U - 1U) & 0xFFFFU); // 90MHz divide by 900 give 100kHz signal
在等待您的反馈时、我将尝试对 HDK 使用不同的配置...
提前感谢您的测试。
此致。
或者也可以安排一次现场演示、在那里您可以共享您的屏幕、我会验证您的配置并根据配置指导您进行操作。
——
谢谢、此致、
Jagadish。
你(们)好
我不允许这样做。
你认为你什么时候可以检查你的身边?
大家好、我已经完成了另外一个测试。 我已经在 Halcogen 上生成了一个新工程来与 HDK 配合使用。
振荡器 | 16MHz | |
VCLK | 8MHz | OSC/2 |
I2C 模块 | 8MHz | 曲折 d = 7 |
I2C CLKL | 3. | |
I2C CLKH | 3. | |
主器件 CLK | 400000 |
同样、生成的时钟不是400kHz、而是312kHz。
我正在等待您的反馈
尊敬的 Francois:
您是否正在将 HALCoGen 用于您的应用以生成驱动程序级代码?
我之所以选中此框、是因为、如果我们使用 HALCoGen、那么我们就不需要在两个值之间费神、而是可以直接给出下面所需的波特率框:
它将自动计算所有值。
——
谢谢、此致、
Jagadish。
我已经为产品项目编写了驱动程序级别代码、显示了问题。
我已经用 HalCoGen 生成了一个新项目、并且使用文件和值时、它显示了同样的关于 I2C 波特率的问题。
尊敬的 Francois:
如前所述、我没有此电路板。 我选用了另一个 Hercules 电路板(TMS570LC4357)。
对于该板、我采用了一个现有的 I2C 示例、并将波特率配置为400Kb
在这里我注意到一个有趣的观察:
以下是在 VCLK 75MHz 下采用400K 波特率时的 I2C 波形:
以下是在 VCLK 90Mhz 下采用400K 波特率时的 I2C 波形:
当我将75MHz VCLK 配置到 I2C 模块时、我不会在生成的波特率中看到任何问题(我的意思是我获得411K 波特率)、而当我将90MHz VCLK 配置到 I2C 模块时、生成的波特率不正确(我得到的波特率仅为2.4K)。
另外、我注意到在90Mhz 情况下、预分频器和 CLKH 以及 CLKL 分频器仅设置为正确值。
可能我怀疑这一点、该模块可能不支持 I2C 实例的输入频率90Mhz。 我将进行与此相关的进一步分析、以便加以确认。 平均时间、我建议您尝试使用75MHz 的 VCLK 并在您的末端进行测试
——
谢谢、此致、
Jagadish。
您好、感谢您完成本次测试。
我将使用75 MHz 时钟进行测试... 我已经用 VCLK 8MHz 完成了这项工作、现在显示了同样的问题...