SPI是由Motorola公司提出的一种同步串行外围接口;它在速度要求不高,低功耗,需要保存少量参数的智能化传感系统中得到了广泛应用;

  SPI是一个全双工的同步串行接口,在数据传输过程中,总线上只能是一个主机和一个从机进行通信;

  通信四种模式:

    1、MISO(Master In Slave Out)

       主机输入,从机输出;

    2、MOSI(Master  Out  Slave In)

        主机输出,从机输入;

    3、SCK(Serial  Clock)

        串行时钟信号

    4、SS(Slave  Select)

        从机选择信号,低电平有效;(即作从机时,该位置低)

SPI总线可在软件的控制下构成各种系统

        

                      SPI总线与多从机连接

SPI的基本结构相当于两个8位移位寄存器的首尾相接,构成16位的环形移位寄存器,从而实现了主机与从机的数据交换;

          

                      SPI接口的基本结构图

SPI主从模式

  设置MSTR(主设备选择)和SPE位(使能位)来选择是否工作在主模式还是从模式;

stm32强大之处:因为从机NSS位必须接0,而主机NSS位接1;stm32可以有软件来设置相应的主从位;

SPI下时钟信号的相位和极性(设置由与之通信的具体芯片来设定)

  SPI接口可由CPOL和CPHA设定4种不同传输格式的时序;

  CPOL决定时钟脉冲SCK的有效脉冲方式(正脉冲、负脉冲)。CPHA决定数据线MOSI什么时候输出数据或采集数据;

  根据CPOL和CPHA的组合数目,一共四种设置情况;

数据图分析:

        

数据帧的格式

  根据SPI_CR1寄存器中的LSBFIRST位,输出数据位时可以MSB(高位先传)在先也可以是LSB(低位先传),根据SPI_CR1寄存器的DFF位,每个数据帧可以是8位或者16位,所选择的数据帧格式对发送/接收都有效;

SPI通信配置步骤:(在主模式下,串行时钟在SCK脚产生)

  1、通过SPI_CR1寄存器的BR[2:0]位定义串行时钟波特率;

  2、选择CPOL和CPHA位,定义数据传输和串行时钟间的相位关系;

  3、设置DFF位来定义8/16位数据帧格式;

  4、配置SPI_CR1寄存器的LSBFIRST位定义帧格式;

  5、如果NSS引脚需要工作在输入模式,硬件模式中在整个数据帧传输期间应把NSS脚连接到高电平;在软件模式中,需要设置SPI_CR1寄存器的SSM和SSI位,如果NSS引脚工作在输出模式,则只需设置SSOE位;

  6、必须设置MSTR和SPE位(只当NSS被连到高电平,这些位才能保存置位)。

    在这个配置中,MOSI脚是数据输出,而MISO脚是数据输入;

SPI通信过程:

  

  

SPI通信的更多相关文章

  1. 理解一下单片机的I2C和SPI通信

    应某位网友要求,今天说一下单片机的I2C SPI通信,可能说不清楚,因为这毕竟要做实验才可完全理解. I2C和SPI是两种不同的通信协议. 听到协议,似乎高不可攀,其实协议就是人们定义的一个标准而已, ...

  2. SPI通信实验---verilog(FPGA作为从机,使用可读可写)

    本实验讲究实用性,故设计思想为:主机先向从机发送地址,若是向从机写入数据,则向从机发送数据,若是读取从机数据,则向从机发送时钟,然后在时钟下降沿读取数据即可.cs信号上升沿作为SPI通信的结束信号.r ...

  3. 关于SPI通信原理与程序实现

    第一次接触SPI是因为当时用到NRF24L01,需要用SPI进行通信.因为2401上面写着MOSI.MISO.SS.RST,当时以为只要用到SPI就肯定有这几个引脚,以至于限制了自己的思维.只认识MI ...

  4. [转]SPI通信原理简介

    [转自]http://www.cnblogs.com/deng-tao/p/6004280.html 1.前言 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 ...

  5. linux 下SPI通信注意事项(待续)

    一.2台Linux设备之间使用SPI通信 1.标准Linux只支持Master 模式.但是可以在驱动中修改为Slave模式: 2.硬件SPI可能支持Slave模式,也可能不支持.这个要提前确认好: 3 ...

  6. ESP8266开发之旅 基础篇⑤ ESP8266 SPI通信和I2C通信

        设备与设备之间的通信往往都伴随着总线的使用,而用得比较多的就当属于SPI总线和I2C总线,而恰巧NodeMcu也支持这两种总线通信,所以本章的主要内容就是讲解ESP8266 SPI和I2C总线 ...

  7. ESP8266 SPI通信

    设备与设备之间的通信往往都伴随着总线的使用,而用得比较多的就当属于SPI总线和I2C总线,而恰巧NodeMcu也支持这两种总线通信 1. SPI总线——SPI类库的使用 SPI是串行外设接口(Seri ...

  8. 工作笔记——CPLD与MCU通过SPI通信

    一.需求描述 MCU需要接收来自CPLD的升级固件数据 CPLD对MCU只进行发送数据,不接收MCU的数据 CPLD无法告知数据传输的开始和结束,需要MCU自行判断(CPLD只是数据透传,不做数据判断 ...

  9. OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇

    少废话,先上效果图 屏幕显示效果         全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...

随机推荐

  1. 数组有没有 length()这个方法? String 有没有 length()这 个方法?

    1.数组中有length属性. 2.String有lenth()方法.

  2. 使用wininet向FTP服务器发送文件

    .h #pragma once #include <windows.h> #include <tchar.h> #include <string> #include ...

  3. 空类的默认函数—— SAP电面(2)/FEI

    定义一个空类 class Empty { }; 默认会生成以下几个函数 2. 拷贝构造函数 Empty(const Empty& copy) { } 3. 赋值运算符 Empty& o ...

  4. HTML5 实现图像模糊算法

    做个广告,WEB/PHP/JQ/HTML5/MYSQL/QQ群6848027 项目中需要用到HTML5模糊图像,以前用GDI,GDI+中都有现成的组件来实现,HTML5中如何实现? createIma ...

  5. hdu 4619 Warm up 2 二分图匹配

    题目链接 给两种长方形, 水平的和垂直的, 大小都为1*2, n个水平的, m个垂直的, 给出它们的坐标. 水平的和垂直的可以相互覆盖, 但是同种类型的没有覆盖. 去掉一些长方形, 使得剩下的全部都没 ...

  6. Latex调整行距

    修改行间距的方法: \usepackage{setspace}%使用间距宏包 \begin{document} \begin{spacing}{2.0}%%行间距变为double-space 双倍行距 ...

  7. java断言

    public class New{ public static void main(String[] args){ assert false; System.out.println("pas ...

  8. SubLime2 win + mac keygen

    参考 http://www.cnblogs.com/snandy/archive/2013/05/08/3068059.html http://www.freebuf.com/tools/6434.h ...

  9. How many prime numbers(求素数个数)

    How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  10. MongoDB初探系列之二:认识MongoDB提供的一些经常使用工具

    在初探一中,我们已经能够顺利的将MongoDB在我们自己的机器上跑起来了. 可是在其bin文件夹以下另一些我们不熟知的工具.接下来,将介绍一下各个小工具的用途以及初探一中MongoDB在data文件夹 ...