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.
您好!
我最近一直在为公司的一款产品研发 I2C 驱动器接口。 控制固件构建在 MSP430FR5969之上、并利用为 I2C 配置的 eUSCI B0。
我在设计高速非阻塞 ISR 状态机方面投入了大量精力、到目前为止、它在大约500kHz 之前完全稳定。
固件仅针对主器件进行配置、硬件配置已由我们的电气工程团队进行验证。
当前的问题是、无论如何配置第一个字节事务、我都能看到相同的接收行为。 如果我将 UCTXSTT 置为有效并对 UCRX0IFG 做出反应、那么我知道这是预期的。 如果我同时使能这两个引脚(UCTXSTT | UCTXSTP)、即使在启用 I2C 线路或中断之前、我也总是在从器件 ACK 后接收一个字节。 用户指南提到只有在 UCTXSTT 未被置位时、才会在 ACK 之后接收到从器件数据;我的问题是、为什么我仍然在另一个字节中计时? 我们的设备对零字节读取*和*写入的反应不同。 如何使用 eUSCI 模块实现完全非阻塞的零字节读取?
此外、是否有关于使用 eUSCI 的非阻塞 I2C 的更详细的参考? 我能够找到的 TI 示例受到严格限制、缺乏边沿大小写和错误条件逻辑。 FSM 图将令人难以置信!
感谢您的澄清、Quinn。
Walter
在倾注用户指南、论坛帖子和数据表之后,我希望开始-> ADDR/RW ->停止*读取和写入位,
WRITE 按预期工作,但读取*ALYS* 会导致第二种情况:START -> ADDR/RW-BYTE0 -> STOP。 如果我同时设置 STT 和 STP、我总是接收一个字节。 现在、我们将研究两个选项。
将所有零字节读取转换为零字节写入
2.阻止所有零字节读取。
理想情况下、我们希望实现 void 读取和 void 写入
沃尔特
我们的 EE 团队为我们的各种通信接口设计了定制路由接口。 I2C 切换到不同的板(每个板具有相同的从地址组)。 开关器件根据发出的地址和 R/W 位重新配置自身、但不是真正的 I2C 从器件。 这些器件充当大型多路复用器、可将数据传递到逻辑、从而进一步处理和路由 I2C 数据。
似乎没有彻底审查硬件实现、因为设计人员假设 MSP430FR5969的 eUSCI 模块可以进行空读取和空写入。 如果绝对无法发送从器件地址和 R/W NACK、则我们可能需要审查设计。 我们希望避免在每次交易中都将 eUSCI 重新配置为 GPIO、因为我们批准后制造软件更改的过程非常冗长。GPIO 解决方案已经过讨论、并不理想。
我还被认为最大 I2C 时钟速度是 MCLK 频率的1/4。 这不是真的吗?
谢谢、
Quinn