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.

[参考译文] CC2640:I2C 快速模式

Guru**** 2539450 points
Other Parts Discussed in Thread: CC2640, CC1350STK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/657845/cc2640-i2c-fast-mode

器件型号:CC2640
主题中讨论的其他器件: CC1350STK

我的 I2C 总线在 CC2640上以100kHz 的频率工作、但只能勉强工作、因为时钟/数据脉冲的上升时间大约为0.9uec (规格应该小于1uec)。

我在 CC2640的 SDA/SCL 线路上有两个外部 I2C 子板(MP9250 IMU 芯片和 PCA9685 PWM 芯片)。

使用的唯一上拉电阻器是 CC2640的内部上拉电阻器。

由于0.9uC 的上升时间与0.3uec 的最大规格相差太远、因此无法使用400kHz 快速模式。

对于~60 nsec 的两种模式、下降时间都很好。

如果看一下 CC2640中的 SCL、而没有与其他器件连接、上升时间仍然为0.5 μ s  

我的 CC2640本身位于 CC264BPA-S 子板上、我仅以2.8V 的电压运行。

这是我的 SDA/SCL 引脚分配:

#define Board_I2C0_SCL0   IOID_12  
#define Board_I2C0_SDA0   IOID_0  

我该怎么做才能解决这个问题?

谢谢、

戴尔

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

    您能否提供指向您在哪里找到该规格的链接? 您是否按照本指南中的说明使用了传感器控制器的 I2C:
    www.ti.com/.../swru537.pdf

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我使用了 i2ctmp007_CC1350STK_TI 示例项目中的代码将 i2c 实现到我的项目中。

    我认为此链接显示了根据 Phillips 标准: community.cypress.com/.../DOC-12635得出的规格

    我将查看您的链接以获取线索。

    很抱歉、我编辑了几次上升/下降时间、我从逻辑分析仪导线和示波器导线中得到了一些影响、但我认为它们非常接近现在的实际情况。 我还看到时钟和数据上升时间之间存在差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我似乎已经通过在库文件 I2CCC26XX.c 中的 SDA 和 SCL 引脚分配行中添加'| PIN_DRVSTR_MAX'来解决快速模式上升/下降时间问题

    上升/下降时间现在约为95ns。

    CC2640无法将 SDA 和 SCL 线路下拉至所有电路板的公共接地、这是另一个问题。

    正如您在此示波器图像捕获中看到的、只有从器件在发送 ACK 时使 SDA 降至接地(但 CC2640在发送0x00的过程中似乎在第1个和第2个 ACK 之间保持 SDA 处于低电平、奇怪):

    关于这一点的任何想法、正如我说过的、CC2640的运行电压为2.8V、而 I2C 总线上的其他板的运行电压为3.3V。

    供参考在连接 I/O 和电源引脚之前、这里是我的电路板"组装"图片:

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

    无法确定为什么、由于我在  I2CCC26XX.c 中放置了"| PIN_DRVSTR_MAX"并且 由于 CC2640放置了 SDA/SCL 线路上的唯一上拉电阻器、CC2640无法始终将线路下拉至逻辑低电平。  使用 "| PIN_DRVSTR_MAX"修复了上升/下降时间、但导致了另一个问题。

    CC2640仅将线路拉低至略高于1V、而 I2C 总线上的 PWM 和 MPU 板不会将其视为低电平。  当这些电路板在 SDA 上进行 ACK 应答时、它们可以将 SDA 线拉至~0v。

    我觉得答案在这个图表中的某处:

    "电流模式"和"驱动强度"之间有何区别?  数据表、TRM 和 Google 都没有回答这个问题?

    将 SDA/SCL 线路切换至扩展电流模式引脚是否有帮助(不是很容易操作、但如果我必须这么做、我会首先建议这种帮助有什么机会)?

    如何确保 I2C 库将压摆率设置为"正常"?

    为什么我要在一个图书馆里欺骗我才能做到这一点?

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

    我运行了原始 I2CCC26XX.c 库文件以返回到方形1、然后再尝试其他操作。

    不用看、我的 SDA/SCL 线路上不再有上升/下降时间问题或任何低逻辑电平问题。

    现在、我完全困惑、但我需要继续处理问题。

    因此、我想在这里找不到答案、因为我不知道是什么解决了我的问题。

    很抱歉耽误你的时间,如果它神奇地重新出现,我会回来的。

    以下是400kHz 时磁力计校准值的读数: