前沿

第二篇,一些简单低速的协议。理论+实践才能真正学会了。


1、I2S

 1.1、概念

I2S(Inter—IC Sound)总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专门用于音频设备之间的音频数据传输。标准的I2S总线电缆是由3根串行导线[Z1] 组成的:1根是时分多路复用(简称TDM)数据线;1根是字选择线;1根是时钟线。

 1.1.1、I2S特点

  • 支持全双工/半双工
  • 支持主/从模式
  • 和PCM相比,I2S更适合立体声系统。当然,I2S的变体也支持多通道的时分复用,因此可以支持多声道

1.2、硬件层

1.2.1、I2S总线说明

  • BCLK(SCK):串行时钟,也叫位时钟,对应数字音频的每一位数据。对应数字音频的每一位数据,SCK都有1个脉冲。SCK的频率=2×采样频率(16KHz/44.1KHz)×采样位数(16位/32位)。
  • WS(LRCK):字段(声道)选择,帧时钟,用于选择左右声道。为“0”表示正在传输的是左声道的数据, 为“1”表示正在传输的是右声道的数据。

WS的频率=采样频率。

WS可以在串行时钟的上升沿或者下降沿发生改变,并且WS信号不需要一定是对称的。在从属装置端,WS在时钟信号的上升沿发生改变。WS总是在最高位传输前的一个时钟周期发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令清除空间。

  • SDA:串行数据,用二进制补码来表示音频数据(数据传输从高位到低位)。

用二进制补码表示的音频数据。 I2S格式的信号无论有多少位有效数据,数据的最高位总是被最先传输(在WS变化(也就是一帧开始)后的第2个SCK脉冲处),因此最高位拥有固定的位置,而最低位的位置则是依赖于数据的有效位数。也就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位(常补足为零)。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式和长度。当然,对I2S格式来说数据长度可以不同。

  • MCLK[Z1]:主时钟,也叫系统时钟(Sys Clock)。为了使系统间能够更好地同步。

MCLK的频率=32~1536倍采样频率。

1.2.2、典型I2S信号时序图

对于系统而言,产生SCK和WS的信号端就是主设备,用MASTER表示,简单系统示意图如图1所示:

图表 1 I2S信号时序图

1.2.3、电气规范和时序要求

电气规范:

输出电压: VL <0.4V VH>2.4V

输入电压 VIL<0.8V VIH>2.0V

注:这是使用的TTL电平标准,随着其他IC(LSI)的流行,其他电平也会支持。

时序要求

在I2s总线中,任何设备都可以通过提供必需的时钟信号成为系统的主导装置,而从属装置通过外部时钟信号来得到它的内部时钟信号,这就意味着必须重视主导装置和数据以及命令选择信号之间的传播延迟,总的延迟主要由两部分组成:

  • 外部时钟和从属装置的内部时钟之间的延迟
  • 内部时钟和数据信号以及命令选择信号之间的延迟

对于数据和命令信号的输入,外部时钟和内部时钟的延迟不占据主导地位,它只是延长了有效的建立时间(set—up time)。延迟的主要部分是发送端的传输延迟和设置接收端所需的时间。

T是时钟周期,Tr是最小允许时钟周期,T>Tr这样发送端和接收端才能满足数据传输速率的要求。

对于所有的数据速率,发送端和接收端均发出一个具有固定的传号空号比(mark—space ratio)的时钟信号,所以t LC和tHC是由T所定义的。 t LC和tHC必须大于0。35T,这样信号在从属装置端就可以被检测到。

延迟(tdtr)和最快的传输速度(由Ttr定义)是相关的,快的发送端信号在慢的时钟上升沿可能导致tdtr不能超过tRC而使thtr为零或者负。只有tRC不大于tRCmax的时候(tRCmax>:0。15T),发送端才能保证thtr大于等于0。

为了允许数据在下降沿被记录,时钟信号上升沿及T相关的时间延迟应该给予接收端充分的建立时间(set-up time)。

数据建立时间(set-up time)和保持时间(hold time)不能小于指定接收端的建立时间和保持时间。

结构配置编辑

随着WS信号的改变,导出一个WSP脉冲信号,进入并行移位寄存器,从而输出数据被激活。串行数据的默认输入是0,因此所有位于最低位(LSB)后的数据将被设置为0。

随着第一个WS信号的改变,WSP在SCK信号的下降沿重设计数器。在“1 out of n”译码器对计数器数值进行译码后,第一个串行的数据(MSB)在SCK时钟信号的上升沿被存放进入B1,随着计数器的增长,接下来的数据被依次存放进入B2到Bn中。在下一个WS信号改变的时候,数据根据WSP脉冲的变化被存放进入左(声道)锁存器或者右(声道)锁存器,并且将B2一Bn的数据清除以及计数器重设,如果有冗余的数据则最低位之后的数据将被忽略。注意:译码器和计数器(虚线内的部分)可以被一个n比特移位寄存器所代替。

IIS总线接口可作为一个编码解码接口与外部8/16位的立体声音频解码电路(CODEC IC)相连,从而实现微唱片和便携式应用。它支持IIS数据格式和MSB-Justified 数据格式。IIS总线接口为先进先出队列FIFO的访问提供DMA传输模式来取代中断模式,可同时发送和接收数据,也可只发送或接收数据。

1.3、数据传输协议

1.3.1、几种常见的I2S数据格式

随着技术的发展,在统一的I2S硬件接口下,出现了多种不同的I2S数据格式,可分为左对齐(MSB)标准、右对齐(LSB)标准、I2S Philips 标准。

对于所有数据格式和通信标准而言,始终会先发送最高有效位(MSB 优先)。

发送端和接收端必须使用相同的数据格式,确保发送和接收的数据一致。

①I2S Philips 标准使用LRCLK信号来指示当前正在发送的数据所属的声道,为0时表示左声道数据。LRCLK信号从当前声道数据的第一个位(MSB)之前的一个时钟开始有效。LRCLK信号在BCLK的下降沿变化。发送方在时钟信号BCLK的下降沿改变数据,接收方在时钟信号BCLK的上升沿读取数据。正如上文所说,LRCLK频率等于采样频率Fs,一个LRCLK周期(1/Fs)包括发送左声道和右声道数据。

