arm底层通讯之IIC通讯原理

1、串口和并口

    串口:相当于我们初高中物理学习的串联电路,数据传输是一次一个bit一个bit的传输(uart、IIC、SPI)

    并口:相当于物理电路中的并联电路,数据传输是一次多个bit位的传输

2、同步和异步

    同步:通讯收发双方通讯的过程是严格参考同一通讯时钟完成(IIC、SPI),通讯同步全靠SCL时钟线。

    异步:通讯收发双方在通讯过程中,各自参考各自的时钟完成(uart)。

    举个例子,假设现在在考试,考试规定的时间从9点到10点,时长1个小时:

   (1)同步通讯:假设考场内墙壁上有挂钟,所有考试从考试开始到结束,这个过程时钟参考都是墙壁上的挂钟,考试开始和结束完全都是同步的(因为大家都是看的一个时钟)。

   (2)异步通讯:假设考场内墙壁上没有挂钟,考试开始和结束时间参考都是每个考生自带的手表,那么虽然大家的手表大体时间都一致,但是总会有个别同学手表时间会快或者慢1s的。

3、单工、半双工、全双工

    单工:数据传输方向固定,不可更改,就像单向车道一样,所有在单向车道行驶的车辆,永远只能直行

    半双工:数据传输方向不固定,既能够接收数据,也能够发送数据,但是同一时刻只能接收或者只能发送。就像对讲机一样,按住通讯开关后,你只能说话,对方只能听,等你说完释放开关后,对方按住开关,对方只能说,你也只能听。

    全双工:数据收发可以在同一时刻同时进行。就像手机一样,你在说的同时,也能够听到对方说话,对方在听你说话的同时,也能够说话。

    

4、IIC物理接口

    (1)SCL接口

            时钟线,用来作为IIC通讯过程中的信号同步。

    (2)SDA接口

            数据线,在通讯过程中,完成数据接收和发送,注意在同一时刻只能够发送或者只能够接收,二者不能同时进行,这就是半双工。并且收发都是1位1位进行的。

            正常情况下,SCL和SDA处在高电平时候,表示整个IIC总线处在空闲状态。

5、IIC主从设备

    IIC通讯收发双方是分主从设备的,究竟一个IIC设备是主设备还是从设备,这个不是IIC通信协议规定的,这个是通讯的双方自己规定的。一般一个硬件芯片可以只作为主设备、也可只作为从设备、或者既能够作为主设备也能够作为从设备。

    IIC通讯是支持1主多从、1主1从(1对多、1对1)。那么在1对多时,主设备怎么从多个从设备中选中跟哪个从设备通讯呢?每一个IIC从设备在通讯的时候都需要有一个从设备地址,这个从设备地址(或者说是设备号,一般是)在整个电路板上是唯一的,但是全球不唯一,并且一般在设备生产的时候,由生产商指定。主设备要想从众多个从设备中选中通讯设备,需要知道该从设备地址,然后向总线广播该设备地址,这样每个挂在IIC总线上的从设备都能够收到,他们会各自比较自己的从设备地址,看是否一致,一致表明是和自己通讯,不一致,表示不是和自己通讯,那么就会休眠。

                

                                                                            (图片来自网络)


6、通讯过程

    首先,整个IIC通讯的开始和结束是由IIC主设备控制的,在通讯开始前,SCL和SDA总线都处在高电平空闲状态:


    (1)起始信号

            主设备发送起始信号开始,获得对IIC总线控制,结束总线空闲状态。起始信号实质就是一组组合信号:SCL保持高电平不变,SDA输出低电平。停止信号实质是:SCL保持高电平不变,SDA输出高电平。


    (2)选中IIC从设备

            IIC主设备将要通讯的从设备地址(必须事先查找从设备芯片手册获取好),通过SDA发送出去,然后每个从设备收到从     设备地址后,会各自比对自己的从设备好,识别主设备是不是跟自己通讯,是的话就会发送一个ACK应答信号。

            这里注意,由于IIC通讯属于半双工,同一时刻只能接收或者发送,所以需要先确认是使用发送还是接收,因此在发送从设备地址(从设备地址一共7bit)的时候,需要确定下来,IIC接下来的通讯方向是接收还是发送,因此在发送IIC从设备地址的时候,会将7bit从设备地址左移1bit,在空出来的第0bit表示是发送还是接收(写/读):0-表示发送(写),1-表示接收(读)。

    (3)接收ACK应答信号

            IIC从设备在收到主设备发送来的从设备地址后,会发送一个ACK应答信号(实际就是在发送完7bit的从设备地址+读写标记后的第9个周期,从设备发送一个bit的0),表示从设备知道自己被选中了,只要从设备没有发送一个bit的0,就表示非ACK应答(实质就是一个bit的1或者干脆什么都没发送)

   

    (4)数据传输

            (1)收发数据的时候,都是高bit在前,先发送。

            (2)发送方将要发送的bit,在SCL处在低电平期间

            发送方没发送一个byte的数据,接收方都会回一个ACK信号,表示发送的byte接收到了。

    (5)结束信号

            在通讯结束后,主设备发送停止信号,释放总线。



猜你喜欢

转载自blog.csdn.net/CSDNmianfeixiazai001/article/details/79419203