S5PV210的I2C控制器简介

控制/MCU

1877人已加入

描述

通信双方本质上是通过时序在工作,但是时序会比较复杂不利于SoC软件完成,于是乎解决方案是SoC内部内置了硬件的控制器来产生通信时序。这样我们写软件时只需要向控制器的寄存器中写入配置值即可,控制器会产生适当的时序在通信线上和对方通信。

1.结构

(1)时钟部分,时钟来源是PCLK_PSYS,经过内部分频最终得到I2C控制器的CLK,通信中这个CLK会通过SCL线传给从设备。

(2)I2C总线控制逻辑(前台代表是I2CCON、I2CSTAT这两个寄存器),主要负责产生I2C通信时序。实际编程中要发送起始位、停止位、接收ACK等都是通过这两个寄存器(背后所代表的电路模块)实现的。

(3)移位寄存器(shift register),将代码中要发送的字节数据,通过移位寄存器变成1个位一个位的丢给SDA线上去发送/接收。学过数字电路的同学应该对移位寄存器不陌生。

(4)地址寄存器+比较器。本I2C控制器做从设备的时候用。(没用过,理论分析)

2.系统分析I2C的时钟

(1)I2C时钟源头来源于PCLK(PCLK_PSYS,等于66MHz),经过了2级分频后得到的。

(2)第一级分频是I2CCON的bit6,可以得到一个中间时钟I2CCLK(等于PCLK/16或者PCLK/512)

(3)第二级分频是得到最终I2C控制器工作的时钟,以I2CCLK这个中间时钟为来源,分频系数为[1,16]

(4)最终要得到时钟是2级分频后的时钟,譬如一个可用的设置是:66000KHz/512/4=32KHz

3.主要寄存器I2CCON、I2CSTAT、I2CADD、I2CDS

I2CCON + I2CSTAT:主要用来产生通信时序和I2C接口配置。

I2CADD:用来写自己的slave address

I2CDS:发送/接收的数据都放在这里

4.I2C从设备的设备地址

(1)KXTE9的I2C地址固定为0b0001111(0x0f)

(2)I2C从设备地址本身是7位的,但是在I2C通信中发送I2C从设备地址时实际发送的是8位,这8位中高7位(bit7-bit1)对应I2C从设备的7位地址,最低一位(LSB)存放的是R/W信息(就是说下一个数据是主设备写从设备读(对应0),还是主设备读从设备写(对应1))

(3)基于上面讲的,对于KXTE9来说,主设备(SoC)发给gsensor信息时,SAD应该是:0b00011110(0x1E)

如果是主设备读取gsensor信息时,SAD应该是:0b00011111(0x1F)

5.I2C从设备的通信速率

(1)I2C协议本身属于低速协议,通信速率不能太高。

(2)实际上通信的主设备和从设备本身都有最高的通信速率限制(属于各个芯片本身的参数),实际编程时怎么确定最终的通信速率?只要小于两个即可。

(3)一般来说只能做从设备的sensor芯片本身i2c通信速率偏低,像KXTE9最高支持400KHz的频率。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分