目录
1 I2C协议
1.1 简介
1.2.信号类型
①开始信号(S)
②结束信号(P)
③响应信号(ACK)
1.3 数据传输格式
2.1 I2C总线控制器介绍
2.2寄存器设置
简介
IICCON寄存器
IICSTAT寄存器
IICADD寄存器
IICDS寄存器
2.3 S3C2440 I2C总线操作方法
2.3.1.启动或者恢复I2C传输
2.3.2.通过中断服务程序来驱动I2C传输
2.3.3主机发送器的工作流程。
3、编程实例
I2C总线是一种串行总线,用于连接微控制器及其外围设备,具有以下特点:
一些术语:
发送器:发送数据到总线的器件
接收器:从总线接收数据的器件
主机:发起/停止数据传输、提供时钟信号的器件
从机:被主机寻址的器件
多主机:可以有多个主机试图去控制总线,但是不会破坏数据
仲裁:当多个主机试图去控制总线时,通过仲裁可以使得只有一个主机获得总线控制权,并且它传输的信息不会被破坏
同步:多个器件同步时钟信号的过程
I2C总线在传送数据过程中共有3种类型信号:开始信号、结束信号和响应信号
SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据;
SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据;
接收器在接收到8位数据后,在第9个时钟周期,拉低SDA电平。
发送到SDA线上的每个字节必须是8位的,每次传输可以发送的字节数量不受限制。每个字节后必须跟一个响应位。首先传输的是数据最高位。
如果从机要完成一些其他功能后才能继续接收或发送,从机可以拉低SCL迫使主机进入等待状态。当从机准备好接收并释放SCL后,数据继续传输。如果主机在传输数据期间也需要完成一些其他功能也可以拉低SCL以占住总线。
启动一个传输时,主机先发出S信号,然后发出8位数据。前7位为从机地址,第8位表示传输方向(0表示写操作,1表示读操作)。被选中的从机发出响应信号。跟着传输一系列字节及响应位。最后,主机发出P信号结束。
下列三种情况不会有ACK信号:
①当从机不能响应从机地址时(从机忙于其他事无法响应IIC总线操作或这个地址没有对应从机),在第9个SCL周期内SDA线没有被拉低,即没有ACK信号。这时,主机发送一个P信号终止传输或者重新发送一个S信号开始新的传输。
②从机接收器在传输过程中不能接收更多的数据时,也不会发出ACK信号。主机意识到这点,从而发出一个P信号终止传输或者从新发送一个S信号开始新的传输。
③主机接收器在接收到最后一个字节时,也不会发出ACK信号,于是,从机发送器释放SDA线,允许主机发送P信号结束传输。
S3C2440的IIC接口有4种工作方式:主机发送器、主机接收器、从机发送器、从机接收器。
从上图可知,S3C2440使用四个寄存器来完成所有的I2C操作。SAD线上的数据从IICDS寄存器发出,或传入IICDS寄存器;IICADD寄存器中保存S3C2440当做从机时的地址;IICCON、IICSTAT两个寄存器用来控制盒标识各种状态,例如:选择工作模式,发出S信号,发出P信号,决定是否发出ACK信号,检测是否收到ACK信号。
各寄存器的设置如下:
IICCON寄存器用于控制是否发出ACK信号、设置发送器的时钟、开启IIC中断,并标识中断是否发生。
使用IICCON寄存器时,应注意
IICSTAT寄存器用于选择IIC接口的工作模式,发出S信号、P信号,使能接收/发送功能,并标识各种状态,比如总线仲裁是否成功、作为从机时是否被寻址、是否接收到0地址、是否接收到ACK信号。
IICADD寄存器[7:1]表示从机地址,IICADD寄存器在串行输出使能位IICSTAT[4]为0时,才可以写入,在任何时候都可以读取
IICDS寄存器[7:0],保存要发送或已经接收到的数据,IICDS寄存器在串行输出使能位IICSTAT[4]为1时,才可以写入,在任何时候都可以读取
有以下两种方法:
(1)当IICCON[4]即中断状态标志位为0时,通过写IICSTAT寄存器启动I2C操作,有两种情况:
(2)当IICCON[4]即中断状态标志位为1时,表示I2C被暂停,在这期间,设置好其它寄存器后,向IICCON[4]写入0即可恢复I2C操作。所谓“设置其它寄存器”有以下几种情况:
(1)当仲裁失败时发生中断,即是本次传输没有抢到总线 ,则需要稍候继续。
(2)对于主机模式,当发出S信号,地址信息并经过一个SCL周期(对应ACK信号)后,发生中断,主机可在此时判断是否成功寻址到从机。
(3)对于从机模式,当接收到的址与IICADD寄存器相吻合时,发生出ACK信号,然后发生中断,从机可在此时准备后面的传输。
(4)对于发送器,当发送完一个数据并经过珍上SCL周期(对应ACK信号)后,发生中断,这时可以准备下一个将要发送的数据,或者发出P信号以停止传输。
(5)对于接收器,当接收到一个数据时,先根据IICCON[7]以决定是否发出ACK信号,然后发生中断。这里可以读取IICDS寄存器得到数据,并设置IICCON[7]以决定接收到下一个数据后是否发出ACK。
对于以上的几中工作模式,数据手册中都有操作流程图,现以主机发送器为例说明一下它的工作流程。
(1)配置主机发送器各类参数,设置GPE14,GPE15引脚用于SCL,SDA,设置IICCON寄存器选择I2C发送时钟,最后,设置IICSTAT[4]为1,这样,后面才能写IICDS寄存器。
Note:初始化时,IICCON[4]为0,不能将IICSTAT设置为主机模式,否则就会立刻发送S信号,发送IICDS寄存器的值 。
(2)将要寻址的从机地址写入到IICDS寄存器。
(3)将0XF0(11110000)写入到IICSTAT寄存器,即设为主机发送器,全能串行输出功能,发出S信号。
(4)发出S信号后,步骤2中设置的IICDS寄存器的值也将会被发出去,它用来寻址从机。
(5)在响应周期后,发生中断,此时IICCON[4]为1,I2C传输暂停。
(6)如果没有数据要发送,则跳到步骤10准备结束传输,否则就执行步骤7继续传输。
(7)将下一个要发送的数据写入到IICDS寄存器中。
(8)往IICCON[4]中写入0,恢复I2C传输。
(9)这时IICDS寄存器中的值将被一位一位的发送出去,当8位数据发送完毕,再经过另一个SCL周期(对应ACK信号)后,中断再次发生,跳到步骤5.
(10)将0xD0写入IISTAT寄存器,即:设为主机发送器,全能串行输出功能,发出P信号。
(11)清除IICCON[4],P信号得以发出。
(12)等待一段时间,使得P信号完全发出。
https://download.csdn.net/download/ce123/12305412