对于这种标准I2S格式的信号,无论有多少位有效数据,数据的最高位总是出现在LRCLK变化(也就是一帧开始)后的第2个BCLK脉冲处。

这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

I2S Philips 标准时序图如下所示:

②左对齐(MSB)标准

在LRCLK发生翻转的同时开始传输数据。该标准较少使用。注意此时LRCLK为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。左对齐(MSB)标准时序图如下所示:

③右对齐(LSB)标准

声音数据LSB传输完成的同时,LRCLK完成第二次翻转(刚好是LSB(最低有效位)和LRCLK是右对齐的,所以称为右对齐标准)。注意此时LRCLK为1时,传输的是左声道数据,这刚好与I2S Philips标准相反。右对齐(LSB)标准时序图如下所示:

2、UART

2.1、概念

通用异步收发传输器(Universal [Z3] Asynchronous[Z4]  Receiver/Transmitter),通常称作UART。

它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。

具体实物表现为独立的模块化芯片,或作为集成于微处理器中的周边设备。一般是RS-232C规格的,与类似Maxim的MAX232之类的标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。


2.2、物理层

一般情况硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:

TX:发送数据端,要接对面设备的RX

RX:接收数据端,要接对面设备的TX

GND:保证两设备共地,有统一的参考平面


2.3、数据传输协议

2.3.1、串行数据序列的结构

UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

 其中各位的意义如下:

2.3.1.1、起始位

先发出一个逻辑”0”的信号,表示传输字符的开始。

2.3.1.2、数据位

紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。

2.3.1.3、奇偶校验位[Z5] 

资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

2.3.1.4、停止位

它是一个字符数据的结束标志。可以是1位、1。5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

2.3.1.5、空闲位

处于逻辑“1”状态,表示当前线路上没有资料传送。

2.3.2、波特率

是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如传输使用256阶符号,每8bit代表一个符号,资料传送速率为120字符/秒,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。


2.3.3、UART波形

以9600 8N1(9600波特率,8个数据位,没有校验位,1位停止位)为例,这是目前最常用的串口配置,现在我们传输’O’'K’两个ASCII值,'O’的ASCII为79,对应的二进制数据为01001111 ,'K’对应的二进制数据为01001011 ,传输的格式数据如下图所示:

串口波特率为9600,1bit传输时间大约为104us,传送一个数据实际是10个比特(开始位,8个数据位,停止位),一个bytes传输速率实际为9600*8/10=7680bps。

可以用示波器去抓波形,加深印象。

3、SPI

SPI(Serial Peripheral interface)的缩写,串行外围设备接口。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

3.1、概念

3.1.1、SPI特点

SPI优点

  1. 支持全双工通信
  2. 通信简单
  3. 数据传输速率块
  4. 高速、同步、全双工、非差分、总线式
  5. 主从机通信模式

SPI缺点

没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

3.1.1.1、采用主-从模式(Master-Slave) 的控制方式

SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设备 (Slave)。 一个 Master 设备可以通过提供 Clock 以及对 Slave 设备进行片选 (Slave Select) 来控制多个 Slave 设备, SPI 协议还规定 Slave 设备的 Clock 由 Master 设备通过 SCK 管脚提供给 Slave 设备, Slave 设备本身不能产生或控制 Clock, 没有 Clock 则 Slave 设备不能正常工作。

3.1.1.2、采用同步方式(Synchronous)传输数据

Master 设备会根据将要交换的数据来产生相应的时钟脉冲(Clock Pulse), 时钟脉冲组成了时钟信号(Clock Signal) , 时钟信号通过时钟极性 (CPOL) 和 时钟相位 (CPHA) 控制着两个 SPI 设备间何时数据交换以及何时对接收到的数据进行采样, 来保证数据在两个设备之间是同步传输的。

3.1.1.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)在我们的程序里是无用的。

3.1.1.4、SPI有四种传输模式

上升沿、下降沿、前沿、后沿触发。当然也有MSB和LSB传输方式。

3.1.1.5、SPI只有主模式和从模式之分。

没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到一个数据;你要收一个数据必须也要先发一个数据。

3.2、物理层

MOSI:Master Output Slave Input,即主设备输出/从设备输入。数据从主机输出到从机,主机发送数据。

MISO:Master Iutput Slave Onput,主设备输入/从设备输出,数据由从机输出到主机,主机接收数据。

SCK:即时钟信号线,用于通讯同步。该信号由主机产生,其支持的最高通讯速率为fpclk/2,即所挂载总线速率的一半。如SPI2挂载在APB1总线上,则其最高速率为36MHz / 2 = 18MHz。类似木桶效应,两个设备之间通讯时,通讯速率受限于较低速的设备。

CS:即片选信号线,用于选择通讯的从设备,也可用CS表示。每个从设备都有一条独立的NSS信号线,主机通过将某个设备的NSS线置低电平来选择与之通讯的从设备。所以SPI通讯以NSS线电平置低为起始信号,以NSS线电平被拉高为停止信号。

SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。SPI总线四种工作方式 SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置。

起始、停止信号

如上图,编号1和6即为起始和停止信号的发生区域。NSS电平由高变低,则产生起始信号;NSS电平由低变高,则产生停止信号。从机检测到自己的NSS线电平被置低,则开始与主机进行通讯;反之,检测到NSS电平被拉高,则停止通讯。

数据有效性

MOSI和MISO线在SCK的每个时钟周期传输一位数据,开发者可以自行设置MSB或LSB先行,不过需要保证两个通讯设备都使用同样的协定。从图16-1看到,在SCK的上升沿和下降沿时进行触发和采样。

