文章目录
- 前言
- 一、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中有例外。
- 当机器无法响应主机地址时(例如,它忙于其他事情而无法响应)I^2C总线的操作,或者这个地址没有相应的从机),在第九个SCL周期内SDA线没有被拉低,即没有ACK信号。此时,主机发出P信号终止传输或重新发出S信号开始新的传输。
- 如果从机接收器在传输过程中不能接收更多数据,它就不会发出ACK信号。这样,主机就可以意识到这一点,从而发出P信号终止传输或重新发出S信号开始新的传输。
- 接收到最后一个字节后,主机接收器不会发出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的要求都很多。