首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同步和异步I2C在嵌入式编程中有什么区别?

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

Stack Overflow用户
提问于 2021-02-12 06:28:08
回答 1查看 2K关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2021-02-12 08:10:44

I2C是一种同步协议,这意味着通信方不需要事先同意一定的速度--考虑一下RS-232这样的异步串行线路,在这种情况下,如果各方不使用相同的波特率,通信就无法成功。

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

如果通信是异步的,则调用程序可以调用i2c驱动程序,然后继续其工作。稍后,应该通知程序(或者程序应该检查)事务的结果:“写/读还在进行吗?”;如果它被终止了,它是否进行得很好?

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

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

严格地说,对于嵌入式世界,通常单片机必须同时做许多事情,而i2c设备可以简单地慢到足以使单片机失去太多的时间,如果i2c被敲打。但通常有硬件支持,中断驱动。无论如何,非阻塞(即异步) API更难以管理。

-更新意见后

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

让我们假设有异步hardware+driver支持:我们调用

i2c_write(periph_addr,data_to_send[],6);//向外围设备发送6个字节

几微秒后,例程返回,但通信仍在进行中。此时我们不能发出另一个i2c_write(.),因为我们会中断正在进行的一个。这个程序可以做其他的事情,是的,但不使用相同的公共汽车。如果i2c_write(.)我们用了一个

I2c_read(.);

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

if ( i2c_read(some_data) == I2COK)显示(Some_data);

要简单得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66167268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档