SPI有四种通讯模式,在SCK上升沿触发,下降沿采样只是其中一种模式。四种模式的主要区别便是总线空闲时SCK的状态及数据采样时刻。这涉及到“时钟极性CPOL”和“时钟相位CPHA”,由CPOL和CPHA的组合而产生了四种的通讯模式。

时钟极性(CPOL)

时钟极性(CPOL)对传输协议没有重大的影响。

如果CPOL=0,串行同步时钟的空闲状态为低电平;

如果CPOL=1,串行同步时钟的空闲状态为高电平。

时钟相位(CPHA)

时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。

如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;

如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

CPOL:即在没有数据传输时,时钟的空闲状态的电平。

CPHA:即数据的采样时刻。

图16-2

SPI_CR1寄存器的CPOL和CPHA位组合配置成四种时序关系,即四种通讯模式。

如图16-2所示,如果CPOL被清0,则SCK在空闲状态保持低电平,反之被置1则保持高电平;如果CPHA位被清0,则在SCK每个时钟周期的第1个边沿(奇数边沿)进行数据位采样,反之被置1则在SCK每个时钟周期的第2个边沿(偶数边沿)采样。

如下表所示的四种SPI通讯模式。

数据传输协议

概述

上图只是对 SPI 设备间通信的一个简单的描述, 下面就来解释一下图中所示的几个组件(Module):

SSPBUF,Synchronous Serial Port Buffer, 泛指 SPI 设备里面的内部缓冲区, 一般在物理上是以 FIFO 的形式, 保存传输过程中的临时数据;

SSPSR, Synchronous Serial Port Register, 泛指 SPI 设备里面的移位寄存器(Shift Regitser), 它的作用是根据设置好的数据位宽(bit-width) 把数据移入或者移出 SSPBUF;

Controller, 泛指 SPI 设备里面的控制寄存器, 可以通过配置它们来设置 SPI 总线的传输模式。

通常情况下, 我们只需要对上图所描述的四个管脚(pin) 进行编程即可控制整个 SPI 设备之间的数据通信:

SCK, Serial Clock, 主要的作用是 Master 设备往 Slave 设备传输时钟信号, 控制数据交换的时机以及速率;

SS/CS, Slave Select/Chip Select, 用于 Master 设备片选 Slave 设备, 使被选中的 Slave 设备能够被 Master 设备所访问;

SDO/MOSI, Serial Data Output/Master Out Slave In, 在 Master 上面也被称为 Tx-Channel, 作为数据的出口, 主要用于 SPI 设备发送数据;

SDI/MISO, Serial Data Input/Master In Slave Out, 在 Master 上面也被称为 Rx-Channel, 作为数据的入口, 主要用于SPI 设备接收数据;

SPI 设备在进行通信的过程中, Master 设备和 Slave 设备之间会产生一个数据链路回环(Data Loop), 就像上图所画的那样, 通过 SDO 和 SDI 管脚, SSPSR 控制数据移入移出 SSPBUF, Controller 确定 SPI 总线的通信模式, SCK 传输时钟信号。

Timing

上图通过 Master 设备与 Slave 设备之间交换1 Byte 数据来说明 SPI 协议的工作机制。

首先, 在这里解释一下相位和极性的概念

时钟下降沿改变数据,时钟上升沿读数据。

SPI相关的缩写或说法

SPI的极性Polarity和相位Phase,最常见的写法是CPOL和CPHA,不过也有一些其他写法,简单总结如下:

(1) CKPOL (Clock Polarity) = CPOL = POL = Polarity = (时钟)极性

(2) CKPHA (Clock Phase) = CPHA = PHA = Phase = (时钟)相位

(3) SCK=SCLK=SPI的时钟

(4) Edge=边沿,即时钟电平变化的时刻,即上升沿(rising edge)或者下降沿(falling edge)

对于一个时钟周期内,有两个edge,分别称为:

Leading edge=前一个边沿=第一个边沿,对于开始电压是1,那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;

Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),对于开始电压是0,那么就是1变成0的时候;

SPI的相位和极性

CPOL和CPHA,分别都可以是0或时1,对应的四种组合就是:

Mode 0 CPOL=0, CPHA=0

Mode 1 CPOL=0, CPHA=1

Mode 2 CPOL=1, CPHA=0

Mode 3 CPOL=1, CPHA=1

CPOL极性

先说什么是SCLK时钟的空闲时刻,其就是当SCLK在数发送8个bit比特数据之前和之后的状态,于此对应的,SCLK在发送数据的时候,就是正常的工作的时候,有效active的时刻了。

先说英文,其精简解释为:Clock Polarity = IDLE state of SCK。

再用中文详解:

SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:

CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;

CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;

CPHA相位

首先说明一点,capture strobe = latch = read = sample,都是表示数据采样,数据有效的时刻。相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,0对应着第一个边沿,1对应着第二个边沿。

对于:

CPHA=0,表示第一个边沿:

对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;

对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;

CPHA=1,表示第二个边沿:

对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;

对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

还是上图大家更容易看懂

软件中如何设置SPI的极性和相位

SPI分主设备和从设备,两者通过SPI协议通讯。

而设置SPI的模式,是从设备的模式,决定了主设备的模式。

所以要先去搞懂从设备的SPI是何种模式,然后再将主设备的SPI的模式,设置和从设备相同的模式,即可正常通讯。

对于从设备的SPI是什么模式,有两种:

固定的,有SPI从设备硬件决定的

SPI从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即:

关于SPI从设备,在空闲的时候,是高电平还是低电平,即决定了CPOL是0还是1;

然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了CPOL的值的前提下,对应着可以推算出CPHA是0还是1了。

可配置的,由软件自己设定

从设备也是一个SPI控制器,4种模式都支持,此时只要自己设置为某种模式即可。

然后知道了从设备的模式后,再去将SPI主设备的模式,设置为和从设备模式一样,即可。

对于如何配置SPI的CPOL和CPHA的话,不多细说,多数都是直接去写对应的SPI控制器中对应寄存器中的CPOL和CPHA那两位,写0或写1即可。

SSPSR

