打印

基础:SPI原理与应用

[复制链接]
15298|18
手机看帖
扫描二维码
随时随地手机跟帖
沙发
tianm| | 2012-9-17 09:29 | 只看该作者
??
附件没上来

使用特权

评论回复
板凳
shenmulzb1985| | 2012-9-17 13:09 | 只看该作者
没有传上来的啊,继续啊老电工,每次很关注你的帖子的啊

使用特权

评论回复
地板
tee.| | 2012-9-17 14:37 | 只看该作者
估计是太大了奥,一般这种资料,至少几十M、。

使用特权

评论回复
5
爱之翼V| | 2012-9-18 12:41 | 只看该作者
额,耐心等待附件上传

使用特权

评论回复
6
ddn123| | 2012-9-18 14:09 | 只看该作者
有答案哦!!!加QQ:135513647

使用特权

评论回复
7
hawksabre| | 2012-9-18 19:05 | 只看该作者
SPI 同步通信协议 呵呵 我来补上传输资料 呵呵    同步通信协议用的还是很广的   主要是需要双方时钟相同   呵呵

SPI协议示例.pdf

841.32 KB

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
sunny丶 + 1
8
happybird21| | 2012-9-18 20:42 | 只看该作者
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个外设的选择。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
sunny丶 + 1
9
happybird21| | 2012-9-18 20:42 | 只看该作者
SPI协议举例

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

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

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

使用特权

评论回复
10
credit| | 2012-9-19 11:33 | 只看该作者
路过,学习

使用特权

评论回复
11
heqiangok| | 2012-9-19 11:43 | 只看该作者
SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM, FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

   SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,地位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。

    SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:

(1)MOSI – 主器件数据输出,从器件数据输入
(2)MISO – 主器件数据输入,从器件数据输出
(3)SCLK – 时钟信号,由主器件产生
(4)/SS – 从器件使能信号,由主器件控制

在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。
      在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的下降沿上数据改变,同时一位数据被存入移位寄存器。

最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
SPI(Serial Peripheral Interface,串行外围设备接口)是由Motorola公司开发,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI有时候也被称为4线接口)。这种接口可以用来连接存储器(存储数据)、A/D转换器、D/A转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。支持SPI的元件很多,并且还一直在增加。
与标准的串行接口(将在第10章讲到)不同,SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机(处理器)产生,接收数据的外设(从设备)使用时钟来对串行比特流的接收进行同步化。可能会有许多芯片连到主机的同一个SPI接口上,这时主机通过触发从设备的片选输入引脚来选择接收数据的从设备,没有被选中的外设将不会参与SPI传输。
SPI主要使用4个信号:主机输出/从机输入(MOSI)、主机输入/主机输出(MISO)、串行SCLK或SCK和外设芯片(CS)。有些处理器有SPI接口专用的芯片选择,称为从机选择(SS)。
MOSI信号由主机产生,从机接收。在有些芯片上,MOSI只被简单的标为串行输入(SI),或者串行数据输入(SDI)。MISO信号由从机产生,不过还是在主机的控制下产生的。在一些芯片上,MISO有时被称为串行输出(SO)或串行数据输出(SDO)。外设片选信号通常只是由主机的备用I/O引脚产生的。下左图是微处理器通过SPI和外设进行连接的示意图。
主机和外设都包含一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器是通过MOSI信号线将字节传送给外设,外设也将自己移位寄存器中的内容通过MISO信号线返回给主机,如上右图所示。这样,两个移位寄存器中的内容就被交换了。外设的写操作和读操作是同步完成的,因此SPI成为一个很有效的协议。
如果只是进行写操作,主机只需忽略收到的字节;反过来,如果主机要读取外设的一个字节,就必须发送一个空字节来引发从机的传输。
当主机发送一个连续的数据流时,有些外设能够进行多字节传输。许多拥有SPI接口的存储器芯片都以这种方式工作。在这种传输方式下,SPI外设的芯片选择端必须在整个传输过程中保持低电平。比如,存储器芯片会希望在一个“写”命令之后紧接着收到的是4个地址字节(起始地址),这样后面接收到的数据就可以存储到该地址。一次传输可能会涉及千字节的移位或更多的信息。
其他外设只需要一个单字节(比如一个发给A/D转换器的命令),有些甚至还支持菊花链连接,如下图所示。
在这个例子中,主机处理器从其SPI接口发送3个字节的数据。第1个字节发送给外设A,当第2个字节发送给外设A的时候,第1个字节已移出了A,而传送给了B。同样,主机想要从外设A读取一个结果,它必须再发送一个3字节(空字节)的序列,这样就可以把A中的数据移到B中,然后再移到C中,最后送回主机。在这个过程中,主机还依次从B和C接收到字节。
注意,菊花链连接不一定适用于所有的SPI设备,特别是要求多字节传输的(比如存储器芯片)设备。另外,要对外设芯片的数据表进行仔细分析,确定能对它做什么而不能做什么。如果芯片的数据表中没有明确提到菊花链连接,那么该芯片不支持这种连接的几率为50%。
根据时钟极性和时钟相位的不同,SPI有4个工作模式。时钟极性有高、低两极:时钟极性为低电平时,空闲时时钟(SCK)处于低电平,传输时跳转到高电平;时钟极性为高电平时,空闲时时钟处于高电平,传输时跳转到低电平。
时钟相位有两个:时钟相位0和时钟相位1。对于时钟相位0,如果时钟极性是低电平,MOSI和MISO输出在(SCK)的上升沿有效。如果时钟电平极性为高,对于时钟相位0,这些输出在SCK的下降沿有效。MISO输出的第X位是一个未定义的附加位,是SPI接口特有的情况。用户不必担心这个位,因为SPI接口将忽略该位。

使用特权

评论回复
12
pxwuestc| | 2012-9-19 11:54 | 只看该作者
怎么没附件?

使用特权

评论回复
13
kkuull| | 2012-9-19 13:11 | 只看该作者
:L忽悠人。。。

使用特权

评论回复
14
waitingf| | 2012-9-22 19:30 | 只看该作者
这个挺有用的,spi是经常用的

使用特权

评论回复
15
蚂蚁雄心| | 2012-9-22 19:38 | 只看该作者
spi确实用的非常广泛的

使用特权

评论回复
16
hongong| | 2012-9-27 17:22 | 只看该作者
菜鸟来了

使用特权

评论回复
17
ledaa| | 2012-9-28 16:58 | 只看该作者
嗯,7楼很热心,先收下了,希望楼主也把你的宝贝资料穿上来吧:lol

使用特权

评论回复
18
sunny丶| | 2012-9-28 17:30 | 只看该作者
感谢7,8L啊。

使用特权

评论回复
19
双城| | 2021-7-19 10:58 | 只看该作者
hawksabre 发表于 2012-9-18 19:05
SPI 同步通信协议 呵呵 我来补上传输资料 呵呵    同步通信协议用的还是很广的   主要是需要双方时钟相同   ...

谢谢,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

417

帖子

0

粉丝