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.

[参考译文] MSP430F5358:处理多个 IIC 总线请求-

Guru**** 2392095 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1171841/msp430f5358-handling-multiple-iic-bus-request-

器件型号:MSP430F5358

大家好、

我们在处理器和控制器之间使用 IIC 通信。 我们在 控制器上有多个传感器监控数据和一些存储器写入和读取操作、这些操作需要由处理器完成。  对于此通信架构、我们设计了基于中断的通信架构、当仅访问1个读取/写入请求时、该架构工作正常。

当处理器发出两个读取/写入请求、从而导致 IIC 总线被挂起时、就会出现问题。 处理器在执行 IIC 扫描或给定的任何新请求时停止检测从属设备。

问题1. 处理这一多重请求的最佳方式是什么?我们如何才能做到这一点?

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

    我假设您的控制器是 MSP430、它充当 I2C 从设备。  

    从器件对 I2C 事务的控制非常小;它唯一真正的办法是延长时钟(保持 SCL 为低电平)、这会使总线停止。 从器件必须在流控制内工作:(a)每个 TXIFG 必须与一个到 TXBUF 的写入相匹配、(b)每个 RXIFG 必须与一个到 RXBUF 的读取相匹配。 如果总线"放弃"、总线就会永久停止。

    我猜您的第一笔交易会请求您的从机中进行"长时间"运行的操作、而从机正在等待(或"忘记")以在操作过程中进行响应。 我可以看到3种策略、具体取决于"长度"是多少:

    1)短(例如、几毫秒或更短):让时钟拉伸。 您需要跟踪 IFG 到达的事实(因为它已通过读取 IV 来清除)。

    2)中等(例如< 100毫秒):使用虚拟数据进行响应、该虚拟数据以某种方式告诉主器件从器件处于"忙碌"状态。

    3)长(秒或分钟):通过设置 I2C0A 等方法将从机从总线中取出。 虽然我记得一个 EEPROM 在写入周期中执行了此操作(我认为他们称之为"等待")、但这种情况相当严重。

    并行策略是定期运行这些操作而不被请求、然后在请求时向 Master 提供最新运行的结果。

    如果您可以更详细地解释您正在做的事情、则有人可能会给出更好的答案。