I2C原理与FPGA实现(一)

一、原理
I2C总线是一种常见的数据总线,广泛应用于各种控制系统中,是一种多主机总线,各个设备通过片上接口,通过I2C总线使得它们之间能够相互通信。I2C总线结构十分简单,只有两条线:串行数据线(SDA)和串行时钟线(SCL)。
查看手册中有一些术语需要定义:
在这里插入图片描述
【注】 Master不一定是发送方,也可能是接收方。Master控制着传输的开始和结束,并且在传输过程中负责产生的时钟信号(SCL)。
1、SDA和SCL信号规定
当SCL为高时,SDA必须保持不变;当SCL为低时,SDA才能变化(传输过程中每bit翻转,变化意味着起始位)。所以,一个SCL时钟信号对应着传输时的1bit。
在这里插入图片描述

2、开始和停止位
Master在传输开始和结束都需要在总线上表现出相应的信号。
开始位(S):SCL为高,SDA从高到低(下降沿);
停止位(P):SCL为高,SDA从低到高(上升沿);
重复开始位(Sr):当开始位第二次出现在总线上,中间没有出现停止位。
在这里插入图片描述
3、发送字节规格
I2C规定发送的byte都必须是8位,但是每次发送的字节数没有限定,并且每个byte后都要有一个应答信号(ACK)。在每个byte发送完毕,如果Slaver需要暂停,则将SCL拉低可以强制让Master进入等待状态。
在这里插入图片描述
ACK定义如下:在应答脉冲到达时(第九个脉冲),发送方释放SDA,接收方则可以将SDA拉低,并且保持低电平当SCL为高的时候。
NACK(无应答)定义如下:第九个脉冲时,接收方将SDA置高。此时传输失败,Master在总线上传输停止位结束本次传输或者重复开始位(Sr)开始一次新的传输。
4、多个Master的时钟同步
当总线上存在多个Master时,可能出现两个Master同时拉低SDA,开始传输数据,这会导致数据的紊乱。所以需要时钟同步和仲裁

5、数据发送和接收

在标志起始位之后,Master需要在总线上发送七位目标地址+一位读写标志位。然后再发送目标设备的操作单元地址

5.1 数据方向

  • Master发送,Slaver接收,并且数据发送和接收方在发送过程中方向不发生变化。
    在这里插入图片描述
    只有ACK应答或者NACK信号由Slaver发送,其它数据都是由Master发送。
  • Master接收数据,Slaver发送数据

这种情况下,同样需要Master在总线上标志起始位,然后给出地址和读写标志位。在Slaver给出应答后,Slaver随后将数据放在总线上,此时每Byte数据需要Master给出一个ACK或者NACK。
在这里插入图片描述

  • 在发送过程中存在发送方和接收方位置互换

此时需要Master发送一个重复开始位(Sr),再重复发送地址,但是要注意这里的读写标志位和一开始的相反(因为数据方向变了)
在这里插入图片描述
图中没有标注数据和ACK是否有阴影,是因为取决于R/W’。

5.2 10位地址
使用10位地址能够扩展从设备的数量,而且7位地址和10位地址能共同存在于一对I2C总线上,但现阶段10位地址使用并不广泛。10位地址的前一个7位地址数据为1111 0XX,第八位仍为R/W’,XX为10位地址的高两位,发送结构为:

  • Master发送,Slaver接收
    在这里插入图片描述
  • Master接收,Slaver发送
    Master首先发送七位地址和读写标志位,总线上所有七位地址设备和十位地址设备比对后(七位地址设备的地址不能是1111 0XX),所有相同地址的设备都会发出ACK(A1),紧接着Master发送地址的后八位,之前比对成功的设备接着比对这八位,这时只有一个设备发出应答A2。接着发送Sr和第一个七位地址数据,但读写标志位需要翻转为1。(为什么要发两遍7位首地址,是因为第二个八位地址需要由Master发送,此时Slaver接收,所以需要将R/W’设置为0)在这里插入图片描述
    5.3 保留地址
    在这里插入图片描述
    5.4 广播地址(general call address).
    通用广播地址是为了寻址总线上所有设备。如果一个设备不需要使用广播功能,可以不响应广播。如果设备需要使用广播功能,则它在检测到广播地址后发送响应,并作为从机接收读取总线上发送的数据。主机不知道总线上有多少从机发送响应。总线上所有可以响应广播的从机读取广播地址后的第二个及后面的字节。不能处理这些广播数据的从机通过不发送响应的方式忽略它。同样地,如果有一个或一个以上的从机发送响应,则主机就检测不到总线上其它没有响应的设备。广播消息的含义总是定义在第二个字节。
    在这里插入图片描述
  • 当最低位B为0时
    第二个字节包括以下定义:
    0000 0110(06h):复位并通过硬件写内容到从机的可编程部分。所有可以响应此类广播的从机,收到此两字节后,进行复位并进入它们地址的可编程部分。注意确保设备在加电后不会将SDA或SCL拉低,因为这些低电平会阻塞总线;
    0000 0100(04h):通过硬件写内容到从机的可编程部分,作用类似(06h),但设备不会复位;
    0000 0000(00h):这个不应该作为第二个字节用。
    编程时序参考相应设备的DATASHEET。
  • 当最低位B为1时
    两字节广播定义为“硬件广播”。主机在编程后,可以发送既定的从机地址到总线上,构成两字节序列的“硬件广播”。主机可能并不知道总线上从机的地址,它只能通过硬件广播的方式,将自身地址通知给系统。
    硬件广播的第二个字节的前七位包括主机的地址。总线上的智能设备如微控制器,读取此地址并接收主机发送的其它信息。如果主机也可以作为从机使用,则以上读取的主机地址实际上也就是(切换主从模式后的)从机地址。在系统中,一种可能是系统复位后设备由主机发送模式切换到从机接收模式,这时由系统主机先告诉硬件主机数据应送往的从机地址,这样当硬件主机发送数据时就可以直接向指定从机(地址)发送数据了。
    如下所示:
    在这里插入图片描述
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值