几种通信方式
- 格式:docx
- 大小:128.26 KB
- 文档页数:9
一IIC总线I2C--INTER-IC串行总线的缩写,是PHILIPS公司推出的芯片间串行传输总线。
它以1根串行数据线(SDA)和1根串行时钟线(SCL)实现了双工的同步数据传输。
具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。
在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。
IC 接口的协议里面包括设备地址信息,可以同一总线上连接多个从设备,通过应答来互通数据及命令。
但是传输速率有限,标准模式下可达到100Kbps,快速模式下可达到400Kbps(我们开发板一般在130Kbps),高速模式下达到4Mbps,不能实现全双工,不适合传输很多的数据。
IIC总线是一个真正的多主机总线,总线上多个主机初始化传输,可以通过传输检测和仲裁来防止数据被破坏。
下来详细了解IIC总线时序:1.1 总线数据有效性IIC总线是单工,因此同一时刻数据只有一个流向,因此采样有效时钟也是单一的,是在SCL 时钟的高电平采样数据。
IIC总线上SDA数据在SCL时钟低电平是可以发生变化,但是在时钟高电平时必须稳定,以便主从设备根据时钟采样数据,如下图:1.2 总线空闲条件IIC总线上设备都释放总线(发出传输停止)后,IIC总线根据上拉电阻变成高电平,SDA SCL 都是高电平。
1.3 总线数据传输起始和结束条件IIC总线SCL高电平时SDA出现由高到低的跳变,标志总线上数据传输的开始条件IIC总线SCL高电平时SDA出现由低到高的跳变,标志总线上数据传输的结束条件1.4 总线数据传输顺序以及ACK应答IIC总线上数据传输室MSB在前,LSB在后,从示波器上看,从左向右依次读出数据即可IIC总线传输的数据不收限制,但是每次发到SDA上的必须是8位,并且主机发送8位后释放总线,从机收到数据后必须拉低SDA一个时钟,回应ACK表示数据接收成功,我们如果示波器上看到的波形就是每次9位数据,8bit+1bit ack。
如下:从机收到一字节数据后,如果需要一些时间处理,则会拉低SCL,让传输进入等待状态,处理完成,释放SCL,继续传输,如下:1.5 总线读写时序数据的传输在起始条件之后,发送一个7位的从机地址,紧接着第8位是数据方向(R/ W),0-表示发送数据(写),1-表示接收数据(读)。
数据传输一般由主机产生的停止位(P)终止。
但是如果主机仍希望在总线上通讯,它可以产生重复起始条件(Sr),和寻址另一个从机,而不是首先产生一个停止条件。
在这种传输中,可能有不同的读/写格式结合。
IIC总线主设备读写从设备,一般都是与从设备的寄存器打交道,这个可以通过阅读从设备的datasheet获取。
总线写时序如下:master start + master addr|w + slave ack + master reg|w + slave ack + master data + slave ack + master restart。
master data + slave nack + master stop总线读时序如下:master start + master addr|w + slave ack + master reg|w + slave ack + master restart + master addr|r + slave ack + slave data + master nack + master stop总线读时序与写的不同之处在于读需要2次传输才能完成一次读取,首先要写寄存器地址到从设备,其实是写到了从设备的控制寄存器或者命令寄存器,从设备内部会根据这个地址来寻址所要操作的寄存器。
我在读我们的bios和内核时发现,2者在总线读时序上的实现不太一样,在于第一次寄存器地址写入后,一个发的是restart,一个发的是stop,然后再start开始读取数据,示波器抓波形发现读取数据都正确,说明这2种时序都是正确的。
IIC总线的读写时序比较固定,设备通信严格遵循协议,因此iIC总线设备驱动程序的编写也就相对简单一些。
主要应用的iIc总线设备有touchscreen rtc 外扩io等二SPI总线SPI--Serial Peripheral Interface,串行外围设备接口,是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。
SPI通常有SCK时钟,STB片选,DATA数据信号三个信号。
I2C通常有SDA数据和SCL 时钟两个信号。
SPI总线真正实现了全双工数据传输,SPI 有3线跟4线两种,4线的话,就是多了一条叫SDC的线,用来告知从设备现在传输的是数据还是指令。
这个接口较快,可以传输较连续的数据。
SPI要想连接多个从设备,就需要给每个从设备配备一根片选信号。
如果要可以实现全双工,也是需要多加一根数据线(MOSI MISO)。
也就是说SPI总线是通过片选来选择从设备。
spi总线速度要比iic要快,我们开发板最快能达到30MHZ。
spi总线特点:1. 采用主-从模式(Master-Slave) 的控制方式SPI 规定了两个SPI 设备之间通信必须由主设备(Master) 来控制次设备(Slave). 一个Master 设备可以通过提供Clock 以及对Slave 设备进行片选(Slave Select) 来控制多个Slave 设备, SPI 协议还规定Slave 设备的Clock 由Master 设备通过SCK 管脚提供给Slave 设备, Slave 设备本身不能产生或控制Clock, 没有Clock 则Slave 设备不能正常工作.2. 采用同步方式(Synchronous)传输数据Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性(CPOL) 和时钟相位(CPHA) 控制着两个SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的.3. 数据交换(Data Exchanges)SPI 设备间的数据传输之所以又被称为数据交换, 是因为SPI 协议规定一个SPI 设备不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)" 或者"接收者(Receiver)". 也就是说是全双工的,在每个Clock 周期内, SPI 设备都会发送并接收一个bit 大小的数据, 相当于该设备有一个bit 大小的数据被交换了.一个Slave 设备要想能够接收到Master 发过来的控制信号, 必须在此之前能够被Master 设备进行访问(Access). 所以, Master 设备必须首先通过SS/CS pin 对Slave 设备进行片选, 把想要访问的Slave 设备选上.在数据传输的过程中, 每次接收到的数据必须在下一次数据传输之前被采样. 如果之前接收到的数据没有被读取, 那么这些已经接收完成的数据将有可能会被丢弃, 导致SPI 物理模块最终失效. 因此, 在程序中一般都会在SPI 传输完数据后, 去读取SPI 设备里的数据, 即使这些数据(Dummy Data)在我们的程序里是无用的.具体spi工作原理可以看博客另外一篇文章SPI和IIC是2种不同的通信协议,现在已经广泛的应用在IC之间的通信中。
并且不少单片机已经整和了SPI和IIC的借口。
但像51这种不支持SPI和IIC的单片机,也可以用模拟时钟的工作方式进行SPI和IIC的通信的。
下面主要总结一下2种总线的异同点:1 iic总线不是全双工,2根线SCL SDA。
spi总线实现全双工,4根线SCK CS MOSI MISO2 iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。
spi总线只有一个主设备,主设备通过CS片选来确定从设备3 iic总线传输速度在100kbps-4Mbps。
spi总线传输速度更快,可以达到30MHZ以上。
4 iic总线空闲状态下SDA SCL都是高电平。
spi总线空闲状态MOSI MISO也都是SCK 是有CPOL决定的5 iic总线scl高电平时sda下降沿标志传输开始,上升沿标志传输结束。
spi总线cs拉低标志传输开始,cs拉高标志传输结束6 iic总线是SCL高电平采样。
spi总线因为是全双工,因此是沿采样,具体要根据CPHA 决定。
一般情况下master device是SCK的上升沿发送,下降沿采集7 iic总线和spi总线数据传输都是MSB在前,LSB在后(串口是LSB在前)8 iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟9 iic总线读写时序比较固定统一,设备驱动编写方便。
spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。
3. SMBusSMBus是一种二线制串行总线,1996年第一版规范开始商用。
它大部分基于I2C总线规范。
和 I2C一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100kHz且专门面向智能电池管理应用。
它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。
SMBus与I2C总线之间在时序特性上存在一些差别。
首先,SMBus需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。
SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。
相反,I2C采用硬件复位。
SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。
SMBus只工作在从10kHz到最高100kHz。
最低工作频率10kHz是由SMBus超时功能决定的。