Embedded 在嵌入式编程中,同步和异步I2C有什么区别?

Embedded 在嵌入式编程中,同步和异步I2C有什么区别?,embedded,microcontroller,i2c,Embedded,Microcontroller,I2c,在嵌入式编程中,同步和异步I2C有什么区别?有人能用一个例子来解释这一点吗?何时使用其中一种?I2C是一种同步协议,这意味着通信双方不需要事先同意某个速度-考虑一下异步串行线路,如RS-232,如果双方不使用相同的波特率,则通信无法成功 有人提到的同步/异步,说到i2c,它在另一个层次,我们可以称之为API。同步API(或例程)将启动通信,并且在发送或接收整个数据之前不会将控制权返回给程序。传输所需的时间将不适用于该程序 如果通信是异步的,调用程序可以调用i2c驱动程序,然后继续工作。稍后,应通

在嵌入式编程中,同步和异步I2C有什么区别?有人能用一个例子来解释这一点吗?何时使用其中一种?

I2C是一种同步协议,这意味着通信双方不需要事先同意某个速度-考虑一下异步串行线路,如RS-232,如果双方不使用相同的波特率,则通信无法成功

有人提到的同步/异步,说到i2c,它在另一个层次,我们可以称之为API。同步API(或例程)将启动通信,并且在发送或接收整个数据之前不会将控制权返回给程序。传输所需的时间将不适用于该程序

如果通信是异步的,调用程序可以调用i2c驱动程序,然后继续工作。稍后,应通知程序(或程序应检查)事务的结果:“写入/读取是否仍在进行中?”;如果它被终止了,进展顺利还是不顺利

i2c上下文中的Sync/async可以被认为与磁盘(文件)I/O相同:通常使用同步磁盘访问,这既简单又有效:读取内存中的一些数据,检查读取是否正常,对数据执行一些操作,然后继续。在异步方式中,程序会这样说:“我需要这些数据:I/O驱动程序,请在我做其他事情时获取它们;当数据可用时,我会用这些数据做一些事情”

i2c的异步模式是令人愉快的,特别是因为与其他数据交换方式相比,i2c速度较慢。另一方面,i2c用于少量数据,当然不是用于硬盘

严格地说,在嵌入式世界中,MCU通常需要同时做很多事情,而i2c设备的速度可能很慢,如果i2c被比特碰撞,MCU就会损失太多时间。但通常有硬件支持,中断驱动。无论如何,非阻塞(即异步)API更难管理

--评论后更新--

“通常有硬件支持,中断驱动。无论如何,非阻塞(即异步)API更难管理”您的意思是在多模式传感器系统中实现synchronus I2C比其他系统更容易,并且仍然具有类似的性能

让我们假设有一个异步硬件+驱动程序支持:我们调用

i2c写入(外围地址,数据发送[],6); //向外围设备发送6个字节

几微秒后,例程返回,但通信仍在进行。此时,我们不能发出另一个i2c_写入(…),因为我们将中断正在进行的写入。该程序可以做其他事情,是的,但不能使用相同的总线。如果用i2c_write(…),我们使用

i2c_读取(…)

当例程返回时,我们不会准备好数据:程序必须使用i2c_read(),但只在到达后使用数据,同时不接触i2c总线。不难做到,但肯定是一个同步调用/API,如:

如果(i2c_读取(某些_数据)=I2COK) 显示(一些数据); else显示(错误)


更简单。

事实上,I²C比这更复杂,而且正在达成协议,尽管这对用户来说是透明的。@0andriy是的,i2c协议还有很多内容;我认为最好不要太深入,直到OP有更多的疑问。谢谢@LinuxFansaysRestatemonica的解释,我是固件开发新手,我发现这有助于理解更多。我想了解更多关于这些方面的信息“通常有硬件支持,中断驱动。无论如何,非阻塞(即异步)API更难管理”您的意思是在多模式传感器系统中实现synchronus I2C比其他系统更容易,并且仍然具有类似的性能吗。另外,如果说异步API更难管理,那么您希望从中获得什么样的挑战?@saba007我已经为您更新了我的答案。这对我来说非常有意义,请提供有关您问题的更多细节和上下文。