SSPSR 是 SPI 设备内部的移位寄存器(Shift Register)。 它的主要作用是根据 SPI 时钟信号状态, 往 SSPBUF 里移入或者移出数据, 每次移动的数据大小由 Bus-Width 以及 Channel-Width 所决定。

Bus-Width 的作用是指定地址总线到 Master 设备之间数据传输的单位。

例如, 我们想要往 Master 设备里面的 SSPBUF 写入 16 Byte 大小的数据: 首先, 给 Master 设备的配置寄存器设置 Bus-Width 为 Byte; 然后往 Master 设备的 Tx-Data 移位寄存器在地址总线的入口写入数据, 每次写入 1 Byte 大小的数据(使用 writeb 函数); 写完 1 Byte 数据之后, Master 设备里面的 Tx-Data 移位寄存器会自动把从地址总线传来的1 Byte 数据移入 SSPBUF 里; 上述动作一共需要重复执行 16 次。

Channel-Width 的作用是指定 Master 设备与 Slave 设备之间数据传输的单位。 与 Bus-Width 相似, Master 设备内部的移位寄存器会依据 Channel-Width 自动地把数据从 Master-SSPBUF 里通过 Master-SDO 管脚搬运到 Slave 设备里的 Slave-SDI 引脚, Slave-SSPSR 再把每次接收的数据移入 Slave-SSPBUF里。通常情况下, Bus-Width 总是会大于或等于 Channel-Width, 这样能保证不会出现因 Master 与 Slave 之间数据交换的频率比地址总线与 Master 之间的数据交换频率要快, 导致 SSPBUF 里面存放的数据为无效数据这样的情况。

SSPBUF

我们知道, 在每个时钟周期内, Master 与 Slave 之间交换的数据其实都是 SPI 内部移位寄存器从 SSPBUF 里面拷贝的。 我们可以通过往 SSPBUF 对应的寄存器 (Tx-Data / Rx-Data register) 里读写数据, 间接地操控 SPI 设备内部的 SSPBUF。

例如, 在发送数据之前, 我们应该先往 Master 的 Tx-Data 寄存器写入将要发送出去的数据, 这些数据会被 Master-SSPSR 移位寄存器根据 Bus-Width 自动移入 Master-SSPBUF 里, 然后这些数据又会被 Master-SSPSR 根据 Channel-Width 从 Master-SSPBUF 中移出, 通过 Master-SDO 管脚传给 Slave-SDI 管脚, Slave-SSPSR 则把从 Slave-SDI 接收到的数据移入 Slave-SSPBUF 里。 与此同时, Slave-SSPBUF 里面的数据根据每次接收数据的大小(Channel-Width), 通过 Slave-SDO 发往 Master-SDI, Master-SSPSR 再把从 Master-SDI 接收的数据移入 Master-SSPBUF。在单次数据传输完成之后, 用户程序可以通过从 Master 设备的 Rx-Data 寄存器读取 Master 设备数据交换得到的数据。

Controller

Master 设备里面的 Controller 主要通过时钟信号(Clock Signal)以及片选信号(Slave Select Signal)来控制 Slave 设备。 Slave 设备会一直等待, 直到接收到 Master 设备发过来的片选信号, 然后根据时钟信号来工作。

Master 设备的片选操作必须由程序所实现。 例如: 由程序把 SS/CS 管脚的时钟信号拉低电平, 完成 SPI 设备数据通信的前期工作; 当程序想让 SPI 设备结束数据通信时, 再把 SS/CS 管脚上的时钟信号拉高电平。

SPI举例

上面说了那么多,在这里我来举一个例子帮助大家理解。

SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。

假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。

那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。

举例:

假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据

这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。已经很接近理解了,下一步就是把 上面的过程转为动画

4、I2C

4.1、概念

I2C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构。

4.1.1、I2C特点

主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,任何被寻址的器件被认为是从机。

I2C主要特点如下所示:

只需要两条总线(SDA/SCL);

没有严格的波特率要求,例如使用RS232,主设备生成总线时钟;

所有组件之间都存在简单的主/从关系,连接到总线的每个设备均可通过唯一地址进行软件寻址;

I2C是真正的多主设备总线,可提供仲裁和冲突检测;

传输速度分为四种模式:

  1. 标准模式:Standard Mode=100 Kbps
  2. 快速模式:Fast Mode=400 Kbps
  3. 高速模式:High speed mode=3.4 Mbps
  4. 超快速模式:Ultra fast mode=5 Mbps

最大主机数:无限制;

最大从机数:理论上是127。(7位寻址位)

4.1.2、术语

图表 2 I2C术语

4.1.3、数据的有效性

SDA 线上的数据必须在时钟的高电平周期保持稳定(数据在时钟的高电平有效),数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变。

4.2、硬件层

I2C协议仅需要SDA和SCL两个引脚。SDA是串行数据线的缩写,而SCL是串行时钟线的缩写。这两条数据线需要接上拉电阻。使用I2C,可以将多个从机(Slave)连接到单个主设备(Master)(一对多通信),并且还可以有多个主设备(Master)控制一个或多个从机(Slave)(多对多通信)。

4.2.1、I2C上拉电阻

I2C总线(SDA,SCL)内部都使用漏极开路驱动器(开漏驱动),本身只能输出低电平。所以只能通过外部上拉电阻将信号线拉到高电平。默认情况下将其保持在高电平;

4.2.1.1、I2C上拉电阻阻值计算

上拉电阻的值取决于许多因素。德州仪器TI 建议使用以下公式来计算正确的上拉电阻值:

  1. VLO是逻辑低电压;
  2. IOL是逻辑低电流;
  3. TR是信号的最大上升时间;
  4. CB是总线电容;

具体如下所示:

根据上表,这里不难发现需要在做电阻选择需要满足几个条件;

  • 灌电流最大值为3mA;
  • 另外I2C总线规范和用户手册还为低电平输出电压设置了最大值为0.4V。

所以根据上述公式可以计算,对于5V的电源,每个上拉电阻阻值至少1.53kΩ,而对于3.3V的电源,每个电阻阻值至少967Ω。

