大家好、
我们在处理器和控制器之间使用 IIC 通信。 我们在 控制器上有多个传感器监控数据和一些存储器写入和读取操作、这些操作需要由处理器完成。 对于此通信架构、我们设计了基于中断的通信架构、当仅访问1个读取/写入请求时、该架构工作正常。
当处理器发出两个读取/写入请求、从而导致 IIC 总线被挂起时、就会出现问题。 处理器在执行 IIC 扫描或给定的任何新请求时停止检测从属设备。
问题1. 处理这一多重请求的最佳方式是什么?我们如何才能做到这一点?
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.
大家好、
我们在处理器和控制器之间使用 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 提供最新运行的结果。
如果您可以更详细地解释您正在做的事情、则有人可能会给出更好的答案。