S5PV210的I2C控制器

通信双方本质上是通过时序工作,但是时序会比较复杂不利于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,等于65MHz),经过了2级分频后得到的。

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

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

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

扫描二维码关注公众号,回复: 3378360 查看本文章

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

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

I2CADD:用来写自己的slave address

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

猜你喜欢

转载自blog.csdn.net/weixin_40405692/article/details/81603203