如果觉得计算电阻值比较麻烦,也可以使用典型值 4.7kΩ

上述推导过程可以参考 TI的文档《I2C Bus Pullup Resistor Calculation》

最终在调试的时候,当测量SDA或SCL信号并且逻辑LOW上的电压高于0.4V时,我们就知道可以知道灌电流太高了;

当然,这并不意味着每当灌电流超过3mA时,设备就会立即停止工作。但是,在操作超出其规格的设备时,应始终小心,因为它可能导致通信故障,缩短其使用寿命甚至甚至永久损坏设备。

4.2.2、I/O 级和总线线路的电气规范和时序

4.2.2.1、标准和快速模式器件

F/S 模式I2C 总线器件的I/O 级、I/O 电流、毛刺抑制、输出斜率控制和管脚电容见下图。

规定的SCL时钟最小高电平和低电平周期决定了最大的位传输速率,标准模式和快速模式I2C 总线器件必须能在它们最大的位速率下传输,或者是能在该速度下发送或接收,或者是时钟同步过程使主机进入等等状态并延长SCL 信号的低电平周期。当然,在后面的情况中位速率减少。

4.2.2.1.1、电气规范

图表 3 F/S 模式I2C 总线器件SDA 和SCL I/O 级的特性

PS

1 使用非标准电源电压(不遵从I2C 总线系统电平规定)的器件必须将输入电平连接到有上拉电阻Rp 的VDD 电压

2 最大的VIH=VDDmax+0.5V

3 Cb=一条总线线路的电容,单位是pF

4 在表5 提出的SDA 和SCL 线最大tf =300ns 比输出级指定的最大tof =250ns 长。允许串连的保护电阻RS 连接节在SDA/SCL 管脚和SDA/SCL 总线之间,如图36,所示不超过最大的指定时间tf。

5 如果VDD 被关断,快速模式器件的I/O 管脚必须不能阻塞SDA 和SCL 线。

n/a=不可使用

4.2.2.1.2、时序规范

I2C 总线的时序、特性总线、线路电容和噪声容限见下图。

图表 4 F/S 模式I2C 总线器件SDA 和SCL 总线线路的特性

1 所有值都参考VIHmin 和VILmax 电平见表4。

2 器件必须为SDA 信号参考SCL 信号的VIHmin 内部提供一个至少300ns 的保持时间来渡过SCL下降沿的未定义区。

3 如果器件不延长SCL 信号的低电平周期tLOW,才会用到tHD;DAT 的最大值。

4 快速模式I2C 总线器件可以在标准模式I2C 总线系统使用,但必须符合tSU;DAT 250ns 的要求。如果器件不延长SCL 信号的低电平周期,这就自动成为默认的情况,必须在SCL 线释放之前输出下一个数据位到SDA 线trmax+tSU;DAT=1000+250=1250ns 根据标准模式I2C 总线规范。

5 Cb=一条总线线路的总电容,单位是pF,如果与Hs 模式器件混合使用,根据表6 允许下降时间更快。

图表 5 I2C 总线的F/S 模式器件的时序定义

4.3、数据传输协议

主设备和从设备进行数据传输时遵循以下协议格式。数据通过一条SDA数据线在主设备和从设备之间传输0和1的串行数据。串行数据序列的结构可以分为,开始条件,地址位,读写位,应答位,数据位,停止条件,具体如下图所示:

4.3.1、传输数据

4.3.1.1、字节格式

发送到SDA线上的每个字节必须为8位,每个字节后必须跟一个响应位。首先传输的是数据的最高位(MSB),从机可以使用内部中断服务程序,可以使SCL保持低电平迫使主机进入等待状态。准备好接受下一个数据主机时释放SCL时钟,开始接受数据。

4.3.1.2、响应

数据传输必须带响应。响应时钟脉冲有主机产生。在响应的时钟脉冲器件,发送器释放SDA线(高)。

在响应的时钟脉冲器件,接收器必须将SDA线拉低,[Z6] 使它在这个时钟脉冲的高电平期间保持稳定的低电平。

当从机不能响应从机地址时(例如正在执行一些实时函数不能接受或者发送)。从机必须使数据保持高电平。主机然后产生一个停止条件终止传输或者重复起始条件开始新的传输。

图表 6 I2C总线的响应

4.3.2、仲裁和时钟同步

在空闲总线上两个主机可以同时开始传输,所以必须要有一个方法来决定哪个主机来控制总线并完成其数据传输。这个方法就是时钟同步和仲裁。

4.3.2.1、时钟同步

所有主机在SCL 线上产生它们自己的时钟来传输I2C 总线上的报文数据只在时钟的高电平周期有效,因此需要一个确定的时钟进行逐位仲裁。

时钟同步通过使用I2C接口与SCL线的线与连接实现。意味着SCL线从高到低期间会引起主机开始计算它的低电平周期,一旦主机时钟变低,它会保持SCL线处于这种状态直到时钟到达高电平。然而,如果另一个时钟依旧是低电平,时钟的从低到高的变化并不会改变SCL线的状态。SCL拉低的时间由最长的低电平周期决定。短一些的低电平周期的主机在这时进入HIGH wait-state。

当所有的主机的低电平周期都结束了,时钟线才回到高电平。这时主机时钟和SCL的状态一致,所有的主机开始计数他们的高电平周期。第一个结束高电平的主机将SCL线重新拉低。这样的话,同步的SCL时钟的低电平周期由所有主机中最长的低电平周期决定,高电平周期由最短的高电平周期决定。

图表 7 仲裁过程中的时钟同步

4.3.2.2、仲裁

当SCL 线是高电平时,仲裁在SDA 线;发生这样在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,因为总线上的电平与它自己的电平不相同。[Z7]

仲裁可以持续多位。第一阶段是比较地址位;如果多个主机都尝试寻址相同的器件,仲裁会继续比较数据位(主机是发送器),或者响应位(主机是接收器)。因为I2C总线的地址和数据信息有赢得仲裁的主机决定,在仲裁过程中不会丢失信息。

丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾。

如果主机也结合了从机功能,而且在寻址阶段丢失仲裁。它很可能就是赢得仲裁的主机在寻址的器件,因此丢失仲裁的主机必须立即切换到它的从机模式。

图表 8 两个主机的仲裁过程

必须特别注意的是;在串行传输时,当重复起始条件或停止条件发送到I2C 总线的时侯,仲裁过程仍在进行。如果可能产生这样的情况,有关的主机必须在帧格式相同位置发送这个重复起始条件或停止条件。也就是说,仲裁在不能下面情况之间进行

  1. 重复起始条件和数据位
  2. 停止条件和数据位
  3. 重复起始条件和停止条件

从机不被卷入仲裁过程。

4.3.2.3、用时钟同步机制作为握手

在字节级的快速传输中,器件可以快速接收数据字节。但需要更多时间保存接收到的字节或准备另一个要发送的字节。在接收和响应一个字节后使SCL线保持低电平,迫使主机进入等待状态,直到从机准备好下一个要传输的字节。

图表 9 时钟同步机制作为握手

时钟同步机制除了在仲裁过程中使用外,还可以用于使能接收器处理字节级或位级的快速数据传输。

4.3.3、7 位的地址格式

数据的传输遵循图10 所示的格式。在起始条件S 后,发送了一个从机地址这个地址共有7 位。紧接着的第8 位是数据方向位R/W, 0 表示发送写,1 表示请求数据读。数据传输一般由主机产生的停止位P 终止。但是,如果主机仍希望在总线上通讯,它可以产生重复起始条件Sr和寻址另一个从机,而不是首先产生一个停止条件。在这种传输中可能有不同的读/写格式结合。

图表 10 I2C完整的数据传输

4.3.3.1、三种数据传输格式

主机-发送器发送到从机-接收器。传输的方向不会改变。

图表 11 主机-发送器发送到从机-接收器。传输的方向不会改变。

在第一个字节后,主机立即读从机。在第一次响应时,主机-发送器变成主机-接收器,从机-接收器变成从机-发送器。第一次响应仍有从机产生。之前发送了一个不响应信号的(not-acknowledge)的主机停止条件。

图表 12 在第一个字节后主机立即读从机

复合格式。传输改变方向的时候,起始条件和从机地址都会被重复。但R/W位取反。如果主机接收器发送一个重复起始条件,它之前应该发送一个不响应信号(notknowledge)。

图表 13 复合格式

Ps:

not shaded because transfer direction of data and acknowledge bits depends on R/W bits

没有着色,因为数据和响应位的传输方向取决于R/W位

direction of transfer may change at this point

此时转移的方向可能会改变

注意

  1. 复合格式可以用于例如控制一个串行存储器。在第一个数据字节期间。要写内部存储器的位置,在重复起始条件和从机地址后,数据可被传输。
  2. 自动增加或减少之前访问的存储器位置等所有决定都由器件的设计者决定。
  3. 每个字节都跟着一个响应位,在序列中用A 或/A 模块表示。
  4. 兼容I2C 总线的器件在接收到起始或重复起始条件时必须复位它们的总线逻辑,甚至在这些起始条件没有根据正确的格式放置,它们也都期望发送从机地址。
  5. 起始条件后面立即跟着一个停止条件(报文为空)是一个不合法的格式。

4.3.4、7 位寻址

I2C 总线的寻址过程是通常在起始条件后的第一个字节决定了主机选择哪一个从机。例外的情况是可以寻址所有器件的“广播呼叫”地址。使用这个地址时,理论上所有器件都会发出一个响应。但是,也可以使器件忽略这个地址。

4.3.4.1、第一个字节的位定义

第一个字节的头7 位组成了从机地址。最低位(LSB)是第八位。决定了报文的方向。“0”表示写

图表 14 起始条件后的第一个字节

4.3.5、标准模式I2C总线规范的扩展

  1. 标准模式:数据传输速率可高达100kbit/s 而且7 位寻址
  2. 快速模式:位速率高达400kbit/s
  3. 高速模式(Hs模式):位速率高达3.4Mbit/s
  4. 10 位寻址[Z8] :允许使用高达1024 个额外的从机地址

4.3.6、快速模式

快速模式器件可以在400kbit/s 下接收和发送。最小要求是它们可以和400kbit/s 传输同步。可以延长SCL 信号的低电平周期来减慢传输。快速模式器件都向下兼容可以和标准模式器件在0~100kbit/s 的I2C 总线系统通讯。但是由于标准模式器件不向上兼容,所以不能在快速模式I2C 总线系统中工作,因为它们不能跟上这么快的传输速率因而会产生不可预料的状态。

快速模式I2C 总线规范与标准模式相比有以下额外的特征;

  1. 最大位速率增加到400kbit/s;
  2. 调整了串行数据SDA 和串行时钟SCL 信号的时序。没有必要与其他总线系统例如CBUS兼容,它们不能在增加的位速率下工作;
  3. 快速模式器件的输入有抑制毛刺的功能,SDA 和SCL 输入有Schmitt 触发器;
  4. 快速模式器件的输出缓冲器对SDA 和SCL 信号的下降沿有斜率控制功能;
  5. 如果快速模式器件的电源电压被关断,SDA 和SCL 的I/O 管脚必须悬空,不能阻塞总线;
  6. 连接到总线的外部上拉器件必须调整以适应快速模式I2C 总线更短的最大允许上升时间,对于负载最大是200pF 的总线,每条总线的上拉器件可以是一个电阻;对于负载在200pF~400pF, 之间的总线上拉器件可以是一个电流源(最大值3mA灌电流)或者是一个开关电阻电路。

图表 15 开关上拉电路

4.3.7、HS模式

Hs 模式器件可以在高达3.4Mbit/s 的位速率下传输信息,而且保持完全向下兼容快速模式或标准模式F/S 模式器件。Hs 模式传输除了不执行仲裁和时钟同步外,与F/S 模式系统有相同的串行总线协议和数据格式

