打印
[DemoCode下载]

串行外设接口(SPI)控制器

[复制链接]
1294|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
串行外设接口(SPI)是一个工作于全双工模式下的同步串行数据通讯协议。 设备通过4线双向接口工作于
主机/从机模式进行通讯。 NuMicro™ M051系列包括最多2组SPI控制器,将从外设接收到的数据进行串
并转换, 或将要发送到外设的数据进行并串转换。每组SPI控制器都可被设置成主机; 也可设置为被片外
主机设备控制的从机。

特性
 最多两组SPI控制器
 支持主/从机模式
 传输比特长度可配置
 支持burst操作模式,在一次传输过程中,发送/接收最多一次可以传输两笔
 提供FIFO缓存
 支持MSB 或 LSB 优先传输
 字节重排序功能
 字节或字休眠模式
 主机模式下支持两种可编程的串行时钟频率
 从机模式下支持3线模式,没有从设备片选
 SPI时钟频率可以配置等于系统时钟频率


沙发
yiyigirl2014|  楼主 | 2016-7-13 22:28 | 只看该作者
基本配置
SPI 引脚功能在P0_MFP 和 P1_MFP 寄存器中配置。 SPI0 和 SPI1 外设时钟在APBCLK[12] 和
APBCLK[13]中使能。 M05xxDN/DE中, SPI外设时钟源在CLKSEL1[4] 和 CLKSEL1[5]中选择

SPI 外设时钟和 SPI 总线时钟
SPI 控制器需要SPI 外设时钟来驱动 SPI 逻辑单元实现数据传输。 SPI 总线时钟是SPICLKx 引脚上的时
钟。 .SPI 总线时钟频率计算M05xxBN 和 M05xxDN/DE是不同的。
M05xxBN
M05xxBN SPI 主 机 模 式 , SPI 外 设 时 钟 频 率 由 DIVIDER (SPI_DIVIDER[15:0]) 和 DIV_ONE
(SPI_CNTRL2[0])的值决定。如果DIV_ONE = 1, SPI 总线时钟频率=SPI 外设时钟频率= 系统时钟频
率。当可变总线时钟频率功能关闭时, SPI 外设时钟频率= SPI 总线频率。如果VARCLK_EN
(SPI_CTL[23]) =1 , M05xxBN SPI 支 持 可 变 总 线 时 钟 。 这 种 情 况 下 , 根 据 DIVIDER
(SPI_DIVIDER[15:0]) 和 DIVIDER2 (SPI_DIVIDER[31:16])的设定,总线输出时钟频率可以编程为2个
不同的频率中的1个。 每个周期的时钟频率由SPI_VARCLK 寄存器的值决定。
M05xxBN SPI 从机模式,片外主设备通过SPICLK引脚驱动总线时钟输入到该SPI 控制器。系统时钟作
为SPI 外设时钟。 SPI 外设时钟频率必须至少比SPI 总线时钟频率快5 倍以上.
M05xxDN/DE
M05xxDN/DE SPI主机模式和从机模式, SPI 外设时钟频率由时钟源选择、 BCn (SPI_CNTRL2[31]) 和
时钟除频 (SPI_DIVIDER[7:0]) 决定。 CLKSEL1 寄存器的SPIx_S 决定SPI外设的时钟源。时钟源可以是
HCLK 或者 PLL 输出。 如果BCn = 0, SPI时钟频率的计算方法和以前的产品兼容。 SPI_DIVIDER 寄存
器DIVIDER的值决定时钟频率的除数。
M05xxDN/DE SPI 主模式, SPI 外设时钟频率等于 SPI 总线时钟频率.
M05xxDN/DE SPI 从模式, SPI 总线时钟由片外主机提供。 SPI从机外设时钟频率必须比主机输入的总
线时钟频率快。无论主机还是从机, SPI 外设时钟频率不能比APB的时钟频率还快。
主机/从机模式
SPI控制器可通过设置SLAVE 位(SPI_CNTRL[18])被配置为主机或从机模式, 来与片外SPI从机或主机
设备通讯。 主机模式与从机模式下的应用框图如下所示。


使用特权

评论回复
板凳
yiyigirl2014|  楼主 | 2016-7-13 22:28 | 只看该作者
时钟极性
在主机模式下, CLKP 位 (SPI_CNTRL[11])定义总线时钟的空闲状态。如果CLKP = 1, 空闲状态下
SPICLK输出高电平。 CLKP = 0时, SPICLK在空闲状态下输出低电平。
发送/接收位长度
传输字的比特长度在TX_BIT_LEN 位域(SPI_CNTRL[7:3])中配置。对于发送和接收,一个传输字的比
特长度可被配置为最多32位。

使用特权

评论回复
地板
ideafor| | 2016-7-14 16:07 | 只看该作者
SPI控制器是主设备还是从设备呢?

使用特权

评论回复
5
zhuotuzi| | 2016-7-18 00:17 | 只看该作者
每组SPI控制器都可被设置成主机

使用特权

评论回复
6
huangcunxiake| | 2016-7-19 09:12 | 只看该作者
M05xxDN/DE SPI主机模式和从机模式, SPI 外设时钟频率由时钟源选择、 BCn (SPI_CNTRL2[31]) 和
时钟除频 (SPI_DIVIDER[7:0]) 决定。 CLKSEL1 寄存器的SPIx_S 决定SPI外设的时钟源。

使用特权

评论回复
7
yiyigirl2014|  楼主 | 2016-7-20 14:20 | 只看该作者
SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议

使用特权

评论回复
8
yiyigirl2014|  楼主 | 2016-7-20 14:22 | 只看该作者
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)SDI – 主设备数据输入,从设备数据输出;
(2)SDO – 主设备数据输出,从设备数据输入;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS – 从设备使能信号,由主设备控制。
其中,CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。
接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要8次时钟信号的改变(上沿和下沿为一次),才能完成8位数据的传输。
要注意的是,SCLK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
SPI的片选可以扩充选择16个外设,这时PCS输出=NPCS,说NPCS0~3接4-16译码器,这个译码器是需要外接4-16译码器,译码器的输入为NPCS0~3,输出用于16个外设的选择。

使用特权

评论回复
9
yiyigirl2014|  楼主 | 2016-7-20 14:23 | 只看该作者
协议举例
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。
假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。
那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿
合并图册
合并图册 (2张)
到来的时候,sdi上的电平将锁存到寄存器中去,那么这时寄存器=0101010sdi,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成了一个spi时序。
举例:
  假设主机和从机初始化就绪:并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对spi的8个时钟周期的数据情况演示一遍:假设上升沿发送数据
这样就完成了两个寄存器8位的交换,上面的上表示上升沿、下表示下降沿,sdi、sdo相对于主机而言的。其中ss引脚作为主机的时候,从机可以把它拉低被动选为从机,作为从机的时候,可以作为片选脚用。根据以上分析,一个完整的传送周期是16位,即两个字节,因为,首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个8位时钟周期才把数据读回来。
SPI 总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输出线MOSI,一条数据输入线MISO;用于CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束 中断标志;写冲突保护;总线竞争保护等。

使用特权

评论回复
10
neeringstu| | 2016-7-20 14:39 | 只看该作者
串行接口线少,速度快,用的越来越多

使用特权

评论回复
11
yiyigirl2014|  楼主 | 2016-7-20 15:06 | 只看该作者
neeringstu 发表于 2016-7-20 14:39
串行接口线少,速度快,用的越来越多

是的,我最烦是的是并口设备了,浪费IO。

使用特权

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

本版积分规则

202

主题

3471

帖子

10

粉丝