打印

硬件II2C和软件I2C有什么区别呢

[复制链接]
1705|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hello_galaxy|  楼主 | 2016-5-25 22:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
低八度的声线| | 2016-5-26 09:35 | 只看该作者
硬件II2C比你IO模拟的要快很多,占用的时间也少

使用特权

评论回复
板凳
lt1231| | 2016-5-26 17:45 | 只看该作者
有硬件II2C的话,还是考虑硬件的。没有的话,用IO模拟也可以。

使用特权

评论回复
地板
merry_zsp| | 2016-5-26 22:42 | 只看该作者
I2C的话,个人感觉要看芯片了,有的芯片的I2C有BUG,比如STM32,这个就有缺陷

使用特权

评论回复
5
hello牟| | 2016-5-27 09:54 | 只看该作者
I2C硬件也没多大意思,速度本来就不高,挂多个从机的时候采用硬件了

使用特权

评论回复
6
大白农| | 2016-5-28 15:02 | 只看该作者
硬件I2C只要把数据送到指定的寄存器就可以了,不用自己写时序什么的。

使用特权

评论回复
7
nobleliom| | 2016-5-28 21:12 | 只看该作者
软件I2C就是用两根GPIO来做I2C,通过自己写程序,拉出I2C的时序。这样就可以把GPIO做I2C使用了。主要的难点是写程序!

使用特权

评论回复
8
花落辞殇| | 2016-5-29 15:58 | 只看该作者
  早期的PIC单片机,没有I2C的硬件模块支持,要完成I2C的通信,必须通过两根普通I/O线,完全用软件来模拟。既然是软件模拟,自然是可以模拟成主机运行,也可以模拟成从机。由于大量外围I2C器件都是制造成从机的,所以,软件模拟主机的情况居多。
  现今的PIC新型单片机,从物理硬件、中断、串行数据字节等,都有专门的I2C模块。这些模块如果是工作在从机状态下,就叫做从模式,工作在主机状态下,就是主模式。在一个I2C总线上,遵守一主多从的规定。

使用特权

评论回复
9
jp_chen| | 2016-5-29 23:19 | 只看该作者
    IIC本来是一个硬件模块之间的通信协议,一般芯片都有专门的电路逻辑块来处理协议,并通过两根线路(时钟SCk、数据SDA)来跟其余同样有IIC模块的器件通信。
      由于其通信速率(400K)和通信方式(串行)跟其他串并口通信方式不同,所以一般都用于主机跟从机传递控制参数、参考数据、或者少量的其他数据。
      IIC协议主要在乎的时序的准确性,所以在没有专门的IIC模块的单片机中,你也可以用两个IO口来模拟输出IIC协议的波形,这个波形不管是IIC硬件模块生成的,还是软件模拟出来的,只要符合IIC协议标准的时序和电平,都是一样的,接受端也不会挑剔。就像你要喝水,主要是喝 H2O,它究竟是从山涧里面流出来的泉水,还是工厂里面处理的蒸馏水,你可能并不在意,只要符合饮用标准就行。
      还有一些系统中,CPU原有的IIC总线可能用于控制几个比较重要的几个芯片,为了避免争用、或者为了硬件上相互影响,对于不太重要的芯片,有时候会再用几个GPIO脚来做模拟IIC跟它通信。软件实现非常简单,就是根据IIC协议,先拉高SCK、SDA线,然后延时Nms后,将SDA拉低,然后再延时Nms,一个IIC Start工作就完成了。传输数据过程也差不多,但是根据不同的芯片,可能时序定义会有差异,所以要常常调整IIC时钟速率,调整各个延时时长,提高驱动电流等

使用特权

评论回复
10
zhangyi3312| | 2016-5-31 14:34 | 只看该作者
gpio口模拟IIC是占系统CPU资源的,而硬件IIC不占cpu资源!所以在有OS的应用中,如果用gpio模拟IIC的话,一定要进入临界区!

使用特权

评论回复
11
16号哨兵| | 2016-5-31 18:50 | 只看该作者
gpio口模拟IIC是占系统CPU资源的,而硬件IIC不占cpu资源!所以在有OS的应用中,如果用gpio模拟IIC的话,一定要进入临界区!

使用特权

评论回复
12
magicoctoy| | 2016-6-8 08:24 | 只看该作者
在控制器没有专用的I2C模块、并且又需要使用I2C协议与外设进行通信时,可以使用GPIO来模拟I2C。
具体一点就是如前面的几位高手所言:I2C有两条线:SDA(数据线)、SCL(时钟线)。
如果有专用的I2C模块,我们所要做的无非是使能模块、配置好波特率等,然后在需要传输的时候将待发送数据丢给I2C数据寄存器而已,模块会自动的将待发送数据进行移位发送;
但如果没有专用的I2C模块,需要用两根GPIO来模拟SDA、SCL线,并且要编写完整的通信协议模拟程序,比如:发送、接受的起始信号等,尤其是移位发送操作,需要把待发送数据的各个位通过“SDA”发送出去,其间的时钟信号等完全要程序员靠编写程序来控制。

使用特权

评论回复
13
tomyoct| | 2016-6-9 10:44 | 只看该作者
此种方法虽然可以实现I2C的正常传输,但在传输期间CPU将不能再做其它事情,完全被模拟的I2C程序部分占用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

92

帖子

0

粉丝