1

嘿,我最近发布了一个关于 I2C(从)库TinyWireS的问题。无论出于何种原因,我都无法使用高于 63 的从属地址。

我现在想启动一个新线程来解决这个问题:

您可以在我的上一篇文章中找到有关我项目的更多信息主从代码和电路仍然相同。

我发现了什么:

当主机试图通过特定地址与从机通信时,从机调用 ISR 函数(文件:usiTwiSlave.c 行:569)。如果主机发送到不同的从机,甚至会调用此函数,因为它会检查地址是否正确。

但:

当我告诉主服务器连接到从服务器 > 63 ISR 永远不会执行。不幸的是,我没有找到调用 ISR 函数的位置。我搜索了每个文件,但找不到任何“父”功能。

我很确定我已经接近找到错误,但我没有太多 C/C++ 经验。

我希望你能帮帮我!

4

1 回答 1

0

我不知道你是否解决了这个问题,但根据我的分析,我怀疑这个问题比你建议的要复杂一些。我不相信问题出在 TinyWireS 上(尽管它可能存在),我之所以这么说是因为我的从代码在大多数主机上都能正常工作,而且只有在我运行 ESP8266 时作为大师,我看到和你描述的一样的问题。ESP8266 在任何地址上都可以作为主机与非 ATTiny85 从机正常工作。如果没有示波器,我无法确定,但我认为 i2c 启动和地址的第一位为 1 时可能存在时序问题,这意味着从 USI 生成中断的条件不是遇见了。鉴于很少有人报告 ATtiny85 8MHz 的问题,我不排除时间问题出在 Master 方面,但我很确定这是一个微妙的时间问题。我还应该提到,偶尔,当 ATTIny85 具有高地址时,我可以在它上识别请求,但这种情况很少见,并且再次表明存在时间问题。我希望这有助于为这个问题构建图片,如果你有能力确定 i2c 总线的范围,我怀疑这个问题会变得很明显。

于 2017-07-24T21:04:12.100 回答