IIC
今天开始学习IIC总线的相关内容,这里是一个学习记录帖,刚开始学,所以只是一个简单的入门,如果有什么理解错误的地方,希望可以指出,非常感谢。
首先,IIC是一种通讯协议,什么是通讯协议,可以理解为计算机的交流语言,比方说我们自己想写一个协议,我们可以规定对方发来1时我们做什么操作,对方发来0时我们做什么操作等等,只要可以将这套流程写成一套体系,而且在两个收发设备中嵌入对这种我们自己规定好的语言的处理,就可以直接使用这个我们自建的协议,就像人说话一样,我们看到木头雕刻成的可以坐的东西,我们将其称之为板凳,我们两个人交流的时候,大家脑子里都有板凳的概念,所以在对方说板凳时我们就知道对方的意思,因为我们都是遵循同一套语言,在计算机的数据收发中,这就叫遵循一套协议。
IIC就是这样的一套语言,它规定了数据收发的一种规则,只要双方都按照这种规则发送数据,两台设备之间就可以进行数据传输。我们说话是通过空气作为介质进行传输的,而IIC则是通过一条信号线和一条时钟线进行传输的。当我们把所有需要使用IIC的设备的信号线和时钟线连在一起,传输网络就搭好了。因为时钟线都是连在一起的,所以IIC也就不需要像UART一样设置波特率了。
然后我们开始看手册中关于该协议的介绍。
首先是“芯片间”,因为IIC数据收发时,数据的传输不是很稳定,所以不能进行远距离传输,距离越远,干扰越厉害,所以IIC通常用于同一开发板上的几个芯片之间的传输。 “串行”,这个的意思就是说发送数据的线路只有一条,这条线路的数据需要一位一位的发送,比方说发送一串高低电平时,就需要先发第一位,再发第二位......,与之相对的是并行通讯,即数据的传输线有多条,比方说有8条数据传输线,那这8条线就可以同时传输数据,每条线同时发一位,那一次就可以发送一个字节。
“多主机”,这个就是说,一条IIC总线上,可以挂接多个设备,而且可以设置多个主机,但要注意,虽然可以设置多个主机,但在使用IIC进行通讯时,只能有一个主机使用,因为两个主机同时发数据的话,谁知道总线上的数据发的是什么,直接就乱套了。
然后其他的就自己看看,后面有一个DMA,这个东西是用于数据传输的,它不通过CPU直接将数据从存储器传输到存储器,从外设传输到存储器等等,可以释放一定的cpu使用,让cpu去完成其他工作。
接下来我们大概总结一下IIC的传输流程:下图是手册上的图,大概看看,下面的文字描述与其关系也不大。
首先,前面说到IIC是“多主机”,与主机对应的还有“从机”这一概念,在IIC中,主机可以用来启停IIC总线,从机只能通过主机的调控做出相应的操作。在启动一次IIC收发数据时,需要主机先向IIC总线发送一个开始信号,这样就是为了告诉其他主机,IIC总线已被占用,然后需要 发送一个字节的信号,这个字节的前七位用来指明主机想要通讯的从机的地址,在IIC中,每个设备的地址大多使用一个7bit数据来表示,这个字节的最后一位指明主机与从机之间,谁是发送数据的,谁是接收数据的,然后从机收到后,会发送一个应答信号,表示自己接收到了,然后就开始传输数据,以主机发数据,从机接收数据为例,这个时候开始主机发送数据,主机发送一个字节,从机收到后再回复一个应答信号,主机再发,从机再回,一直到数据发送完成,最终主机发送停止信号,这时总线上挂接的其他设备一看,总线没设备用了,想用的就可以开始发送开始信号了。
补充:当主机的发送开始信号后,再次发送的一个字节进行地址和数据收发选择时,这个字节的最后一位如果是0,则表示主机发送数据,1则表示主机读取数据。在应答时,接收数据的设备发送一个低电平在总线上,表示接收数据。
上面就是IIC的大概通讯流程,写的很简单,等以后学的深入了,可能还会再记录,虽然上面的流程是这样,但这只是原理,如果想要去用,还是需要加一些内容的,比方说需要读取内容的寄存器等等。