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)结束信号
在通讯结束后,主设备发送停止信号,释放总线。