Inter-Integrated Circuit

Inter-Integrated Circuit简称I2C,是主从设备通信的一种总线,使用Serial Data Line(SDA)和Serial Clock Line(SCL),而两线都是双向的.

在主设备模式,CPU能初始化和终结I2C的数据传输,要控制I2C总线,就要设置以下寄存器:

I2CCON 控制寄存器

I2CSTAT 控制/状态寄存器

I2CDS 收发收据移位寄存器

I2CADD I2C总线地址寄存器


如果I2C总线空闲,SDA和SCL应该为高电平.

开始信号为SCL为高电平的情况下出现SDA的下降沿.

停止信号为SCL为高电平的情况下出现SDA的上升沿.

开始信号后,将有7位地址值通过SDA传输,这个是用来决定选取那个从设备用的,第八位则是读(1)写(0)位.


放在SDA线上的应该总共为8位,,而收发数据多少在传输的过程中没有限制.而I2C设备发送的数据总会先发MSB,而在接收端的每一个字节后返回确认信号.


CPU提供9个I2C接口(其中8个普通,1个用于HDMI)

7位地址模式

串行,8位定向,双向数据传输.

支持正常模式最大100Kbit/s

支持快速模式最大400Kbit/s

支持主发主收,从发从收操作

支持中断和轮询事件

对于I2C总线接口的四中操作模式的功能关系:

  • 开始&停止条件

I2C总线会在设备产生开始信号的时候进入busy状态,而停止信号会让I2C总线进入空闲状态.
当控制器设备初始化开始信号时,应该发送从设备地址去确认从设备,1字节大小,包含7位地址和1位读写位,第八位为0时,为写,为1则是读.
当控制器发送停止信号是就会完成发送操作,如果控制器想继续发送数据到总线上,应该要重新产生另一个开始信号和从地址.同时,读写有很多样的格式操作.
  • 数据发送格式


SDA上的每一字节都为8位长,但传送过程中传送的字节数量没有限制,而跟在开始信号后的第一个字节必须是地址域,后每一字节都返回ACK信号.
  • 确认信号发送

在接收端接收到每一字节的数据后,接收端会发送一个确认信号ACK到发送端.而这个信号将发生在数据的第九位.
  • 重写操作
当I2C控制器在发送模式发送数据时,I2C总线接口会等待I2C数据移位寄存器接收新的数据.在写入新数据到寄存器前,SCL会保持低电平,I2C控制器会在写完数据后释放SCL.CPU会保持中断来识别当前数据发送的是否完成,在CPU接收到中断请求的时候,会继续写入新的数据到移位寄存器中
当I2C控制器在接收模式接收数据时,I2C总线接口会在I2C移位寄存器读完之前等待,在读取新数据前,SCL会保持地点片,而在读完数据后释放SCL.CPU会保持中断来识别新数据是否已经接收完毕,在CPU接收到中断请求是,就会读取I2C移位寄存器.
  • 总线仲裁进程
当2个控制器在在SDA上发生冲突时,仲裁就会产生.当一个控制器的SDA为高电平探测到另一个控制器的SDA为激活状态的低电平,就不会初始化数据传输.这是因为当前的总线与初始化数据传输不对应.
当2个以上的控制器把SDA同时拉低的时候,每一个控制器都会评估是否已经有控制器控制.每一个控制器探测地址位,来评估.当每一个控制器都产生从设备地址,就会探测SDA上的地址位,这是因为SDA会置低电平的原因.
  • 终止条件
当从设备接收端不能确认从地址,SDA会置高,这时,控制器就会产生停止信号和取消发送.
  • 配置I2C总线
要控制SCL的频率,就是写4-bit 预换算装置的值,这个值在I2CCON寄存器中.而I2C总线接口地址则保存在I2C总线地址寄存器I2CADD中.默认的情况下,I2C总线接口地址有一个不确定的值.


调试注意事项:

  1. 需要的话,设置自己的从设备地址 I2CADD寄存器中
  2. 设置寄存器 a)使能中断 b)定义SCL周期
  3. 设置I2CSTAT来使能串口输出.








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值