通信双方本质上是通过时序在工作,但是时序会比较复杂不利于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的频率。
最霸气的国产SUV-潍柴英致U80,配置如何?
光纤光栅传感器的基本原理及实际应用
首个无监督3D点云物体实例分割算法
射频滤波器的类型
STM32的USB键盘及鼠标例程
S5PV210的I2C控制器简介
接触器的自锁和互锁图文详解
马云:与其担心AI抢工作 不如拥抱技术解决新问题
基于FPGA的 I²C 接口的芯片通信设计
融合FPGA、ASSP特性,重新定义影像桥接芯片
输电线路外破的原因和预防措施以及激光防外破监测装置的应用
有哪些佩戴舒适的降噪耳机?国庆出游必备佩戴舒适的降噪蓝牙耳机
自动气象站中接地系统的应用设计方案
各路大牛探讨人工智能未来的好与坏 普京强调人工智能关系国家未来
开口式霍尔电流传感器帮助直流配电系统智能改造
华为总裁表示排除华为将破坏公平竞争并导致极为负面的影响
中国移动宣布政企客户总数累计已突破718万服务集团成员数超过2.8亿
多普光电:销售额已超过1.1亿,营收同比大幅增长
太阳能电池特性
在ART-Pi Smart上对摄像头采集的数据进行车标识别