I2C的数据输入输出用的是一根线,SPI则分为dataIN和dataOUT。由于这个原因,选用I2C时CPU的端口占用少,SPI多一根。可是由于I2C的数据线是双向的,所以阻隔比较杂乱,SPI则比较简略。所以系统内部通讯可用I2C,若要与外部通讯则最好用SPI带阻隔(能够进步抗干扰才干)。可是I2C和SPI都不合适长距离传输。长距离时就要用485了。
榜首:
第二,区别在电气信号线上:
第三,从第二点显着能够看出,SPI和UART能够完结全双工,但I2C不可;
个人认为:
SPI总线系统是一种同步串行外设接口,它能够使MCU与各种外围设备以串行方法进行通讯以交流信息。外围设置FLASHRAM、网络操控器、LCD显现驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家出产的多种规范外围器材直接接口,该接口一般运用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有用的从机挑选线SS(有的SPI接口芯片带有中止信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
SPI的通讯原理很简略,它以主从方法作业,这种形式一般有一个主设备和一个或多个从设备,需求至少4根线,事实上3根也能够(单向传输时)。也是一切依据SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
(1)SDO
(2)SDI
(3)SCLK – 时钟信号,由主设备发生
(4)CS
其间CS是操控芯片是否被选中的,也便是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有用。这就答应在同一总线上衔接多个SPI设备成为或许。
接下来就担任通讯的3根线了。通讯是经过数据交流完结的,这儿先要知道SPI是串行通讯协议,也便是说数据是一位一位的传输的。这便是SCK时钟线存在的原因,由SCK供给时钟脉冲,SDI,SDO则依据此脉冲完结数据传输。数据输出经过 SDO线,数据在时钟上升沿或下降沿时改动,在紧接着的下降沿或上升沿被读取。完结一位数据传输,输入也运用相同原理。这样,在至少8次时钟信号的改动(上沿和下沿为一次),就能够完结8位数据的传输。
要留意的是,SCK信号线只由主设备操控,从设备不能操控信号线。相同,在一个依据SPI的设备中,至少有一个主控设备。这样传输的特色:这样的传输方法有一个长处,与一般的串行通讯不同,一般的串行通讯一次接连传送至少8位数据,而SPI答应数据一位一位的传送,乃至答应暂停,由于SCK时钟线由主控设备操控,当没有时钟跳变时,从设备不收集或传送数据。也便是说,主设备经过对SCK时钟线的操控能够完结对通讯的操控。SPI仍是一个数据交流协议:由于SPI的数据输入和输出线独立,所以答应一起完结数据的输入和输出。不同的SPI设备的完结方法不尽相同,主要是数据改动和收集的时刻不同,在时钟信号上沿或下沿收集有不同界说,详细请参阅相关器材的文档。
在点对点的通讯中,SPI接口不需求进行寻址操作,且为全双工通讯,显得简略高效。在多个从设备的系统中,每个从设备需求独立的使能信号,硬件上比I2C系统要略微杂乱一些。
最终,SPI接口的一个缺陷:没有指定的流操控,没有应对机制承认是否接纳到数据。
AT91RM9200的SPI接口主要由4个引脚构成:SPICLK、MOSI、MISO及 /SS,其间SPICLK是整个SPI总线的共用时钟,MOSI、MISO作为主机,从机的输入输出的标志,MOSI是主机的输出,从机的输入,MISO 是主机的输入,从机的输出。/SS是从机的标志管脚,在相互通讯的两个SPI总线的器材,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通讯系统中,有必要有主机。SPI总线能够装备成单主单从,单主多从,互为主从。SPI的片选能够扩大挑选16个外设,这时PCS输出=NPCS,说NPCS0~3接4-16译码器,这个译码器是需求外接4-16译码器,译码器的输入为NPCS0~3,输出用于16个外设的挑选。
SPI协议举例
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简略,主要是在sck的操控下,两个双向移位寄存器进行数据交流。
举例:
这样就完结了两个寄存器8位的交流,,sdi、sdo相对于主机而言的。其间ss引脚作为主机的时分,从机能够把它拉底被迫选为从机,作为从机的是时分,能够作为片选脚用。依据以上剖析,一个完好的传送周期是16位,即两个字节,由于,首要主机要发送指令曩昔,然后从机依据主机的指令预备数据,主机鄙人一个8位时钟周期才把数据读回来。 SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方法进行通讯:一条时钟线SCK,一条数据输入线OSI,一条数据输出线MISO;用于CPU与各种外围器材进行全双工、同步串行通讯。SPI主要特色有:能够一起宣布和接纳串行数据;能够当作主机或从机作业;供给频率可编程时钟;发送完毕中止标志;写抵触维护;总线竞赛维护等。下图示出SPI总线作业的四种方法,其间运用的最为广泛的是SPI0和SPI3方法 (实线表明):
SPI总线四种作业方法 SPI 模块为了和外设进行数据交流,依据外设作业要求,其输出串行同步时钟极性和相位能够进行装备,时钟极性(CPOL)对传输协议没有严重的影响。假如 CPOL=0,串行同步时钟的闲暇状况为低电平;假如CPOL=1,串行同步时钟的闲暇状况为高电平。时钟相位(CPHA)能够装备用于挑选两种不同的传输协议之一进行数据传输。假如CPHA=0,在串行同步时钟的榜首个跳变沿(上升或下降)数据被采样;假如CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通讯的外设备时钟相位和极性应该共同。
SPI总线包含1根串行同步时钟信号线以及2根数据线。
弥补:
上文中最终一句话:SPI主模块和与之通讯的外设备时钟相位和极性应该共同。个人了解这句话有2层意思:其一,主设备SPI时钟和极性的装备应该由外设来决议;其二,二者的装备应该保持共同,即主设备的SDO同从设备的SDO装备共同,主设备的SDI同从设备的SDI装备共同。由于主从设备是在SCLK的操控下,一起发送和接纳数据,并经过2个双向移位寄存器来交流数据。
上升沿主机SDO发送数据1,一起从设备SDO发送数据0;紧接着在SCLK的下降沿的时分从设备的SDI接纳到了主机发送过来的数据1,一起主机也接纳到了从设备发送过来的数据0.
SPI协议心得
SPI接口时钟装备心得:
在主设备这边装备SPI接口时钟的时分一定要弄清楚从设备的时钟要求,由于主设备这边的时钟极性和相位都是以从设备为基准的。因而在时钟极性的装备上一定要搞清楚从设备是在时钟的上升沿仍是下降沿接纳数据,是在时钟的下降沿仍是上升沿输出数据。但要留意的是,由于主设备的SDO衔接从设备的SDI,从设备的SDO衔接主设备的SDI,从设备SDI接纳的数据是主设备的SDO发送过来的,主设备SDI接纳的数据是从设备SDO发送过来的,所以主设备这边SPI时钟极性的装备(即SDO的装备)随从设备的SDI接纳数据的极性是相反的,随从设备SDO发送数据的极性是相同的。下面这段话是Sychip Wlan8100 Module Spec上说的,充分说明了时钟极性是怎么装备的:
The 81xx module will always input da
意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接纳数据。因而主设备这边SPI时钟极性应该装备为下降沿有用。
又如,下面这段话是摘自LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of da
意思是:从设备SSD1289在时钟的上升沿接纳数据,并且是依照从高位到位置的次序接纳数据的。因而主设备的SPI时钟极性相同应该装备为下降沿有用。
时钟极性和相位装备正确后,数据才能够被精确的发送和接纳。因而应该对照从设备的SPI接口时序或许Spec文档说明来正确装备主设备的时钟。
软件进程改善
SPI: Software Process Improvement. 软件进程改善。是软件企业项目进程质量的改善,CMM,ISO9000-3说的便是这个。
UART
敞开分类: 计算机、通讯、信息
UART: Universal Asynchronous Receiver/Transmitter,通用异步接纳/发送设备,UART是一个并行输入成为串行输出的芯片,一般集成在主板上,多数是16550AFN芯片。由于计算机内部选用并行数据数据,不能直接把数据发到Modem,有必要经过UART收拾才干进行异步传输,其进程为:CPU先把预备写入串行设备的数据放到UART的寄存器(暂时内存块)中,再经过FIFO(First Input First Output,先入先出行列)传送到串行设备,若是没有FIFO,信息将变得乱七八糟,不或许传送到Modem。
它是用于操控计算机与串行设备的芯片。有一点要留意的是,它供给了RS-232C数据终端设备接口,这样计算机就能够和调制解调器或其它运用RS-232C接口的串行设备通讯了。作为接口的一部分,UART还供给以下功用:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部运用并行数据的器材运用。在输出的串行数据流中参加奇偶校验位,并对从外部接纳的数据流进行奇偶校验。在输出数据流中参加启停符号,并从接纳数据流中删去启停符号。处理由键盘或鼠标宣布的中止信号(键盘和鼠标也是串行设备)。能够处理计算机与外部串行设备的同步办理问题。有一些比较高级的UART还供给输入输出数据的缓冲区,现在比较新的UART是16550,它能够在计算机需求处理数据前在其缓冲区内存储16字节数据,而一般的UART是8250。现在假如您购买一个内置的调制解调器,此调制解调器内部一般就会有16550 UART。
区别在电气信号线上:
从以上很显着能够看出,SPI和UART能够完结全双工,但I2C不可;
第四,看看牛人们的定见吧!
———————————————————————————————————————————–
SPI 是一种答应一个主设备发动一个与从设备的同步通讯的协议,然后完结数据的交流。也便是SPI是一种规定好的通讯方法。这种通讯方法的长处是占用端口较少,一般4根就够根本通讯了。一起传输速度也很高。一般来说要求主设备要有SPI操控器(但可用模仿方法),就能够与依据SPI的芯片通讯了。
I2C
? 只要求两条总线线路:一条串行数据线SDA 一条串行时钟线SCL
? 每个衔接到总线的器材都能够经过仅有的地址和一向存在的简略的主机从机联系软件设定地址主机能够作为主机发送器或主机接纳器
? 它是一个真实的多主机总线假如两个或更多主机一起初始化数据传输能够经过抵触检测和裁定,避免数据被损坏
? 串行的8 位双向数据传输位速率在规范形式下可达100kbit/s 快速形式下可达400kbit/s 高速形式下可达3.4Mbit/s
? 片上的滤波器能够滤去总线数据线上的毛刺波确保数据完好
? 衔接到相同总线的IC 数量只遭到总线的最大电容400pF 约束
UART
UART总线是异步串口,因而一般比前两种同步串口的结构要杂乱许多,一般由波特率发生器(发生的波特率等于传输波特率的16倍)、UART接纳器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接纳。
UART常用于操控计算机与串行设备的芯片。有一点要留意的是,它供给了RS-232C数据终端设备接口,这样计算机就能够和调制解调器或其它运用RS-232C接口的串行设备通讯了。
显着能够看出,SPI和UART能够完结全双工,但I2C不可。