今天就来聊一聊常用常见的通讯方式I2C,网上对于I2C的讲解也非常的多,在此呢核桃也不想再重复一些概念性的知识点了,着重对通讯的过程做一个小的总结。
看下图1所示:
图1
图1是完整的写与读操作过程,看不懂图1是什么意思也没关系,我们接下来拆开了讲。
先看一下SDA和SCL如何表示逻辑状态的,如下:
SCL在高电平期间,SDA也为高电平时,表示逻辑1。
SCL在高电平期间,SDA为低电平时,表示逻辑0。
SCL在高电平期间,SDA出现下降沿时,表示起始信号。
SCL在高电平期间,SDA出现上升沿时,表示停止信号。
SCL和SDA同时为高电平时,表示总线处于空闲状态。
要想看明白I2C的波形,上面的这些波形图表示的状态得先记住。
我们再看回图2
图2
假如要写入地址1010000,波形是怎么样的?
注意:要进行写操作的话,读/写位必须是0才能有效,要读数据的话需要置1(也就是0表示写,1表示读)
波形如下:
图3
可以看的出来图2和图3的写操作就对应上了。
那是不是这样就通讯成功了呢?
当然不是,主机发地址过去之后,还需要丛机应答,也就是应答位必须为0,如果为1就表示没有收到或者读取完成了。
接着再把8位寄存器地址传过去,同样也需要丛机应答
丛机应答之后,最后再需要写入对应寄存器的数据传过去,然后再收到丛机应答,即可收到停止位了。
以上就是写操作的整个完整的过程,其实理解起来也相对简单,那读操作也是类似,主要和写操作的区别在于:
(1)需要核实两次的地址
(2)读/写位必须置1