4.3.7.1、高速传输

要获得位速率高达3.4Mbit/s 的传输,对正常的I2C 总线规范要作出以下的改进;

  1. Hs 模式主机器件有一个SDAH 信号的开漏输出缓冲器[Z9] 和一个在SCLH 输出的开漏极下拉和电流源上拉电路1。 这个电流源电路缩短了SCLH 信号的上升时间。任何时侯在Hs 模式,只有一个主机的电流源有效;
  2. 在多主机系统的Hs 模式中,不执行仲裁和时钟同步,以加速位处理能力。仲裁过程一般在前面用F/S 模式传输主机码后结束;
  3. Hs 模式主机器件以高电平和低电平是1:2 的比率产生一个串行时钟信号。解除了建立和保持时间的时序要求;
  4. 还可以选择Hs 模式器件有内建的电桥1。 在Hs 模式传输中,Hs 模式器件的高速数据SDAH和高速串行时钟SCLH 线通过这个电桥与F/S 模式器件的SDA 和SCL 线分隔开来。减轻了SDAH 和SCLH 线的电容负载,使上升和下降时间更快。
  5. Hs 模式从机器件与F/S 从机器件的唯一差别是它们工作的速度。Hs 模式从机在SCLH 和SDAH输出有开漏输出的缓冲器。SCLH 管脚可选的下拉晶体管可以用于拉长SCLH 信号的低电平,但只允许在Hs 模式传输的响应位后进行。
  6. Hs 模式器件的输出可以抑制毛刺,而且SDAH 和SCLH 输出有一个Schmitt 触发器;
  7. Hs 模式器件的输出缓冲器对SDAH 和SCLH 信号的下降沿有斜率控制功能。

下图是只有Hs 模式器件的系统的物理I2C 总线配置。主机器件的SDA 和SCL 管脚只在速度混合的总线系统中使用,在只有Hs 模式的系统中不需要连接。此时,这些管脚有其他功能。

可选的串连电阻RS 保护I2C 总线器件的I/O 级,防止总线上高电压的毛刺影响I/O 级并将振荡和干扰减到最小。

上拉电阻Rp 使SDAH 和SCLH 线在总线空闲的时侯保持高电平,并确保信号在要求的上升时间内从低电平变成高电平。对于电容负载很高>100pF 的总线线路,为了符合上升时间的要求,可以用外部上拉电流源代替Rp 。除非跟着一个响应位,Hs 模式传输的SCLH 时钟脉冲上升时间被激活主机的内部电流源上拉电路MCS 缩短。

图表 16 只有Hs 模式器件的I2C 总线配置

PS

(1)这里不使用SDA 和SCL,它们可作其他用途、

(2)到输入滤波器、

(3)只有激活的主机能使用它的电流源上拉电路、

(4)虚线的晶体管是可选的开漏输出,可以延长串行时钟信号SCLH。

4.3.8、串行数据序列的结构

I2C实际测试波形如下

说明1:应答位后面的小脉冲--cpu发送完7bit地址码,1bit读写码,符合这个设备的DEVICE,会返回ACK,也就是低电平。前8个bit,CPU驱动SDA,第九个设备拉低,第十个bit还是主驱动,主从切换之间有个无人驱动的阶段,那在上拉的作用下,就会有这个短脉冲。

图表 17 I2C实测波形图

I2C传输完整时序

  1. 开始标志[Z10] (S)发出后,主设备会传送一个7 位的Slave 地址,并且后面跟着一个第8位,称为Read/Write 位。
  2. R/W 位表示主设备是在接受从设备的数据还是在向其写数据。
  3. 然后,主设备释放SDA 线,等待从设备的应答信号(ACK)。每个字节的传输都要跟随有一个应答位。
  4. 应答产生时,从设备将SDA 线拉低并且在SCL 为高电平时保持低。
  5. 数据传输以停止标志(P)结束,然后释放总线。但主设备也可以产生重复的开始信号去操作另一台从设备,而不发出结束标志。
  6. 所有的SDA 信号变化都要在SCL 时钟为低电平时进行,除了开始和结束标志。

4.3.8.1、开始条件

当主设备决定开始通讯时,需要发送开始信号,需要执行以下动作:

  • 先将SDA线从高压电平切换到低压电平;
  • 然后将SCL从高电平切换到低电平;
  • 起始和终止信号都是由主机发出的

在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。具体如下图所示:

4.3.8.2、地址位

通常地址位占7位数据,主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址。

I2C还支持10位寻址;

注意:I2C在高电平采样

4.3.8.3、读写位

该位指定数据传输的方向。

  • 如果主设备需要将数据发送到从设备,则该位设置为 0;
  • 如果主设备需要往从设备接收数据,则将其设置为 1 。

4.3.8.4、应答位ACK/NACK

主机每次发送完数据之后会等待从设备的应答信号ACK。

  • 在第9个时钟信号,如果从设备发送应答信号ACK,则SDA会被拉低;
  • 若没有应答信号NACK,则SDA会输出为高电平,这过程会引起主设备发生重启或者停止;

发送方每发送一个字节,就在时钟脉冲第9次期间释放数据,由接收方反馈一个应答信号。

如果应答信号为低电平时,规定有效应答(ACK),表示接收方已经成功接收到该字节。

如果应答信号为高电平时,规定为非应答(NACK),表示接收方接收该字节没有成功。

当在SCL第9个时钟高电平时,SDA拉低代表ACK响应。

4.3.8.5、数据块

传输的数据总共有8位,由发送方设置,它需要将数据位传输到接收方。

发送之后会紧跟一个ACK / NACK位,如果接收器成功接收到数据,则设置为0。否则,它保持逻辑“ 1”。

重复发送,直到数据完全传输为止。

4.3.8.6、停止条件

当主设备决定结束通讯时,需要发送开始信号,需要执行以下动作;

  • 先将SDA线从低电压电平切换到高电压电平;
  • 再将SCL线从高电平拉到低电平。

