资讯详情

Linux应用开发(十一)——I^2C接口

文章目录

  • 前言
  • 一、I^2C总线协议及硬件介绍
    • I^2C总线
      • I^2C总线概念
      • I^2C总线的信号类型
      • I^2C总线的数据传输格式
    • S3C2410总线控制器
      • S3C2410总线控制寄存器介绍
      • IICCON寄存器
      • IICSTAT寄存器
      • ICCADD寄存器
      • IICDS寄存器
    • S3C2410 IIC总线操作方法
      • 方法一
      • 方法二
    • 驱动中断服务程序IIC传输
    • IIC寄存器操作流程
  • IIC总线操作实例
    • IIC接口RTC芯片M41t11的操作方法
  • 总结


前言

  • 了解I^2C总线协议
  • 掌握S3C2410中I^2C使用接口的方法

一、I^2C总线协议及硬件介绍

I^2C总线

I^2C总线概念

I^2C(又称IIC)总线是一种由PHILIPS连接微控制器和外围设备的公司开发的串行总线具有以下特点

  • 只有两条总线:一条串行数据线(SDA),串行时钟线(SCL)。
  • 每个连接到总线的设备都可以根据其唯一的地址使用软件来识别
  • 传输数据的设备间是简单的主/从关系。
  • 主机可用作主机发送机或主机接收器。
  • 它是一条真正的多主机总线。当两个或两个以上的主机同时启动数据传输时,可以通过冲突检测和仲裁来防止数据被打破
  • 在标准模式下,串行的8位双向数据传输位速率可达100kbit/s,在快速模式下可以达到3.4Mbit/s。
  • 片上的滤波器可以增加抗干扰功能,保证数据的完整性
  • 连接到同一总线的IC数量只受到总线的最大电容400pF的限制 在这里插入图片描述I^2C定义总线术语 :将数据发送到总线的设备 :从总线接收数据的设备 :启动设备停止数据传输,提供时钟信号 :被主机搜索的设备 :可以有多个主机试图控制总线,但不会破环数据 :当多个主机试图控制总线时,只有一个主机可以通过仲裁获得总线控制,其传输的信息不会被破坏 :同步时钟信号的过程

I^2C总线的信号类型

I^2C在传输数据的过程中,总线有三种信号:开始信号、结束信号和响应信号。 :SCL高电平时,SDA数据从高电平跳转到低电平跳转。 :SCL高电平时,SDA数据从低电平跳转到高电平跳转结束。 :接收到8位数据后,接收器在第九个时钟周期下降SDA电平。 如图所示: SDA必须在上传数据SCL在高电平期间保持稳定,SDA上的数据只能在SCL低电平期间的变化。

I^2C总线的数据传输格式

发送到SDA每个字节在线必须是8位,每次传输可以发送的字节数量不受限制。每个字节后必须有一个响应位。首先传输的是数据的最高水平。在继续接收或发送下一个字节之前,如果从机器需要完成其他功能(如内部中断服务程序)SCL迫使主机进入等待状态。准备好接收下一个数据并释放它SCL之后,数据传输继续。如果主机还需要在传输数据过程中完成一些其他功能(例如,内部中断服务程序)SCL占总线。 启动传输时,主机首先发送S信号,然后发送8位数据。这8个数据中的前7位是从机地址,第8位是传输方向(0表示写作操作,1表示读取操作)。选定的从机器发出响应信号。然后传输一系列字节及其响应位置。最后,主机发送P信号以结束传输。

  • 主机发出开始信号,传输一个8位数据(前7位表示第一个7位数据识别从机地址,后一位表示操作(R/W)它决定了数据传输的方向,写为主机-从机,读取从机-主机)。同时,选定的从机发出响应信号表示收到。
  • 注意区分不同模式下的格式和步骤

传输8位数据后不会有ACK3中有例外。

  1. 当机器无法响应主机地址时(例如,它忙于其他事情而无法响应)I^2C总线的操作,或者这个地址没有相应的从机),在第九个SCL周期内SDA线没有被拉低,即没有ACK信号。此时,主机发出P信号终止传输或重新发出S信号开始新的传输。
  2. 如果从机接收器在传输过程中不能接收更多数据,它就不会发出ACK信号。这样,主机就可以意识到这一点,从而发出P信号终止传输或重新发出S信号开始新的传输。
  3. 接收到最后一个字节后,主机接收器不会发出ACK所以从机发送器释放信号。SDA允许主机发出P信号结束传输。

S3C2410总线控制器

S3C2410总线控制寄存器介绍

S3C2410的I^2C接口有四种工作模式:主机发送器、主机接收器、从机发送器和从机接收器。内部结构如下: 从图中可以知道S3C2410提供4个寄存器来完成所有I^2C操作。SDA从在线数据IICDS寄存器发出,或传入IICDS寄存器中;IICADD保存在寄存器中S3C2410作为从机时的地址;IICCON、IICSTAT用于控制或识别各种状态的两个寄存器,例如选择工作模式,发送S信号,P决定是否发出信号ACK检查信号是否接收ACK信号。各寄存器的用法如下:

IICCON寄存器

IICCON寄存器用于控制是否发出ACK设置发送器时钟,打开信号I^2C中断,并标记中断是否发生。您的意思如下: 使用IICCON寄存器时,使用注意事项

  • I^2C中断在一下3中情况下发生:当发出地址信息或接收到一个从机地址并且吻合时,当仲裁线失败时,当发送/接收完一个字节的数据时。
  • 基于SDA,SCL线上时间特性的考虑,要发送数据时,先将数据写入IICDS寄存器,然后再清楚中断。

IICSTAT寄存器

IICSTAT寄存器用于选择I^2C接口的工作模式、发出S信号、P信号,使能接收/发送功能,并标识各种状态,比如总线仲裁是否成功、作为从机时是否被寻址、是否接收到0地址、是否接收到ACK信号等。 功能如下:

ICCADD寄存器

表示从机地址。IICADD寄存器在串行输出使能位IICSTAT[4]为0时(禁止接收/发送功能),才可以写入;在任何时间都可以读出.

IICDS寄存器

保存要发送或已经接收的数据。IICDS寄存器在串行输出使能位IICSTAT[4]为1时,才可以写入;在任何时间都可以读出。

S3C2410 IIC总线操作方法

方法一

当IICCCON[4]即中断状态为为0时,通过写IICSTAT寄存器启动IIC操作

方法二

当IICCON[4]写入0即中断状态位为1时,表示IIC操作被暂停。在这期间设置好其他寄存器之后,向IICCON[4]写入0即可恢复IIC操作。所谓"设置其他寄存器"有以下3种情况。

  • 对于主机模式可以按照方法一
  • 对于发送器,可以将下一个要发送的数据写入IICDS寄存器中,恢复IIC操作后即可发出
  • 对于接收器,可以从IICDS寄存器中读出收到的数据。最后向IICON[4]写入0的同时,设置IICCON[7]决定接收到下一个数据是否发出ACK信号。

通过中断服务程序来驱动IIC传输

  • 当仲裁失败时发生中断——本次传输没有抢到总线,可以稍后继续
  • 当主机模式,发出S信号、地址信息并经过一个SCL周期(对应ACK信号)后,发送中断——主机可以在此时判断是否成功寻址到从机。
  • 对于从机模式,当接收到地址与IICADD寄存器吻合时,先发出ACK信号,然后发生中断——从机可在此时准备后续的传输。
  • 对于发送器,当发送完一个数据并经过一个SCL周期后,发生中断。这时候可以准备发下一个,也可以发P信号结束传输’
  • 对于接收器,当接收到一个数据时,先根据IICCON7决定是否发出ACK信号后,然后发出中断。

IIC寄存器操作流程

IIC总线操作实例

对应着上面的开发流程进行编写程序就行

IIC接口RTC芯片M41t11的操作方法

源码部分,大家参考一下教材,后面有机会一起分析。

总结

今天有点赶时间,但是IIC很重要,在做汽车方面与CAN总线都有着一样的重要性,基本上工作上面对IIC的要求都很多。

标签: 2c305电容器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台