找回密码
 注册
搜索
查看: 3844|回复: 15

[讨论] 请问GPIO模拟I2C是什么意思

[复制链接]
发表于 2006-12-4 17:01:48 | 显示全部楼层 |阅读模式
GPIO模拟I2C是什么意思?
有相关的文档参考最好了
[em08]
发表于 2006-12-4 17:39:15 | 显示全部楼层
找本单片机的书看看看就明白了。I2C是一种简单的通信协议。
点评回复

使用道具 举报

 楼主| 发表于 2006-12-4 18:07:02 | 显示全部楼层
看了I2C协议的书,有些了解,但不知道GPIO模拟I2C是个什么概念?
知道的TX帮帮忙~~~
点评回复

使用道具 举报

发表于 2006-12-5 10:53:01 | 显示全部楼层
就是用两根GPIO来做I2C,通过自己写程序,拉出I2C的时序。这样就可以把GPIO做I2C使用了。主要的难点是写程序!
点评回复

使用道具 举报

发表于 2006-12-6 18:17:33 | 显示全部楼层
用一个GPIO pin(CLK pin)的高低电位切换来模拟出始终的high/low,用另外一根GPIO pin(DATA pin)的高低电位,传递数据。[br]<p align=right><font color=red>+1 RD币</font></p>
点评回复

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2006-12-11 13:52:34 | 显示全部楼层
明白了,3QQ [em01]
点评回复

使用道具 举报

发表于 2006-12-12 15:16:32 | 显示全部楼层
<DIV class=quote><B>以下是引用<I>夏耘</I>在2006-12-7 23:00:12的发言:</B>
      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时钟速率,调整各个延时时长,提高驱动电流等

<P align=right><FONT color=red>+1 RD币</FONT></P></DIV>


另外gpio口模拟IIC是占系统CPU资源的,而硬件IIC不占cpu资源!所以在有OS的应用中,如果用gpio模拟IIC的话,一定要进入临界区!
点评回复

使用道具 举报

发表于 2006-12-14 19:05:32 | 显示全部楼层
六楼的讲的真透彻,佩服佩服~!!!!
点评回复

使用道具 举报

发表于 2007-4-28 09:46:05 | 显示全部楼层
在控制器没有专用的I2C模块、并且又需要使用I2C协议与外设进行通信时,可以使用GPIO来模拟I2C。
具体一点就是如前面的几位高手所言:I2C有两条线:SDA(数据线)、SCL(时钟线)。
如果有专用的I2C模块,我们所要做的无非是使能模块、配置好波特率等,然后在需要传输的时候将待发送数据丢给I2C数据寄存器而已,模块会自动的将待发送数据进行移位发送;

但如果没有专用的I2C模块,需要用两根GPIO来模拟SDA、SCL线,并且要编写完整的通信协议模拟程序,比如:发送、接受的起始信号等,尤其是移位发送操作,需要把待发送数据的各个位通过“SDA”发送出去,其间的时钟信号等完全要程序员靠编写程序来控制。

此种方法虽然可以实现I2C的正常传输,但在传输期间CPU将不能再做其它事情,完全被模拟的I2C程序部分占用。

上述内容仅供参考,不足之处恳请大家批评、指正!
点评回复

使用道具 举报

发表于 2007-4-29 14:08:47 | 显示全部楼层
此种方法虽然可以实现I2C的正常传输,但在传输期间CPU将不能再做其它事情,完全被模拟的I2C程序部分占用。

不完全同意楼上的说法,GPIO口模拟I2C不外乎用定时器来实现。只要设定好中断节拍。在中断未来之前,理论上CPU仍然可以想干吗干吗去。
点评回复

使用道具 举报

发表于 2007-5-4 11:27:03 | 显示全部楼层
我不赞同11楼的说法,如果在模拟I2C过程中,频繁的处理中断,我认为不可行
点评回复

使用道具 举报

发表于 2007-8-31 15:40:35 | 显示全部楼层
那么硬件IIC和软件模拟的IIC各有哪些有缺点呢?
点评回复

使用道具 举报

发表于 2007-9-9 17:46:25 | 显示全部楼层
用GPIO模拟I2C还要考虑到你所传输的速度问题,I2C是高速I/O口,一般的GPIO模拟是不能达到她的速度要求的,当然一般的情况是可以模拟的
点评回复

使用道具 举报

发表于 2009-1-7 21:46:10 | 显示全部楼层

11

CPU原有的IIC总线可能用于控制几个比较重要的几个芯片,为了避免争用、或者为了硬件上相互影响,对于不太重要的芯片,有时候会再用几个GPIO脚来做模拟IIC跟它通信。软件实现非常简单,就是根据IIC协议,先拉高SCK、SDA线,然后延时Nms后,将SDA拉低,然后再延时Nms,一个IIC Start工作就完成了。传输数据过程也差不多,但是根据不同的芯片,可能时序定义会有差异,所以要常常调整IIC时钟速率,调整各个延时时长,提高驱动电流等

本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/Detail_RD.BBS_56242_15_3_1.html
点评回复

使用道具 举报

发表于 2010-1-23 16:54:04 | 显示全部楼层
用一个GPIO pin(CLK pin)的高低电位切换来模拟出始终的high/low,用另外一根GPIO pin(DATA pin)的高低电位,传递数据。

这个我不认同,时钟信号可以在读/写的时候用程序设置,亦即不模拟出始终的高低高低的电平,而是写一次数据或读一次数据时设置一个时钟。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-6 14:26 , Processed in 0.050499 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表