具体如下图所示:


[Z1]还有一根MCLK,为codec的工作时钟。

[Z2]可以从位时钟中倍频出来。是系统的工作时钟

[Z3]adj。普遍的; 全体的; 全世界的; 共同的; 普遍存在的; 广泛适用的; n。[逻辑学]全称命题; [哲学]一般概念; 一般性;

[Z4]adj。 [电] 异步的;不同时的;不同期的

异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。

[Z5]奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。

[Z6]前8个bit,CPU驱动SDA,第九个设备拉低,第十个bit还是主驱动,主从切换之间有个无人驱动的阶段,那在上拉的作用下,就会有这个短脉冲。

[Z7]由于SDA、SCL是漏极开路结构,输出“0”的能力很强,直接对地。当“0”和“1”发生逻辑冲突时,发送逻辑“0”的永远是赢家。发送逻辑“1”的输家就会推出竞争。

[Z8]7位寻址策略的大多数112地址能被立即分配,需要更多地址结合来防止为新器件分配从机地址的问题。

[Z9]    缓冲寄存器又称缓冲器,它分输入缓冲器和输出缓冲器两种。前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;后者的作用是用来暂时存放处理器送往外设的数据。有了数据缓冲器,就可以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。由于缓冲器接在数据总线上,故必须具有三态输出功能。

[Z10]开始条件和停止条件,都是SDA先变化然后是SCL变化。


低速协议 I2S UART SPI I2C相关推荐

  1. UART SPI I2C 接口介绍 转载

    UART SPI I2C 接口介绍@TOC 做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释. UART UART是一种通用串行 ...

  2. 【SA8295P 源码分析】13 - Android GVM 虚拟机 QUPv3 UART / SPI / I2C功能配置及透传配置

    [SA8295P 源码分析]13 - Android GVM 虚拟机 QUPv3 UART / SPI / I2C功能配置及透传配置 一.QUP v3 介绍 二.QUP v3 UART 功能配置 2. ...

  3. UART、I2C、USB、SPI、CAN、Jtag、PCI/PCIE协议汇总

    协议 通信方式 UART 串行全双工 I2C SPI是串行外设接口(Serial Peripheral Interface)的缩写.SPI是一种高速的.全双工.同步的通信总线,并且在芯片的管脚上只占用 ...

  4. 高速USB转JTAG/SPI/I2C/UART/GPIO应用

    高速USB转接芯片CH347是一款集成480Mbps高速USB接口.JTAG接口.SPI接口.I2C接口.异步UART串口.GPIO接口等多种硬件接口的转换芯片. 接口示意图: 应用示意图: JTAG ...

  5. SPI、UART、I2C三种串行总线简介

    是一种 高速.全双工.同步.串行通信总线,3~4线接口,以主从模式工作,收发独立,可以实现多个SPI设备互相连接. 提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI ...

  6. 几种常用通信协议:IIC协议、SPI协议、UART协议

    通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC协议: 2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一 ...

  7. 金誉半导体笔记:什么是MCU单片机的SPI、UART、I2C通讯接口

    正如我们之前所了解的 ,MCU单片机是一个集成芯片 ,但这个集成芯片有一些特殊的功能 ,可以控制外部设备 ,处理外部设备收到的数据,就像人脑一样 ,可以控制手脚的运动 ,可以处理感官收到的信息,这就是 ...

  8. (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)

    1.1 FPGA面试题-介绍低速接口(UART.IIC.SPI),SPI有几根线,每根线的作用?(三) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介 ...

  9. UART, SPI, IIC的详解及三者的区别和联系

    1.UART, SPI, IIC的详解 UART.SPI.IIC是经常用到的几个数据传输标准,下面分别总结一下: UART(Universal Asynchronous Receive Transmi ...

最新文章

  1. python人脸识别plc_三个Python项目实战,打造人脸识别系统!
  2. php下webservice使用总结
  3. 曾几何时,我们炼的不是丹,是特征
  4. C语言打包解包文件程序(简易版)
  5. 怎样让计算机快速开机,怎样设置可以让电脑快速启动开机.doc
  6. 使用Linux的tzselect功能,查看各个洲都有哪些国家(地区)
  7. iOS开发——UI基础-KVC
  8. 2020年中国养老地产行业市场现状分析,提高养老地产运营水平是关键「图」
  9. codeforces 707c
  10. Spring AOP 之 通知、连接点、切点、切面
  11. 教育认证有效期 有道云笔记_有道云笔记使用指南
  12. [Nowcoder] 2021年度训练联盟热身训练赛第六场 Mini Battleship | 深搜 回溯 乱搞
  13. (lintcode)第4题 丑数II
  14. LeetCode1153 字符串转化
  15. matlab里逻辑符号,下列符号中不属于MATLAB逻辑操作符的是()
  16. python中的list 冒号用法
  17. 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...
  18. segger j-flash使用笔记
  19. c语言怎么返回数组,c++从函数返回数组的方法代码
  20. 织梦选php哪个版本,织梦DedeCMS网站及其版本的判断

热门文章

  1. 结构化程序设计和面向对象程序设计的特点及优缺点
  2. 关于python的多行注释,启动新浏览器,循环语句乘法口诀
  3. 【Mixup】《Mixup:Beyond Empirical Risk Minimization》
  4. 解决windows上鼠标右键新建没有文本文档的选项
  5. @餐饮店老板!如何高效经营?智掌柜点餐收银机了解一下
  6. 瑞芯微RK3188硬件设计,RK3188平板芯片资料
  7. python爬取地图数据_高德3地图之python爬取POI数据及其边界经纬度(根据关键字在城市范围内搜索)...
  8. 毕业论文-降重技巧总结
  9. dell r230u盘启动安装2008_戴尔官方集成USB3.0驱动至Win2008安装U盘的方法教程(For T130/R230/R330/T330)...
  10. 浅谈erlang游戏服务器项目--英雄远征服务启动流程