打印
[经验分享]

IIC总线与时序

[复制链接]
1745|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bartonalfred|  楼主 | 2024-1-21 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    IIC总线是飞利浦公司上世纪80年代设计出来的一种总线通信方式,主要用来连接整体电路,它可以一个总线结构上连接多个设备。
       很多人听到IIC总线、SPI总线、485总线什么的就会晕,其实,数据传输的接线方式,大体上就是两种:一种是并行接口,一种是串行接口。
       并行接口是什么?用并行方式来传输数据的接口。假如我想传输几个8位的数据,那好,单片机上用8个IO传送数据,每次就能传送一个。假如想传输几个16位的数据呢?那就要用16个IO!优点是速度快,缺点是占用的IO太多了。
       串行接口是什么?是指数据在有限的几个IO上按照顺序,一位一位的进行传输。这类有很多:UART、IIC、SPI、CAN、USB等等,只要是串行传输的接口,都是串口的一种。但是由于早期人们都习惯把UART口称为串口,导致很多人都习惯了说串口的时候特指UART口。就好像很多人把晶体和晶振都统称为晶振一样,但实际上这两种器件是有区别的。
       什么是时序?时序是串行接口或者并行接口在进行数据传输的时候,传输线必须要遵守的时间的顺序!如果不按照时序来,数据传输肯定是会有问题的。
       最明显的体现就是,有串行接口的器件的datasheet里面经常会有时序图。以昨天提到的PCF8591为例,下图是位传输的时序图:

       下图是开始信号和结束信号的时序图:

       下图是应答信号的时序图:
       发送机在发送完一个8位数据字节后,会把DATA线拉高,接收机会在第九个时钟高电平到来前把DATA线拉低,SCL线拉低后,DATA线置一,完成应答的流程。

使用特权

评论回复
沙发
kkzz| | 2024-2-3 21:30 | 只看该作者
SCL信号是由主机(如微控制器)产生的,用于同步数据的传输。从机(如外设)必须根据SCL信号的上升沿和下降沿来捕获数据和地址信息。因此,在编程时,需要确保SCL信号的时序正确。

使用特权

评论回复
板凳
wilhelmina2| | 2024-2-6 12:24 | 只看该作者
在开始条件和设备地址之后,主设备和从设备之间进行数据传输。数据传输过程中,SCL线保持高电平,SDA线上的电平变化表示数据的传输方向和数据本身。

使用特权

评论回复
地板
primojones| | 2024-2-6 21:14 | 只看该作者
SDA信号是双向的,用于在主机和从机之间传输数据。在传输数据时,需要确保SDA信号的时序正确,以确保数据的可靠传输。

使用特权

评论回复
5
juliestephen| | 2024-2-6 22:05 | 只看该作者
在IIC通信结束时,主机需要产生一个停止信号。这个信号由一个低电平到高电平的跳变表示,表示通信的结束。从机在检测到停止信号后,会退出接收模式。

使用特权

评论回复
6
sheflynn| | 2024-2-6 23:43 | 只看该作者
I2C总线的时钟线(SCL)用于同步数据传输。在I2C通信过程中,时钟信号由主设备(通常是一个微控制器)产生。需要注意的是,SCL线上的电平变化(上升沿和下降沿)定义了数据传输的时间。

使用特权

评论回复
7
phoenixwhite| | 2024-2-7 01:38 | 只看该作者
在设计和实现IIC通信时,确保上述时序关系的正确实现对于数据的可靠传输至关重要。

使用特权

评论回复
8
yeates333| | 2024-2-7 02:40 | 只看该作者
IIC总线支持多主控和多从设备。
任何时刻只能有一个主设备控制总线。
从设备根据主设备的地址来响应数据传输。

使用特权

评论回复
9
mnynt121| | 2024-2-7 10:51 | 只看该作者
在IIC总线中,每个从机都有一个唯一的7位地址。主机需要发送正确的地址来寻址相应的从机。在寻址时,需要确保SDA信号的时序正确。

使用特权

评论回复
10
maqianqu| | 2024-2-7 11:25 | 只看该作者
IIC总线器件的I/O级、I/O电流、毛刺抑制、输出斜率控制和管脚电容等电气特性需要满足IIC总线规范,以保证信号的准确性和稳定性。

使用特权

评论回复
11
timfordlare| | 2024-2-7 16:18 | 只看该作者
在某些情况下,被控器可能需要延迟下一个数据字节的传输。这时,可以通过把时钟线SCL电平拉低并保持来实现等待状态。一旦被控器准备好继续传输数据,就会释放时钟线,使数据传输得以继续。

使用特权

评论回复
12
lihuami| | 2024-2-7 18:34 | 只看该作者
主机可以在完成一次通信并发出停止信号后,紧接着再发出一个新的起始信号而不发出停止信号,这样可以在同一个主控器事务中连续访问不同的从设备。

使用特权

评论回复
13
lzmm| | 2024-2-7 22:25 | 只看该作者
在I2C通信过程中,可能会出现数据传输错误。例如,数据冲突、时钟同步问题等。在设计I2C通信程序时,需要考虑错误处理机制,以便在发生错误时能够恢复正常操作。

使用特权

评论回复
14
belindagraham| | 2024-2-7 22:38 | 只看该作者
IIC总线传输数据是一位一位进行的,每个位传输周期包含一个时钟脉冲。数据有效性是在时钟的高电平周期,即在SCL为高电平时,SDA线上的状态发生变化。

使用特权

评论回复
15
timfordlare| | 2024-2-9 09:16 | 只看该作者
I2C通信过程中,开始条件和结束条件用于标记数据传输的开始和结束。开始条件是SCL线为高电平时,SDA线由高电平向低电平变化;结束条件是SCL线为高电平时,SDA线由低电平向高电平变化。

使用特权

评论回复
16
beacherblack| | 2024-2-9 10:03 | 只看该作者
当多个主设备同时尝试控制I2C总线时,可能会发生总线仲裁。在仲裁过程中,优先级最高的主设备获得对总线的控制权。需要注意的是,在设计I2C系统时,要确保适当的总线仲裁机制以避免数据传输冲突。

使用特权

评论回复
17
xiaoyaodz| | 2024-2-9 10:55 | 只看该作者
I2C总线的数据线(SDA)用于在主设备和从设备之间传输数据。在I2C通信过程中,SDA线上的电平变化(上升沿和下降沿)表示数据传输的方向。当SCL线为高电平时,SDA线上的电平变化表示数据从主设备传输到从设备(写操作);当SCL线为低电平时,SDA线上的电平变化表示数据从从设备传输到主设备(读操作)。

使用特权

评论回复
18
1988020566| | 2024-2-9 11:37 | 只看该作者
IIC总线允许多个主机同时存在,这种情况下需要通过仲裁来决定哪个主机能够控制总线。仲裁是通过比较地址位来进行的,最先达到一致的主机会赢得仲裁。

使用特权

评论回复
19
abotomson| | 2024-2-9 15:43 | 只看该作者
在软件实现IIC通信时,需要正确初始化IIC控制器,并编写相应的协议处理代码,包括起始条件的检测、地址的发送与识别、数据的读写以及停止条件的生成。

使用特权

评论回复
20
minzisc| | 2024-2-9 16:44 | 只看该作者
还需要考虑总线的电气特性,如上拉电阻的值,以及如何处理可能的电气干扰和噪声。

使用特权

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

本版积分规则

25

主题

1261

帖子

1

粉丝