精华内容
下载资源
问答
  • SPI总线

    2019-07-22 22:23:42
    SPI总线

    SPI(Serial Peripheral Interface,串行外设接口)是Motorola公司提出的一种同步串行数据传输标准,在很多器件中被广泛应用。

    1. 接口

    SPI接口经常被称为4线串行总线,以主/从方式工作,数据传输过程由主机初始化。如图1所示,其使用的4条信号线分别为:

    (1) SCLK:串行时钟,用来同步数据传输,由主机输出;
    (2) MOSI:主机输出从机输入数据线;
    (3) MISO:主机输入从机输出数据线;
    (4) SS:片选线,低电平有效,由主机输出控制。

    在SPI总线上,某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机。这就要求从机的MISO口具有三态特性,使得该口线在器件未被选通时表现为高阻抗。
    在这里插入图片描述

    2.寄存器类型

    寄存器 用途
    SPI Control Register 1 (SPICR1) 控制寄存器1
    SPI Control Register 2 (SPICR2) 控制寄存器2
    SPI Baud Rate Register (SPIBR) 波特率寄存器
    SPI Status Register (SPISR) 状态寄存器 (只读 其余均可读可写)
    SPI Data Register (SPIDR) 数据寄存器

    3.SPI传输模式

    通过设置控制寄存器SPICR1中的CPOL和CPHA位,将SPI可以分成四种传输模式。

    3.1 CPOL,即Clock Polarity,决定时钟空闲时的电平为高或低。对于SPI数据传输格式没有显著影响。

    0 = 时钟高电平时有效,空闲时为低
    1 = 时钟低电平时有效,空闲时为高

    3.2 CPHA,即Clock Phase,定义SPI数据传输的两种基本模式。

    0 = 数据采样发生在时钟(SCK)奇数(1,3,5,…,15)边沿(包括上下边沿)
    1 = 数据采样发生在时钟(SCK)偶数(2,4,6,…,16)边沿(包括上下边沿)
    在这里插入图片描述
    主从设备进行SPI通讯时,要确保它们的传输模式设置相同。

    4.SPI读写时序

    4.1 读时序

    在这里插入图片描述

    4.2 写时序

    在这里插入图片描述

    5.SPI优缺点

    优点:

    支持全双工,push-pull的驱动性能相比open-drain信号完整性更好;

    支持高速(100MHz以上);

    协议支持字长不限于8bits,可根据应用特点灵活选择消息字长;

    硬件连接简单;

    缺点:

    相比IIC多两根线;

    没有寻址机制,只能靠片选选择不同设备;

    没有从设备接受ACK,主设备对于发送成功与否不得而知;

    典型应用只支持单主控;

    相比RS232 RS485和CAN总线,SPI传输距离短;

    展开全文
  • SPI总线

    千次阅读 2014-11-11 17:17:42
    SPI总线通信电路设计 数据带宽=(总线频率×数据位宽)÷8 B表示带宽,F表示存储器时钟频率,D表示存储器数据总线位数,则带宽为: B(峰值带宽)=F(时钟频率MHz)×D(总线位数bit)/8 例如,PC-100的SDRAM带宽计算如下:...
    
    

    数据带宽=(总线频率×数据位宽)÷8

    B表示带宽,F表示存储器时钟频率,D表示存储器数据总线位数,则带宽为:
    B(峰值带宽)=F(时钟频率MHz)×D(总线位数bit)/8
    例如,PC-100的SDRAM带宽计算如下:
    100MHz×64bit/8=800MB/S

    由于SPI(serial peripheral interface)总线占用的接口线(4根)少,通信效率高.eg:外接M25P64型号的SPIFLASH时,SPI总线的最大传输速率为75MHz/8=9375KB/S,因为该SPIFLASH的频率:75 MHz.普通IIC总线传输速率为10kbps--400kbps.并且SPI支持大部分处理器芯片,因而是一种理想的选择.

    SPI通信是串行发送或接收数据的,即一位一位的发送和接收(按位传输),且传输一般是高位MSB在前,低位LSB在后.

    SPI模式可以允许同时同步发送和接收8位数据,不同于IIC.IIC只有一条数据线,所以IIC每次只能发送数据或传输数.SPI是利用4根信号线进行通信的串行同步接口协议,包括主/从两种模式.4个接口信号为:串行数据输入(MISO,主设备输入、从设备输出)、串行数据输出(MOSI,主设备输出、从设备输入)、移位时钟(SCK)、低电平有效的从设备使能信号(CS).SPI最大的特点是由主设备时钟信号的出现与否来确定主/从设备间的通信(不想传数据时可采用停止时钟的方式).一旦检测到主设备的时钟信号,数据开始传输.

    SPI在远距离传输中很少用到,主要因为其抗干扰能力差,可靠传输距离只有1—3m.SPI

    采用的是单端非平衡的传输方式,即传输的数据位的电压电平是以公共地作为参考的.在这种传输方式中,对于已进入信号中的干扰是无法消除和减弱的.而信号在传输过程中总会受到干扰,而且距离越长干扰越严重,以致于信号传输产生错误.在这种条件下,信号传输就变得毫无意义了.另外,由于单端非平衡传输方式以公共地作为参考点,地线作为信号回流线,因此也存在信号电流.当传输线两端的系统之间存在交流电位差时,这个电位差将直接窜到信号中,形成噪声干扰.所以,为了解决抗干扰问题,通常采用平衡传输(balanced transmission)方式,这里采用比较常见的RS-422.

    1. SPI器件的主从模式设置

    SPI接口的器件,分为主设备(Master)和从设备(Slave).主设备产生时钟信号,从设备使用主设备的产生的时钟.主设备能主动发起数据传输.单片机的SPI控制寄存器SPCR中的MSTR位就是用来选择单片机在传输中是作为主设备还是从设备的.MSTR设为1时为主设备,设为0的时候为从设备.对单片机来讲管脚SS的电平也会影响SPI的工作模式,在主设备模式下,如果SS是输入且为低电平那么MSTR会被清零,设备进入从模式.MISO信号由从机在主机的控制下产生.

    下图是由一个主机对接一个从机进行全双工通信的系统构成的方式.在该系统中,由于主机和从机的角色是固定不变的,并且只有一个从机,因此,可以将主机的SS端接高电平,将从机的SS端固定接地.

    下图是一个主机和多个从器件的通信系统.各个从器件是单片机的外围扩展芯片,它们的片选端SS分别独占单片机的一条通用I/O引脚,由单片机分时选通它们建立通信.这样省去了单片机在通信线路上发送地址码的麻烦,但是占用了单片机的引脚资源.当外设器件只有一个时,可以不必选通而直接将SS端接地即可.

    采用由三个单片机互相连接构成多主机通信系统连接方法如下:

    2. SPI器件的时钟极性和相位设置

    所有的SPI设备都采用相同的接口方式,可以通过调整处理器内部寄存器改变时钟的极性和相位.由于SPI器件并不一定遵循同一标准,比如EEPROM、DAC、ADC、实时时钟及温度传感器等器件的SPI接口的时序都有所不同,为了能够满足不同的接口需要,采用时钟的极性和相位可配就能够调整SPI的通信时序.

    SPI主机与之通信的从机的时钟极性和相位应该一致.可以先看看另一篇博文,专门讲解了时钟极性和相位:http://www.cnblogs.com/jason-lu/articles/3713319.html

    SPI数据传输的模式根据时钟的极性和相位有四种组合,这就是四种不同的传输模式.分别称为模式0,模式1,模式2,模式3.有的SPI接口的器件只支持几种模式,比如SPI接口的EEPROMAT25128可以工作于模式0和模式3.在实际使用中需要设置为和外围器件兼容的模式.

    设置举例:

    M25P64数据手册上给出的时钟的极性和相位和数据读写的对应的时序

    如上图所示:

    时钟极性和相位都是0时,上升沿为前沿,数据稳定被采样(锁存),下降沿为后沿,被写入SPI总线.

    时钟极性和相位都是1时,上升沿为后沿,数据稳定被采样(锁存),下降沿为前沿,被写入SPI总线.

    和M25P64数据手册上给出的时钟的极性和相位和数据读写的对应的时序匹配的omapl138数据手册上给出的时序

    注:

    • 从机对时序的响应和主机对时序的响应相同但要比主机反应迟钝
    • 图30-9和图30-10的区别:虽都表示时序上是下降沿写上升沿读,但30-10表示片选一拉低数据就被写出,而30-9表示当片选拉低后还要等时钟的下降沿来临数据才被写出.
    • 数据在上升沿被锁存

    所以对应的程序:

    //SPIFMT0寄存器 bit 8-15 是配置时钟频率,bit16是时钟延时,bit17是时钟极性(在高电平触发还是低电平触发)
    SPI1->SPIFMT0 = 0x00020608;//startware配置
    //SPI1->SPIFMT0 = 0x00010208;(ok logicpd配置)

    3. SPI的传输原理

    SPI设备传输数据过程中总是先发送或接收高字节数据,每个时钟周期接收器或收发器左移

    1位数据(SPI总线是按位传输的).对于小于16位的数据在发送之前必须左对齐,如果接收的数据小于16位则采用软件将无效的数据位屏蔽,如图1所示.对应的C代码:

    主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输.主机的移位寄存器通过MOSI信号线将字节传送给从机的移位寄存器,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机的移位寄存器中(如下图所示).这样,两个移位寄存器中的内容就被交换.外设的写操作和读操作是同步完成的.

    如果只进行写操作,主机只需忽略接收到的字节;当然,若主机要读取从机的一个字节,则应该发送一个空字节来引发从机的传输.

    SPI的传输实际上相当于两个八位移位寄存器首位相连.每个时钟周期,数据从一个设备的移位寄存器移出,同时移入了另一个寄存器.八位数据全部移出时,两个寄存器就实现了一次数据交换.因此,SPI的发送和接收是同时进行的,实际都是发送一个字节发起的,只不过需要接收的时候发送的是一个我们不关心的任意字节.

    4. SPI传输示例编程

    当主机发送一个连续的数据流时,有些外设能够进行多字节传输.多数具有SPI接口的存储芯片就以这种方式工作.在这种传输方式下,从机的片选端必须在整个传输过程中保持低电平.此时,一次传输可能会涉及到成千上万字节的信息,而不必在每个字节的数据发送的前后都去检测其起始位和结束位(片选拉低开始,片选拉高结束),这正是同步传输方式优于异步传输方式的原因所在.

    针对外设是M25P64 外设的SPI的传输

    方式:命令字(一个字节)+FLASH的地址(三个字节)+要发送或接收的数据(n个字节)

    复制代码
    /* Send read command to the flash (one byte) */
    tx_data =  0x03; //SPI_FLASH_READ,这是单字节指令代码
    SpiTransfer(&tx_data, &rx_data, 1);
    
    /* Send the address to start reading from (3 bytes) ,共24位*/
    addr[0] = (unsigned char)(flashAddr >> 16);
    addr[1] = (unsigned char)(flashAddr >> 8);
    addr[2] = (unsigned char)flashAddr;
    
    len = 0;
    while (len < sizeof(addr))
    {
        SpiTransfer(&addr[len], &rx_data, 1);
        len++;
    }
    
    /* Read all the bytes */
    len = 0;
    while(len < size)
    {
        SpiTransfer(&tx_data, destAddr, 1);
        destAddr++;//共20个字节,一个字节一个字节放入
        len++;
    }
    复制代码

    命令字:

    复制代码
    // numonyx spi flash commands.
    #define NUMONYX_CMD_WREN            (0x06)
    #define NUMONYX_CMD_WRDI            (0x04)
    #define NUMONYX_CMD_RDID            (0x9F)
    #define NUMONYX_CMD_RDSR            (0x05)
    #define NUMONYX_CMD_WRSR            (0x01)
    #define NUMONYX_CMD_READ            (0x03)
    #define NUMONYX_CMD_FAST_READ       (0x0B)
    #define NUMONYX_CMD_PAGE_PROG       (0x02)
    #define NUMONYX_CMD_SEC_ERASE       (0xD8)
    #define NUMONYX_CMD_BULK_ERASE      (0xC7)
    #define NUMONYX_CMD_RD_ELEC_SIG     (0xAB)
    复制代码

    本文为网友热心整理,本人纯属拿来主义.

    展开全文
  • spi总线

    2015-10-16 09:05:06
    主从机在一个时钟跳变沿的时候采样,下一个跳变沿的时候输出,根据采样时候跳变沿的方向以及采样和输出的先后顺序又可以分出四种工作模式。 详见链接 spi总线介绍

    主从机在一个时钟跳变沿的时候采样,下一个跳变沿的时候输出,根据采样时候跳变沿的方向以及采样和输出的先后顺序又可以分出四种工作模式。
    详见链接
    spi总线介绍

    展开全文
  • SPI 总线

    2012-06-27 10:18:20
    SPI总线  MOTOROLA公司的SPI总线的基本信号线为3根传输线,即SI、SO、SCK。传输的速率由时钟信号SCK决定,SI为数据输入、SO为数据输出。采用SPI总线的系统如图8-27所示,它包含了一个主片和多个从片,主片通过发出...
    SPI总线

      MOTOROLA公司的SPI总线的基本信号线为3根传输线,即SI、SO、SCK。传输的速率由时钟信号SCK决定,SI为数据输入、SO为数据输出。采用SPI总线的系统如图8-27所示,它包含了一个主片和多个从片,主片通过发出片选信号-CS来控制对哪个从片进行通信,当某个从片的-CS信号有效时,能通过SI接收指令、数据,并通过SO发回数据。而未被选中的从片的SO端处于高阻状态。

    图8-27 SPI总线的系统

      主片在访问某一从片时,必须使该从片的片选信号有效;主片在SCK信号的同步下,通过SI线发出指令、地址信息;如需将数据输出,则接着写指令,由SCK同步在SI线上发出数据;如需读回数据,则接着读指令,由主片发出SCK,从片根据SCK的节拍通过SO发回数据。

      因而对具有SPI接口的从片器件来讲,SCK、SI是输入信号,SO是输出信号。SCK用于主片和从片通信的同步。SI用于将信息传输到器件,输入的信息包括指令、地址和数据,指令、地址和数据的变化在SCK的低电平期间进行,并由SCK信号的上升沿锁存。SO 用于将信息从器件传出,传出的信息包括状态和数据,信息在SCK信号的下降沿移出。

      Microchip公司的25XX系列的串行E2PROM采用了SPI总线,该系列器件的性能如表8-2所示。

    表8-2 Microchip公司的25XX系列的串行E2PROM

    型号

    25XX040

    25XX080

    25XX160

    25XX320

    容量

    4K

    512 X 8bit

    8K

    (1024 X 8bit)

    16K

    (4096 X 8bit)

    32K

    (4096 X 8bit)

    地址信号

    A0~A8

    A0~A9

    A0~A10

    A0~A11

      以25XX320为例,该器件是4K字节的E2PROM,结构如图8-28所示,接口信号为SCK、SI和SO,此外还具有-CS、-WP、-HOLD信号线。其中 -CS为器件选中信号,当此信号为低电平时器件被选中,高电平时器件处于等待状态。

    图8-28 25XX320的结构

      与并行接口电路不同的是,在并行接口电路中对器件进行操作的控制信号,在串行接口电路中只能用指令实现,25XX320的操作指令有数据读指令、写操作的允许和禁止指令、写数据指令和状态寄存器的读写指令。在器件的内部有一个8位的指令寄存器,在SCK的上升沿,通过SI信号线,指令输入到上述寄存器并被执行。

    表8-3 25系列串行存储器的指令

    指令名称

    指令格式

    描述

    READ

    00000011

    从选定的地址开始读存储器数据

    WRITE

    00000010

    从选定的地址开始写存储器数据

    WRDI

    00000100

    禁止写操作

    WREN

    00000110

    允许写操作

    RDSR

    00000101

    读状态寄存器

    WRSR

    00000001

    写状态寄存器

      器件的读操作时序如图8-29所示。当-CS信号有效时,在SCK信号的同步下,8位的读指令送入器件,接着送入16位地址(由于25XX320只使用地址信号 A0~A11,地址的高4位无效)。在读指令和地址发出后,SCK继续发出时钟信号,此时存储在该地址的数据由SCK控制从SO引脚移出。在每个数据移出后,内部的地址指针自动加1,如继续对器件发送SCK信号,可读出下一个数据。当地址指针计到0FFFH之后,将回到0000H。读操作的结束由-CS信号变高实现。

    图8-29 25系列串行存储器的读时序

      25XX系列的串行EEPROM的写操作通过写允许及禁止指令控制,写操作必须在器件处于写允许状态时进行。

      写允许及禁止指令均为8位的指令,指令的操作过程为:将-CS信号置为低电平,在SCK信号的作用下,通过SI引脚输入上述指令,在8位的指令送入器件之后,将-CS信号置为高电平,使器件锁存于写允许或写禁止状态。如在输入写允许指令后未将-CS信号置为高电平,则写允许状态未锁存,此时如直接进行写操作,数据将不能写入存储器。在上电、写禁止指令、写状态寄存器指令、写数据指令执行之后,器件的写允许状态将被复位,即处于写禁止状态。

      写操作通常在写允许指令之后进行,其时序如图8-30所示。在写允许状态锁存后,将-CS变高;再将-CS变低,在SCK的同步下输入写操作指令并送入16位地址,紧接着发送需写入的数据,写入的数据一次最多可达32个,但必须保证在同一页内。一页数据的地址从XXXX XXXX XXX0 0000 开始,到XXXX XXXX XXX1 1111结束,当内部的地址指针计数器达到XXXX XXXX XXX1 1111后,继续发送时钟信号将使地址计数器回复到该页的第一个地址,即XXXX XXXX XXX0 0000H。

    图8-30 25系列串行存储器的写时序

      为了使数据有效写入,-CS信号只能在写入数据的最后一个字节的最低位写入后变高。如-CS信号在其他时间变高,将无法保证数据的完整写入。在写操作的过程中,能通过读状态指令将状态寄存器的内容读回,当写操作完成后,写允许锁存状态将被复位。


    展开全文
  • Q:什么是SPI总线? A:SPI全称是串行外设接口(Serial Peripheral Interface),由Motorola提出的一种全双工同步串行通信接口,通信波特率可达5Mbps,SPI接口具有全双工操作,操作简单,数据传输速率较高的优点,...
  • SPI总线协议介绍SPI总线协议介绍SPI总线协议介绍
  • SPI总线

    千次阅读 2009-04-17 09:39:00
    接下来写写通信方面的东西吧。...SPI总线只用3根线,就可以完成数据的输入输出。理论上这种总线的传输速率是没有限制的,只要你的时钟够快,配套硬件够强。3根线分别是SCK,SDI,SDO。SCK是时钟线,
  • SPI总线协议

    2018-02-09 17:58:37
    SPI总线协议 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
  • 内含SPI总线协议,介绍了 SPI总线学习笔记
  • SPI总线协议及SPI时序图详解 SPI总线协议及SPI时序图详解
  • I2C和SPI总线.ppt

    2019-10-04 15:30:34
    IIC和SPI总线介绍 IIC和SPI总线介绍 IIC和SPI总线介绍
  • spi总线协议

    2013-06-28 16:24:12
    spi总线文档,用直白的方式讲解spi总线协议。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,467
精华内容 9,786
关键字:

spi总线