修复了TinyWireS库的i2c地址问题

Fixing I2C-address issue with TinyWireS library

本文关键字:i2c 地址 问题 库的 TinyWireS      更新时间:2023-10-16

嘿,我最近发布了一个I2C (slave)库TinyWireS的问题。由于某种原因,我不能使用高于63的从地址。

我现在想开始一个新的线程,以解决这个问题:

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

我发现了:

当主服务器试图通过特定地址与从服务器通信时,从服务器调用ISR函数(file: usiTwiSlave.c line: 569)。如果主服务器发送到不同的从服务器,这个函数也会被调用,因为它会检查地址是否正确。

但是:

当我告诉主服务器连接从服务器> 63时,ISR永远不会执行。不幸的是,我没有发现ISR函数在哪里被调用。我搜索了所有文件,但没有找到任何"父"函数。

我很确定我快要找到bug了,但是我没有太多的C/c++经验。

我希望你能帮助我!

我不知道您是否已经解决了这个问题,但是从我的分析来看,我怀疑这个问题比您建议的要复杂一点。我不相信这个问题肯定是在TinyWireS(尽管它可能存在),我这么说的原因是我的奴隶代码与大多数主人工作得很好,只有当我运行ESP8266作为主人时,我才看到与您描述的相同的问题。ESP8266工作良好的主与非attiny85奴隶在任何地址。没有示波器,我不能确定,但我认为i2c开始和地址的第一个位可能存在时序问题,当它是1时,这意味着从USI产生中断的条件不满足。考虑到很少有人报告ATTiny85 8MHz的问题,我不排除时序问题是与主端有关,但我很确定这是一个微妙的时序问题。我还应该提到,偶尔,我可以在ATTIny85上识别请求,当它有一个高地址时,但这是罕见的,再次表明时序问题。我希望这有助于构建这个问题的图像,如果您有能力确定i2c总线的范围,我怀疑问题将变得明显。