一点了,我还是要写,每天进步一点,才能更快的成长,要对自己狠点。
今晚学习的内容是I2C(inter-integrated circuit),习惯就叫I2C总线,一条数据线(SDA),一条时钟线(SCL)。
每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;我们要学习的I2C有哪些特征呢?
1、支持8位数据格式传输;
2、有7位、10位寻址模式;
3、启动字节模式;
4、串行的8 位双向数据传输位速率可在10kbit/s和400kbit/s之间变化;
5、4位深度的FIFO;
再来看下I2C的结构图:
CPU直接操作的是I2CDXR和I2CDRR寄存器,然后再通过相应的移位寄存器,把数据读入写出。
看完了图解,再来看下时钟
I2C的输入时钟与系统时钟同步,它的操作时钟为
然后SCL传输时钟又是以I2C的操作时钟为基础,在上面进行ICCL/ICCH分频,然后输出。
然后再看下操作详解
首先必须要了解下数据的有效性
当时钟处SCL于高电平器件,数据SDA必须稳定不变;在时钟SCL处于低电平器件,SDA才能发生变化。
接着了解操作模式,总共有四种模式,大家直接看解释就行了
下面我们看下非常重要的开始和停止
当时钟SCL处于高电平时,数据SDA从高变低,是开始;当时钟SCL处于高电平时,数据SDA从低变高,是停止。
最后来一起看下串行数据格式
上图是一个7位地址位、8位数据位的例子,分为四部分:开始、传输地址、传输数据、停止。
开始、停止和数据传输都好理解,我们现在看下传输地址。
我们一开始也说了,有7位、10位地址模式,其实还有一个不要地址模式:
看见上面的图,是不是很容易理解这三种方式了,其中10位地址模式,它的地址数据分为两个数据块了,第一个数据块,11110XX(最高两位)。
上面截图里面,一直有一个R/W位:
其实这一位只是显示主机是传输数据还是读入数据。
最后再提一点,就是开始位问题,如果主机要给多个从机发数据,不用每个从机都单独发一次,只用一次就行了
就是在消息块里面,多写几个起始位加地址信息。
好了,I2C的基础理论知识就到这里了,明晚我们实践练习下。
F28027菜鸟交流qq群107691092