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.

[参考译文] RF430FRL152H:中断驱动的 I2C

Guru**** 2479735 points
Other Parts Discussed in Thread: RF430FRL152H, RF430FRL152HEVM

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/620084/rf430frl152h-interrupt-driven-i2c

器件型号:RF430FRL152H

我们已转向使用中断驱动型 I2C 实现、以避免在我们自己的 SensorHub 器件驱动程序代码和初始化例程内出现任何繁忙循环。  

在转换为中断驱动的实现过程中、遇到了几个问题、尽管他们有解决方案、但他们仍担心我们会遇到一些计时和竞争情况。  

1) 1)将 I2C 总线配置为大于100kHz 的任何频率(UCB0BRW = 10、SMCLK@2MHz)将导致在尝试仅读取2个字节时从总线上读取额外的字节。 当 UCTXSTP 在要接收的下一个到最后一个字节上被置位时、就会发生这种情况、但是、通过相关的中断服务、RF430FRL152H 会发现一个字节太晚。 如果在射频接口与电话或阅读器交互之前使用相同的中断驱动代码、则不太可能发生此问题。  

2)同样、当工作频率高于~30kHz 时、STPIFG 标志和中断在最终 RXIFGx 和中断被处理前被处理。 这意味着、除非在 USCI_B0_Vector 中的 STPIFG 情况下跟踪此状态并且读取最终字节、否则会丢失一个字节。 这似乎不是两个字节读取的问题、但可以在3个字节及更大的字节上清晰跟踪。 行为因所需的字节数而异。  

每个条件都已在运行 SensorHub 固件的 RF430FRL152HEVM 上复制、并使用 Maxim DS3231等支持顺序寄存器读数的器件。 任何此类器件都能做到、这只是一种现成的器件。 最初在 PT7C43390上看到的是实际问题。 后者更严重、因为从寄存器中读取的字节多于或少于预期会导致它挂起总线。  

话虽如此、问题是 RF430FRL152H 是否通常遇到这些行为以及是否存在建议的解决方案。 我们试图避免发现上述解决方案只能进一步掩盖问题、而不是解决问题。  

所有这些都使用单传感器器件读数进行了测试、与 TI 提供的示例 Android 应用的工作方式类似。  

谢谢、Karl

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

    很抱歉、我没有使用 RF430FRL152H 的中断驱动 I2C 的经验。 我以前从未听说过其他人的此类问题、但我也不相信我们曾经为内部 RF430FRL152H 开发过中断驱动 I2C 示例。 我知道 Alex 已经提倡使用中断驱动的 I2C、所以原则上应该可以正常工作。

    您是否能够比较轮询的 I2C 捕获与中断驱动的 I2C 捕获并查看是否存在差异? 这可能会导致每个问题的根源、可以调查这些问题以确保以稳健的方式设置驱动程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于第一个问题、由于这是一个很容易在逻辑分析仪中出现的问题、我在器件初始化期间、然后在实际传感器回调期间、捕获了相同的200kHz 中断驱动的 I2C 调用、以读取两个字节。  

    在 DigitalSensorInit 期间:  

    在 DigitalSensorMeasurement 期间:  

    迹线中的可重复间隙表明、有人延迟了 I2C 中断的处理。 代码的轮询版本看起来与第一次捕获非常相似。  

    Karl