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.

[参考译文] RM48L952:I2C SCL 下降至低电平

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1169883/rm48l952-i2c-scl-drops-low

器件型号:RM48L952
主题中讨论的其他器件: HALCOGENDAC7574

您好!

我在使用 RM48L952器件的定制电路板上的 I2C 模块有问题。

请在下面找到原理图和 HALCoGen 配置。  

 

我使用以下代码尝试与从器件交换数据:

    i2cSetSlaveAdd(i2cREG1, xfer->address);
    i2cSetDirection(i2cREG1, I2C_TRANSMITTER);
    i2cSetCount(i2cREG1, xfer->payloadLen);
    i2cSetMode(i2cREG1, I2C_MASTER);
    i2cSetStop(i2cREG1);

    i2cSetStart(i2cREG1);

    i2cSend(i2cREG1, xfer->payloadLen, xfer->payload);

    while(i2cIsBusBusy(i2cREG1) == true);

    while(i2cIsStopDetected(i2cREG1) == 0);

    i2cClearSCD(i2cREG1);

    /* Simple Dealya before starting Next Block */
    /* Depends on how quick the Slave gets ready */
    for(delay=0;delay<1000000;delay++);

在首次尝试写入内容时、SCL 变为低电平、从不返回高电平。

每个上拉电阻器具有4.7K。

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

    您好、Cosmin、

    我已开始研究您的问题、我将很快向您提供更新。

    --
    谢谢、此致、
    Jagadish。

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

    也许它对您有所帮助。 当我将启动/停止条件置于一个无 ENLOOP 环路中时、我可以看到振荡器上的波形。

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

    您好、Cosmin、

    您在定制板上连接了什么 i2c 从器件?

    您是否在连接从器件的情况下进行测试? 还是仅主器件?

    --
    谢谢、此致、
    Jagadish。

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

    您好!
    我连接了两个从器件。  
    DAC7574:I2C 地址:0x4C
    PCA9671:I2C 地址:0x40

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

    您好、Cosmin、

    如果 I2C 线路上的上拉电阻过大、信号会变得太慢而无法达到高电平和低电平。 我记得4.7k Ω 是 I2C 拉电阻的一个很好的值。 您可以使用示波器检查信号、如果上升沿舍入太多、请尝试使用较小的电阻器。

    --
    谢谢、此致、
    Jagadish。

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

    Jagadish 您好、

    感谢您调查我的问题。

    不幸的是、没有生成的波形。 如上所述、SCL 线路处于"启动"状态、并且一直保持低电平。  
    另一方面、如果我将"开始和停止"条件置于循环中(例如 while (1){i2cSetStart();i2cSetStop();})、我可以看到时钟波形。  

    您是否成功运行了我附加的代码(Hercules 示例中的代码)?

    此致、

    Cosmin、

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

    看起来数据没有移出。 程序在检测到"停止"状态时卡住(基于上述代码片段)。

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

    您好、Cosmin、

    我不知道您的代码中"xfer"的声明,也不知道数据是否正确地从这些声明中获取,因此您可以直接提供值并按如下所示进行测试,而不是 xfer->len 和有效负载

    --
    谢谢、此致、
    Jagadish。

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

    使用 Halcogen 示例中准确的一段代码、结果如下所示:

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

    是否正在传输起始地址、从地址和数据、您能否在 CRO 上看到它们?

    --
    谢谢、
    Jagadish。

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

    什么是 CRO?

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

    CRO 是指阴极射线示波器、有助于监控硬件引脚电平的信号。

    您也可以为此目的使用任何逻辑分析仪。

    --
    谢谢、
    Jagadish。  

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

    嗯、在这种情况下、我有一个数字示波器、正如我已经描述的那样、即使是第一次尝试在 I2C 总线上写入内容、"SCL"行也会下降。

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

    您是否认为我的时钟树配置可能有问题?

    我还尝试了 HalCoGenexample "example_i2cInterrupt_Communication.c"、但行为是相同的、SCL 引脚在启动条件下被置于低电平。 此外、我始终得到中断编号3。  

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

    您是否认为我的时钟树配置可能有问题?

    我还尝试了 HalCoGenexample "example_i2cInterrupt_Communication.c"、但行为是相同的、SCL 引脚在启动条件下被置于低电平。 此外、我始终得到中断编号3。  

       

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

    您好、Cosmin、

    我验证了您的时钟配置、它们看起来很好。

    刚才我检查了 i2c 上的4.7K 上拉电阻器、测试时我不会遇到任何问题。 下面是我的测试波形  

    我只能在我们未配置任何数据时看到您提到的问题  

    在上图中、我只配置了从器件地址、没有配置任何要发送的字节数、我启动了启动条件、也没有 调用 i2cSend 函数、然后在立即发送地址后、我可以看到 CLK 线路变为低电平。

    我只是在这里附上我的工作代码、请将其作为参考并在您的末尾进行一次测试。

    e2e.ti.com/.../I2C_5F00_Master_5F00_RM46L852.zip

    注意:我在 RM46上创建并测试了这个项目、因为我现在没有 RM48、所以请采用这个项目并按照这个项目进行配置并测试它。

    --
    谢谢、此致、
    Jagadish。

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

    Jagadish 您好、

    您的代码和 Halcogen 示例代码之间的唯一区别是语句"i2cREG1->eMDR |=  0x2;"。 我不知道此设置如何影响功能、但它可以正常工作。 非常感谢您的支持。  

    此致、

    余弦