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.

[参考译文] TM4C129ENCPDT:PB0和 PB1上的 I2C5

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/624792/tm4c129encpdt-i2c5-on-pb0-and-pb1

器件型号:TM4C129ENCPDT

大家好、

我正在尝试在 Tiva 上运行 I2C5的简单示例。 我想从 SI7005读取一个字节。 在数据表中、我有此说明来读取寄存器。

我从 Tivaware 中的回送示例开始、它工作正常。 此外、在更改源代码后、我可以按预期在示波器上看到 SCL 和 SDA 信号。  

我使用400kbps 作为 I2C 时钟、我在 SDA 和 SCL 中有外部上拉电阻器。

当我尝试读取该寄存器时、观察表达式中只能看到0。

代码有什么问题?

我不了解该外设的配置?

或者、 是否更有可能是硬件问题?

随附代码。

e2e.ti.com/.../hello.c

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

    您好、Allef、

    查看您的代码、我认为您无需执行 I2CMasterSlaveAddrSet (I2C5_base、device_address、true);在发送地址/寄存器数据后。

    您还应使用 I2CMasterDataGet API 获取数据、例如:pui32DataRx[ui32Index]= I2CMasterDataGet (I2C5_base);

    要弄清这个问题,可能需要做更多的工作,但这最初是突出的。

    对于调试、我建议您在示波器上看到 SCL/SDA 信号、您可以查看发送到 SI7005器件的通信、并将其与器件数据表中建议的信号进行比较。

    确保发送0x40和0x11、然后查看是否接收到任何字节及其值。 如果地址和数据字节出现在 I2C 线路上、但 TM4C 中不存在、则可以调试接收时发生的情况。 如果数据传输不正确、则部分传输过程会混乱、如果数据正在传输但没有回复、则可能是硬件、数据包组帧或时序问题。

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

    如果您使用"kiss"、我建议您与"远程设备"进行通信的"初始尝试"获得成功的可能性要高得多!   "kiss"表示您"开始"与最简单的 I2C 从设备进行远程设备交互。   (通常为小容量 I2C EEPROM)

    您选择的(相反)更先进的器件可能会:

    • 在 I2C 设置和配置方面要求更高。
    • 需要更多时间进行测试/故障排除
    • 并"远离"(两者)您的"帮助团"的兴趣和使用/经验!   减去这个群体——你“独自在海上”——这是否好?

    以上均不符合您的要求!   "kiss"方法(通过小容量、简单的 EEPROM)肯定会对您的其他项目(许多)有用并且更有可能位于您的帮助者的"轮房"内、在这里。  (您选择的器件过于专业/鲜为人知-因此(命令)重点突出、可读/复审 (来自您的助手 crüe)-谁可能不会选择做出牺牲。)

    作为"远程 I2C 器件成功:"的一般指南

    • 在 I2C 事务期间、您是否测量并确认远程设备已完全/正确供电?
    • 未指定 MCU 与远程 I2C 从设备之间的间隔距离  
    • 噪声、电源、高频开关和/或射频源是否靠近 I2C 从设备和/或电缆?
    • 从400kHz 开始违反了"kiss"标准-它始终寻求最简单的方法来加快和简化"成功"。  (在这个早期阶段、100kHz 已经足够了!)
    • 如果是"用户构建的试验板"-是否(真的)检查了它的信号和电源连续性?   I2C 信号是否已直接在从器件的引脚上"限定范围"?  

    回想一下、"kiss"旨在"以最简单、最快捷的方式实现设计成功。"   之后是"足够的时间"到"通过细化进行"。   (早期细化(即另一个的"过早优化"如此多的人的失败-由于供应商的"将他们从"吻"中搁置)、他们没有获得"!"提供的许多已知好处。

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

    大家好、

    I2C5有一个勘误表。 很显然、我不能使用轮询。

    我正在执行建议的测试、我将很快报告结果。

    我在 Tivaware 上找不到 i2c 中断的示例。  你知道吗?

    谢谢。

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

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

    对于初始开发、要使 I2C 在基本级别工作、您不太可能遇到这种情况。 轮询容易"入门"、我在您的代码中看不到任何让我担心您还会遇到该项目的问题。

    也就是说、是的、您将需要为您的"最终产品"使用中断驱动型 I2C -尽管确保您能够首先与从器件通信可能更容易通过轮询来完成。

    就缺少 I2C 主中断示例而言... 我希望我能说为什么。 我在示例选择中没有任何作用。 作为一个软件密集型个人、我当然同意所提供的示例有时会让人更有希望。 但在'examples/peripherals/i2c'文件夹下有一个用于从模式的从模式、即 slave_receive_int.c。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph!

    在巴西、TI 的 Google Groups 中有一个老团队。 我收到了该组中的一位成员的答复、他以前在 Tiva 中遇到了 I2C 问题。

    只需在以下条件之前添加延迟:

    while (I2CMasterBusy (I2C5_base));

    并更改此行:
    I2CMasterControl (I2C5_base、I2C_MASTER_CMD_SINGLE_SEND);

    对于此行:
    I2CMasterControl (I2C5_base、I2C_MASTER_CMD_BURST_SEND_START);

    现在、我可以从该寄存器获取数据。

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

    感谢您将解决方案发布回我们的网站。 提到延迟确实会触发我已读取到要使用的存储器位

    while (!I2CMasterBusy (ui2cBase));
    while (I2CMasterBusy (ui2cBase));

    其他 TI 人的产品。 不确定您尝试了什么延迟、但您最终可能会找到上述最简洁的解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph!

    我正在使用虚拟延迟"SysCtlDelay (8000000);"

    我也会尝试另一种解决方案!