spi通信规范.docx
- 文档编号:24871349
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:8
- 大小:19.54KB
spi通信规范.docx
《spi通信规范.docx》由会员分享,可在线阅读,更多相关《spi通信规范.docx(8页珍藏版)》请在冰豆网上搜索。
spi通信规范
竭诚为您提供优质文档/双击可除
spi通信规范
篇一:
spi通讯协议介绍
spi通讯协议介绍
spiinterface
spi接口介绍
spi是由美国摩托罗拉公司推出的一种同步串行传输规范,常作为单片机外设芯片串行扩展接口。
spi有4个引脚:
ss(从器件选择线)、sdo(串行数据输出线)、sdi(串行数据输入线)和sck(同步串行时钟线)。
spi可以用全双工通信方式同时发送和接收8(16)位数据,过程如下:
主机启动发送过程,送出时钟脉冲信号,主移位寄存器的数据通过sdo移入到从移位寄存器,同时从移位寄存器中的数据通过sdi移人到主移位寄存器中。
8(16)个时钟脉冲过后,时钟停顿,主移位寄存器中的8(16)位数据全部移人到从移位寄存器中,随即又被自动装入从接收缓冲器中,从机接收缓冲器满标志位(bF)和中断标志位(sspiF)置“1”。
同理,从移位寄存器中的8位数据全部移入到主寄存器中,随即又被自动装入到主接收缓冲器中.主接收缓冲器满标志位(bF)和中断标志位(sspiF)置“1”。
主cpu检测到主接收缓冲器的满标志位或者中断标志位置1后,就可以读取接收缓冲器中的数据。
同样,从cpu检测到从接收缓冲器满标志位或中断标志位置1后,就可以读取接收缓冲器中的数据,这样就完成了一次相互通信过程。
这里设置dspic30F6014为主控制器,isd4002为从器件,通过spi口完成通信控制的过程。
spi总线协议
spi是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是sdo=1;寄存器=0101010x。
下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。
这样就完成里一个spi时序。
例子:
假设主机和从机初始化就绪:
并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:
假设上升沿发送数据
第1页
程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
图3示出spi总线工作的四种方式,其中使用的最为广泛的是spi0和spi3方式(实线表示):
第2页
图2spi总线四种工作方式
spi总线接口及时序
spi模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(cpol)对传输协议没有重大的影响。
如果cpol=0,串行同步时钟的空闲状态为低电平;如果cpol=1,串行同步时钟的空闲状态为高电平。
时钟相位(cpha)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果cpha=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果cpha=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
spi主模块和与之通信的外设音时钟相位和极性应该一致。
spi
总线接口时序如图所示。
第3页
spi功能模块的设计
根据功能定义及spi的工作原理,将整个ipcore分为8个子模块:
uc接口模块、时钟分频模块、发送数据FiFo模块、接收数据FiFo模块、状态机模块、发送数据逻辑模块、接收数据逻辑模块以及中断形式模块。
深入分析spi的四种传输协议可以发现,根据一种协议,只要对串行同步时钟进行转换,就能得到其余的三种协议。
为了简化设计规定,如果要连续传输多个数据,在两个数据传输之间插入一个串行时钟的空闲等待,这样状态机只需两种状态(空闲和工作)就能正确工作。
spi协议简介
spi,是英语serialperipheralinterfacespi,是一种高速的,全双工,同步的通信总线,管脚,同时为pcbspi,是一种高速的,全双工,同步的通信总线,其工作模式有两种:
主模式和从模式,无论那种模式,都支持
3mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。
到目前为止,我使用过的具有spi总线的器件,就是存储芯片eprom:
at25128,在使用过程中,发现的确是有这种总线的优点。
下面以p89lpc900单片机的spi总线来解释spi总线的通用使用规则。
lpc900单片机的spi接口主要由4个引脚构成:
spiclk、mosi、miso及/ss,其中spiclk是整个spi总线的公用时钟,mosi、miso作为主机,从机的输入输出的标志,mosi是主机的输出,从机的输入,miso是主机的输入,从机的输出。
/ss
是从机的标志管脚,在互相通信的两个spi总线的器件,/ss管脚的电平低的是从机,相反/ss管脚的电平高的是主机。
在一个spi通信系统中,必须有主机。
spi总线可以配置成单主单从,单主多从,互为主从。
今以互为主从模式作为讲解:
要进行spi互为主从操作,必须遵照以下步骤:
第4页
1对a、b进行初始化,均设为主机(需要进行以下操作)。
a)spi端口初始化为准双向。
b)spctl配置为0x50,ssig=0,spen=1,mstR=1。
c)清除spstat中的spiF及wcol标志位为0。
d)如果需要使用spi中断,可使能相应中断位。
2将a上一个引脚连接到b的/ss引脚上,然后拉低/ss,可将b强行置为从机模式,同时b机会发生以下变化:
a)b机的mstR位自动清0。
b)b机的mosi及spiclk强行变为输入模式,miso则变为输出模式。
c)b机spiF位置位。
d)如果spi中断使能,b机将执行spi中断服务程序。
3b机可设置为查询接收或中断接收方式,以时刻准备接收由a机发送过来的数据,要使b机恢复为主机,必须完整执行步骤1。
本示例中,通过两块dp932实验板构成了spi互为主从测试系统。
程序中应注意的问题:
1程序中应注意对首次拉低ss引脚进行处理:
当a机首次通过b_ss将b机设置为从机后,从机的sbiF位会置位(会被认为完成一次传输),如果这之前,使能了spi中断,则从机则会执行相应的中断服务程序(本示例程序中,当b机的ss引脚被拉为低电平,b机的sbiF首次置位进行处理)。
2关于从机恢复为主机的问题:
互为主从模式中,当b机被a机设置为从机后,cpctl寄存器中mstR位被清除为0,且spiF被置1,mosi和spiclk强制变为输入模式,miso强制变为输出模式。
要想恢复为主机,必须执行以下操作:
a)将mstR位置1,spiF位清0。
第5页
篇二:
spi通信的总结
stm32---spi通信的总结(库函数操作)
本文主要由7项内容介绍spi并会在最后附上测试源码供参考:
1.spi的通信协议
2.spi通信初始化(以stm32为从机,lpc1114为主机介绍)
3.spi的读写函数
4.spi的中断配置
5.spi的sma操作
6.测试源码
7.易出现的问题及原因和解决方法
一、spi的通信协议
spi(serialperipheralinterface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。
spi接口一般由4根线组成,cs片选信号(有的单片机上也称为nss),sclk时钟信号线,miso数据线(主机输入从机输出),mosi数据线(主机输出从机输入),cs决定了唯一的与主设备通信的从设备,如没有cs信号,则只能存在一个从设备,主设备通过产生移位时钟信号来发起通讯。
通讯时主机的数据由miso输入,由mosi输出,输入的数据在时钟的上升或下降沿被采样,输出数据在紧接着的下降或上升沿被发出(具体由spi的时钟相位和极性的设置而决定)。
二、以stm32为例介绍spi通信
1.stm32f103带有3个spi模块其特性如下:
2spi初始化
初始化spi主要是对spi要使用到的引脚以及spi通信协议中时钟相位和极性进行设置,其实stm32的工程师已经帮我们做好了这写工作,调用库函数,根据自己的需要来修改其中的参量来完成自己的配置即可,主要的配置是如下几项:
引脚的配置
spi1的sclk,miso,mosi分别是pa5,pa6,pa7引脚,这几个引脚的模式都配置成gpio_mode_aF_pp复用推挽输出(关于gpio的8种工作模式如不清楚请自己XX,在此不解释),如果是单主单从,cs引脚可以不配置,都设置成软件模式即可。
通信参数的设置
1.spi_direction_2lines_Fullduplex把spi设置成全双工通信;
2.在spi_mode里设置你的模式(主机或者从机),
3.spi_datasize是来设置数据传输的帧格式的spi_datasize_8b是指8位数据帧格式,也可以设置为spi_datasize_16b,即16位帧格式
4.spi_cpol和spi_cpha是两个很重要的参数,是设置spi通信时钟的极性和相位的,一
共有四种模式
在库函数中cpol有两个值spi_cpol_high(=1)和spi_cpol_low(=0).cpha有两个值spi_cpha_1edge(=0)和spi_cpha_2edge(=1)
cpol表示时钟在空闲状态的极性是高电平还是低电平,而cpha
则表示数
据是在什么时刻被采样的,手册中如下:
我的程序中主、从机的这两位设置的相同都是设置成1,即空闲时时钟是高电平,数据再第二个时钟沿被采样,实验显示数据收发都正常。
(要特别注意极性和相位的设置否则,数据传输会出现错位的现象)
一般主从机的这两个位要设置的一样,但是网上也有人说不能设置成一样的,在后文中我对主从机极性和相位的配置的16种情况都做了测试,结果见下文。
下图很好的描述了4种模式下的时序状况
引用网友的一句话:
:
“spi主模块和与之通信的外设备时钟相位和极性应该一致。
个人理解这句话有2层意思:
其一,主设备spi时钟和极性的配置应该由外设的从设备来决定;其二,二者的配置应该保持一致,即主设备的sdo同从设备的sdo配置一致,主设备的sdi同从设备的sdi配置一致。
因为主从设备是在sclk的控制下,同时发送和接收数据,并通过2个双向移位寄存器来交换数据。
”
5.spi_baudRateprescaler波特率的设置
这在主机模式中,这一位的设置直接决定了通信的传输速率,而从机的设置不会影响数据传输的速率,手册中有这样一句话:
6.spi_Firstbit这一位是设置首先传输的高字节还是低字节
spi_Firstbit_msb是先传输高字节,spi_Firstbit_lsb是先传输低字节
注意在初始化函数里还有两项重要的内容就是在初始化之前先使能spi的时钟和在初始化配置完成后使能spi。
(………..初始化配置……………)
三、spi的读写函数
spi有一个16位的数据寄存器spi_dR,它对应两个缓冲区,1个发送缓冲区,1
个接收缓冲区,
当在控制寄存器里
spi_cR1里对dFF位设置数据帧格式为8位时,发送和接收只用到spi_dR[7:
0]这8位,15-8位被强制为0,帧格式设置成16位时全用。
篇三:
spi串行通信协议
同步串行外设接口(spi)是由摩托罗拉公司开发的全双工同步串行总线,该总线大量用在与eepRom、adc、FRam和显示驱动器之类的慢速外设器件通信。
spi(serialperipheralinterface)是一种串行串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。
spi接口由sdi(串行数据输入),sdo(串行数据输出),sck(串行移位时钟),cs(从使能信号)四种信号构成,cs决定了唯一的与主设备通信的从设备,如没有cs信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。
通讯时,数据由sdo输出,sdi输入,数据在时钟的上升或下降沿由sdo输出,在紧接着的下降或上升沿由sdi读入,这样经过8/16次时钟的改变,完成8/16位数据的传输。
总线协议
该总线通信基于主-从(所有的串行的总线均是这样,usb,iic,spi等)配置,而且下面提到的方向性的操作合指代全部从主设备的角度说得。
它有以下4个信号:
mosi:
主出/从入miso:
主入/从出sck:
串行时钟
ss:
从属选择;芯片上“从属选择”(slave-select)的引脚数决定了可连到总线上的器件数量。
在spi传输中,数据是同步进行发送和接收的。
数据传输的时钟基于来自主处理器的时钟脉冲(好像也可以是io上的电平的模拟时钟),摩托罗拉没有定义任何通用spi的时钟规范。
然而,最常用的时钟设置基于时钟极性(cpol)和时钟相位(cpha)两个参数,cpol定义spi串行时钟的活动状态,而cpha定义相对于so-数据位的时钟相位。
cpol和cpha的设置决定了数据取样的时钟沿。
数据方向和通信速度
spi传输串行数据时首先传输最高位。
波特率可以高达5mbps,具体速度大小取决于spi硬件。
例如,xicor公司的spi串行器件传输速度能达到5mhz。
spi总线接口及时序
spi总线包括1根串行同步时钟信号线以及2根数据线。
spi模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(cpol)对传输协议没有重大的影响。
如果cpol=0,串行同步时钟的空闲状态为低电平;如果cpol=1,串行同步时钟的空闲状态为高电平。
时钟相位(cpha)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果cpha=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果cpha=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
spi主模块和与之通信的外设音时钟相位和极性应该一致。
spi接口时序如图3、图4所示。
spi是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候数据将会是sdo=1;寄存器
=0101010x。
下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010,sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。
这样就完成里一个spi时序。
例子
假设主机和从机初始化就绪:
并且主机的sbuff=0xaa
(10101010),从机的sbuff=0x55(01010101),下面将分步对spi的8个时钟周期的数据情况演示一遍:
假设上升沿发送数据.
spi总线是motorola公司推出的三线同步接口,同步串行3线方式进行通信:
一条时钟线sck,一条数据输入线mosi,一条数据输出线miso;用于cpu与各种外围器件进行全双工、同步串行通讯。
spi主要特点有:
可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
图3示出spi总线工作的四种方式,其中使用的最为广泛的是spi0和spi3方式(实线表示):
图2spi总线四种工作方式spi模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(cpol)对传输协议没有重大的影响。
如果cpol=0,串行同步时钟的空闲状态为低电平;如果cpol=1,串行同步时钟的空闲状态为高电平。
时钟相位(cpha)能够配置用于选择两种不同的传输协议之一进行数据传输。
如果cpha=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果cpha=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。
spi主模块和与之通信的外设音时钟相位和极性应该一致。
spi接口时序如图3、图4所示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- spi 通信 规范