首页 > 编程知识 正文

spi协议时钟频率,SPI全称

时间:2023-05-03 22:31:48 阅读:51354 作者:756

SPI是英文串行外围接口的缩写,顾名思义是串行外围设备接口。 这是摩托罗拉最初在MC68HCXX系列处理器上定义的。 SPI接口主要应用于EEPROM、FLASH、实时时钟、AD转换器以及数字信号处理器与数字信号解码器之间。 SPI是一种高速、全双工、同步的通信总线,而且在芯片引脚上只占用四条线,节省了芯片引脚,同时为PCB的布局提供了空间,提供了方便,由于这一简单易用的特性,现在越来越多的芯片使用这种通信协议

SPI的通信原理很简单,作为主从工作。 此模式通常有一个主设备和一个或多个从设备,至少需要四条线路。 实际上3根也可以(单向传输时)。 所有基于SPI的设备都通用。 这是数据输入(SDI )、SDO )、SCK和CS )芯片选择。

SDO -主数据输出、从设备数据输入SDI -主数据输入、从设备数据输出SCLK -时钟信号、从主设备生成CS -从设备使能信号,主设备为http://www 这里,CS表示是否选择了芯片,即在只有芯片选择信号是预先决定使能信号的情况下(例如

CS:通信是通过数据交换进行的,但首先要知道SPI是串行通信协议,也就是说数据是逐位传输的。 这是不存在SCK时钟线的原因,从SCK提供时钟,SDI、SDO基于该脉冲完成数据传输。 数据输出通过SDO线,在时钟的上升沿或下降沿时数据发生变化,在紧接着的下降沿或上升沿时读取。 1位数据传输完成,输入也使用相同的原理。 这样,至少在8次时钟信号的变化(上边缘和下边缘为1次)中,完成8位数据的传送。

应该注意的是,SCK信号线只能由主设备控制,从设备不能控制信号线。 同样,基于SPI的设备至少有一个主设备。 这样的传输特征:与普通串行通信不同,这样的传输方案具有如下优点:数据在正常串行通信中一次连续地传输至少8位,但是在SPI中数据能够被逐位传输或者临时停止这是因为,SCK时钟线由主设备控制,所以当没有时钟跳跃时从设备不收集数据或传输数据。 也就是说,这是因为主设备可以通过控制SCK时钟线来控制通信。 SPI也是一种数据交换协议。 SPI的数据输入输出线是独立的,因此可以同时进行数据的输入输出。 不同的SPI设备实现方式不同,主要是数据修改和采集的时间不同,时钟信号的上沿或下沿采集有不同的定义。 具体请参考相关设备的文档。

在点对点通信中,SPI接口不需要地址操作,而是全双工通信,因此简单高效。 在多个从设备系统中,每个从设备都需要独立的使能信号,在硬件上比I2C系统稍复杂。

最后,SPI接口的一个缺点是SDI/SDO/SCLK

AT91RM9200的SPI接口主要由SPICLK、MOSI、MISO和/SS引脚组成,其中SPICLK是整个SPI总线的公共时钟,MOSI、MISO是主、从输入输出的标志MISO是主机的输入,/SS是从机的标志引脚,是相互通信的两条SPI总线的设备,/SS引脚的电平低的是从机,相反/SS引脚的电平高的是主机。 SPI通信系统需要主机。 SPI总线可以配置为单主站单从站、单主站多从站和相互主站。

可以扩展16个外围设备来选择SPI的片选择。 在这种情况下,PCS输出=NPCS,据说在NPCS0~3上连接4-16解码器。 该解码器需要外置4-16解码器,解码器输入为NPCS0~3,输出用于16个外围设备的选择。

没有指定的流控制,没有应答机制确认是否接收到数据SPI是一种环形总线结构,由ss(cs )、sck、sdi和sdo组成。 其时序其实很简单,主要是在sck的控制下两个双向移位寄存器进行数据交换。

假设下面的8位寄存器中包含要发送的数据10101010,先发送上升沿发送、下降沿接收、高位。

第一次启动时的数据为sdo=1; 寄存器=0101010x。 下降沿到来时,sdi上的电平保存在寄存器中。 于是寄存器=0101010sdi,8个时钟后两个寄存器的内容交换一次。 这样就完成了内1个spi序列。

示例:

假设主机和从机已准备好初始化。 然后,设为主机的sbuff=0xaa、从机的sbuff=0x55。 下面,对于spi个时钟周期的数据状况,表示:通过假设上升沿发送数据,完成了两个寄存器的8位交换。 上面是上升沿,下面是下降沿,sdi、sdo是针对主机的。 其中,ss端子为主节点时,从节点可以将其拉出来被动选择为从节点,成为从节点是时候,可以作为单脚使用。 根据上述分析,完整的传输周期为16位,即2字节。 这是因为,首先主机发送命令,从机根据主机的命令准备数据,主机在下一个8位时钟周期内读取数据。 SPI总线是Moto

rola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束 中断标志;写冲突保护;总线竞争保护等。下图示出SPI总线工作的四种方式,其中使用的最为广泛的是SPI0和SPI3方式 (实线表示):                  

                                                   

                                                                                               SPI总线四种工作方式

SPI 模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。

如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为老实的洋葱。时钟相位(CPHA)能够配置用于选择两种不同的传输协议之一进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设备时钟相位和极性应该一致。
补充

上文中最后一句话:SPI主模块和与之通信的外设备时钟相位和极性应该一致。个人理解这句话有2层意思:其一,主设备SPI时钟和极性的配置应该由外设来决定;其二,二者的配置应该保持一致,即主设备的SDO同从设备的SDO配置一致,主设备的SDI同从设备的SDI配置一致。因为主从设备是在SCLK的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。工作原理演示如下图:

 

上升沿主机SDO发送数据1,同时从设备SDO发送数据0;紧接着在SCLK的下降沿的时候从设备的SDI接收到了主机发送过来的数据1,同时主机也接收到了从设备发送过来的数据0.

1.3.协议心得

SPI接口时钟配置心得:

  在主设备这边配置SPI接口时钟的时候一定要弄清楚从设备的时钟要求,因为主设备这边的时钟极性和相位都是以从设备为基准的。因此在时钟极性的配置上一定要搞清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的下降沿还是上升沿输出数据。但要注意的是,由于主设备的SDO连接从设备的SDI,从设备的SDO连接主设备的SDI,从设备SDI接收的数据是主设备的SDO发送过来的,主设备SDI接收的数据是从设备SDO发送过来的,所以主设备这边SPI时钟极性的配置(即SDO的配置)跟从设备的SDI接收数据的极性是相反的,跟从设备SDO发送数据的极性是相同的。下面这段话是Sychip Wlan8100 Module Spec上说的,充分说明了时钟极性是如何配置的:

The 81xx module will always input data bits at the rising edge of the clock, and the host will always output data bits on the falling edge of the clock.

意思是:主设备在时钟的下降沿发送数据,从设备在时钟的上升沿接收数据。因此主设备这边SPI时钟极性应该配置为下降沿有效。

又如,下面这段话是摘自LCD Driver IC SSD1289:

SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.

意思是:从设备SSD1289在时钟的上升沿接收数据,而且是按照从高位到地位的顺序接收数据的。因此主设备的SPI时钟极性同样应该配置为下降沿有效。

时钟极性和相位配置正确后,数据才能够被准确的发送和接收, 因此应该对照从设备的SPI接口时序或者Spec文档说明来正确配置主设备的时钟。

2.SPI协议软件模拟 2.1.单片机软件模拟SPI接口—加深理解SPI总线协议           SPI(Serial Peripheral Interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准,目前,各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,EEPROM,FlashROM,A/D转换器、D/A转换器、LED/LED显示驱动器、I/O接口芯片、实时时钟、UART收发器等等,为用户的外围扩展提供了极其灵活而价廉的选择。由于SPI总线接口只占用微处理器四个I/O口线,采用SPI总线接口可以简化电路没计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。

        现以 AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。  2.2.93C46存储器SPI总线的工作原理           93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和老实的洋葱有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。  2.3.软件模拟SPI接口的实现方法            对于不带SPI串行总线接口的AT89C2051单片 机来说,可以使用软件来模拟SPI的操作,图1所示 为AT89C2051单片机与串行EEPROM 93C46的硬件 连接图,其中,P1.0模拟SPI主设备的数据输出端 SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟 SPI的从机选择端SCS,P1.1模拟SPI的数据输入 SDI。
         上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。
         读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。
         写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。
         写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。                        写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。        

转载于:https://www.cnblogs.com/whs-bk/p/8401441.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。