Arduino/AVR:中断串行/I2C 通信是不是安全

Posted

技术标签:

【中文标题】Arduino/AVR:中断串行/I2C 通信是不是安全【英文标题】:Arduino/AVR: Is it safe to interrupt Serial/I2C communicationsArduino/AVR:中断串行/I2C 通信是否安全 【发布时间】:2015-04-21 10:11:45 【问题描述】:

我想在 Atmega328 上进行一些中断驱动的信号处理,它可能没有足够的 SRAM (2K) 来存储整个运行的数据。这意味着我必须在收集数据的同时将部分缓冲区写入外部存储器。

我的问题是在触发中断的同时进行串行写入或 I2C 通信(例如到 SD 卡)是否安全。我认为串行通信本身是中断驱动的,所以这可能会成为一个问题。这是真的? I2C怎么样?如果两者都可能导致问题,那么在仍然收集数据的同时刷新缓冲区的推荐方法(如果有)是什么?

【问题讨论】:

【参考方案1】:

这是一种常见情况,实际上取决于您对每个任务究竟需要多少处理时间,以及您对设备通信的时间限制有多严格。

认为您应该审查/考虑:

您必须能够以比获取数据更快的速度将数据写入外部 RAM -> 您收集数据的速度有多快? 确保您在中断处理程序中花费的时间尽可能少 注意中断饥饿。如果 ISR B 更频繁地触发 AND 具有更高的优先级,则优先级会导致 ISR A 不被执行。如果可能,调整执行间隔。 检查哪些串行数据必须按顺序或短时间连续发送以满足时序要求。您可能需要暂停/延迟其他处理一小段时间。

【讨论】:

非常感谢 :-) 我做了一些计算,我认为 2K 的内存可能就足够了。因此,可以在记录数据后刷新缓冲区。不过,如果想要实现备份机制,这些技巧将非常有用,我可能会...再次感谢!

以上是关于Arduino/AVR:中断串行/I2C 通信是不是安全的主要内容,如果未能解决你的问题,请参考以下文章

I2C通信详解

嵌入式基础1:I2C总线

STM32通信模拟I2C

I2C通信协议详解和通信流程分析

I2C通信协议和流程分析

嵌入式Linux裸机开发(十三)——I2C通信