i2c驱动--i2c总线接口
2017-09-05 17:17
281 查看
i2c总线协议
i2c总线的物理结构:
通过控制SCL(串行时钟线)和SDA(串行数据线)高低电平时序,进行数据的传输。
总线空闲状态,上拉电阻拉高SCL和SDA,保持高电平。
i2c总线上的设备既可以作为主设备,也可以作为从设备。每一个设备都会对应一个唯一的地址,主从设备之间就通过这个地址来确定与哪个器件进行通信。
i2c总线信号类型:
开始信号(s):SCL为高电平,SDA由高电平向低电平跳变。结束信号(p):SCL为高电平,SDA由低电平向高电平跳变。
响应信号(ack):接收到8位数据,在第九个时钟周期,拉低SDA电平。
主设备在SCL线上产生每个时钟脉冲的过程中将在SDA线上传输一个数据位,当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位, 此时才认为一个字节真正的被传输完成。
i2c总线数据传输格式:
发送到SDA线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个响应位。首先传输的是数据的最高位MSB。
如果从机要完成一些其他功能后,例如一个内部中断服务程序才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态。当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续 。
启动传输,主机先发出S信号,然后发八位数据。
八位数据,前七位是从机地址,第八位是传输方向。
从机发响应信号,然后传输字节和下一次的响应信号。
最后主机发送结束信号 P。
i2c总线控制器
IICDS:SDA线上的数据从IICDS发出或者传入IICDS
IICADD:从机地址
IICCON、IICSTAT:控制和标识各种状态。
i2c主机发送器的工作流程
(1)配置GPE15、GPE14用于SDA,SCL。
设置IICCON寄存器选择I2C发送时钟,设置IICSTAT[4]为1(使能接收/发送功能),为写IICDS准备。
(2)从机地址写入IICDS,用于寻址。
(3)IICSTAT中写入0xf0,参考寄存器说明可知,设置为主机发送器、发出S信号、使能接收/发送功能。
(4)发出S信号,IICDS中从机信号被发出,寻址,即找要写入的地址。
(5)在(1)中已经设置了IICCON[4]为1,响应周期后发生中断,I2c传输停止。
(6)没有数据要写入,跳转(10)。否则跳转到(7)。
(7)将要发送的数据写入IICDS。
(8)IICCON[4]写入0,恢复传输。
(9)IICDS寄存器中的数据一位一位发出。八位数据发送完毕,再经过一个SCL周期(第九周期ACK响应信号),中断再次发生,跳转到(5)。
(10)IICSTAT中写入0xd0,参考寄存器说明可知,设置为主机发送器、发出P信号、使能接收/发送功能。
相关文章推荐
- I2C驱动之总线接口i2c_transfer
- [Craftor原创]基于Verilog的I2C总线驱动设计
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- linux下i2c接口的电容触摸屏驱动开发
- 2、STM32基本接口驱动--IO 单总线 串口 SPI IIC
- I2C驱动编程接口
- Linux I2C核心、总线与设备驱动
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
- Linux的I2C 设备驱动 -- mini2440 上i2c接口触摸屏驱动
- DM8148音频驱动Tlv320aic3x换了 I2C 总线后无法发现设备驱动?
- Linux设备驱动---OMAP3630 Linux I2C总线驱动分析(1)
- 总线接口与计算机通信(一)I2C总线
- i2c 驱动编程接口 i2c_master_send 和 i2c_master_recv i2c_transfer
- Linux I2C核心、总线与设备驱动
- RaspberryPi3 驱动 I2C接口的 JY901模块(9轴IMU,自带卡尔曼滤波)
- s5pv210 i2c总线驱动s3c2410.c 完全解析2
- mini2440 平台上挂载I2C接口触摸屏的驱动开发过程
- Linux下I2C接口触摸屏驱动分析
- 基于S3C2440的嵌入式Linux驱动——AT24C02(EEPROM I2C接口)驱动解读
- linux下i2c接口的电容触摸屏驱动开发