1、这是个什么玩意

接上篇接着介绍,协议主要就是保证双方能够正常的通信并理解对方的“话”。而本篇介绍的这个SPI协议是为了保证SPI接口的两头双方能够正常通信。具体的说,就是针对那几根物理线如何操作,物理线无非就是涉及高低电平,两条(及两条以上的)线之间需要配合的时序,具体看下面。

2、有毛用啊

不多说了,如上。

3、怎么用啊

SPI有四种工作模式,取决于两个参数:(这两个参数其实就是控制了CLK这一根线,SPI通信不像UART或IIC那样有专门的通信周期,有专门的通信起始信号和结束信号。所以SPI协议能够通过控制时钟信号线在没有数据交流的时候保持的状态,要么是高电平,要么是低电平)

1、 CPOL,clock polarity,译作时钟极性。
2、 CPHA,clock phase,译作时钟相位。
CPOL具体说明:
CPOL用于定义时钟信号在空闲状态下处于高电平还是低电平,为1代表高电平,0为低电平。
CPHA具体说明:
首先,在同步接口中,肯定存在一个接口时钟,用来同步采样接口上数据的。
CPHA就是用来定义数据采样在第几个边沿的,数据的采样时刻。为1代表第二个边沿采样,为0代表第一个边沿采样。
以上两个参数,总共有四种组合:
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。
CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。
CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。
CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

该图参考http://blog.csdn.net/guomutian911/article/details/72813067,在此感谢。

之前说过,由于SPI没有一个统一的规范,所以在时序上描述存在一定的差异,具体以datasheet为准。

还有就是这四种模式的优缺点目前我还未知,请大牛详解。

STM32系列芯片的很多SPI接口都是和GPIO共用,SPI的初始化分为2大块,就是SPI所使用的I/O口的初始化和SPI功能的初始化。对于SPI同步串口要用到的引脚,根据数据的方向,要设置GPIO_Mode_IN_FLOATING或者GPIO_Mode_AF_PP复用推免输出。其他的和GPIO引脚设置一样。

1.管脚因为复用的,故先配置好管脚、并打开spi时钟。下图参考于https://zhuanlan.zhihu.com/p/27489167,在此感谢,该篇写的也非常好,可以继续学习下。

2.设置spi的工作模式通过 SPI1_CR1 来设置,设置SPI1主机模式,设置数据格式8位,然后通过 CPOL 和 CPHA 位来设置 SCK时钟极性及采样方式。并设置 SPI1 的时钟频率(最大18Mhz),以及数据的格式(MSB 在前还是 LSB在前)。

3.使能SPI.

具体SPI主要配置项如下:

SPI_Direction:SPI通讯方向,可配置双线全双工、双线只接收、单线只接收、单线只发送模式;
SPI_Mode:SPI的工作模式,即工作在主机模式或从机模式。若工作在从机模式,则SCK信号由外部提供;
SPI_DataSize:通讯的数据帧大小,可选8位或16位;
SPI_CPOL:时钟极性,配置空闲状态时的SCK电平;
SPI_CPHA:时钟相位,配置数据采样时刻,可配置在每个时钟周期的第1个或第2个边沿进行采样;
SPI_NSS:配置NSS引脚的使用模式,可配置为硬件模式或软件模式。软件模式即是普通的GPIO口,人工拉高或置低其电平;
SPI_BaudRatePrescaler:波特率分频因子,分频后的时钟即为SPI的SCK信号线的时钟频率;
SPI_FirstBit:串行通讯中总会牵扯到MSB(高位)先行还是LSB(低位)先行的问题,可以用这个结构体成员进行配置;
SPI_CRCPolynomial:CRC校验,若使用CRC,则可计算CRC的值。

四,成为大神的用法

多调试,多解决问题,推荐博客http://blog.csdn.net/guomutian911/article/details/72813067,该博客记录了一些SPI的问题,在此推荐给大家。通常比较常见的问题是CLK的频率太快,导致接收数据不对或不完整。主器件时钟CLK主、从器件时钟CLK从和同步串行时钟SCK,其中SCK是对CLK主的分频,CLK从和CLK主是异步的。要使SCK无差错无遗漏地被从器件所检测到,从器件的时钟CLK从必须要足够快。




【原创】【SPI】SPI通信协议介绍相关推荐

  1. 计算机串口接spi,SPI串口模块-SPI接口详细介绍

    SPI串口模块-SPI接口详细介绍 1. SPI串口模块-概述 SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线.常规只占用四 ...

  2. UART SPI I2C 接口介绍 转载

    UART SPI I2C 接口介绍@TOC 做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细的解释. UART UART是一种通用串行 ...

  3. [原创]Paros工具培训介绍

    [原创]Paros工具培训介绍 Paros Proxy工具介绍 Paros proxy是一个对Web应用程序的漏洞进行评估的代理程序,它支持动态地查看/编辑 HTTP/HTTPS信息,可以改变cook ...

  4. [原创]RedisDesktopManager工具使用介绍

    [原创]RedisDesktopManager工具使用介绍 1 RedisDesktopManager简介 一款能够跨平台使用的开源性redis可视化工具.redis desktop manager主 ...

  5. 一篇简明的wifi通信协议介绍

    原文:http://www.openwrt.pro/post-500.html 这一篇简明的wifi通信协议介绍,原作者写的非常棒,转载保存 这里对wifi的802.11协议中比较常见的知识做一个基本 ...

  6. SPI接口通信协议详解:SPI时序、2线、3线、4线SPI及4种常用工作模式

    简介 SPI通信原理比I2C要简单,它主要是主从方式通信.这种模式通常只有一个主机和一个或者多个从机,标准的SPI是4根线,分别是SSEL(片选,也写作 SCS).SCLK(时钟,也写作SCK).MO ...

  7. 简述SPI总线通信协议笔记

    一.SPI总线简介 SPI总线是串行.高速.全双工.同步通信总线.采用主从方式工作,一般有一个住设备和一个或多个从设备.SPI需要至少4根线,分别是MISO(主设备输入从设备输出).MOSI(主设备输 ...

  8. RK3399平台开发系列讲解(SPI子系统)4.32、SPI通信过程介绍

    平台 内核版本 安卓版本 RK3399 Linux4.4 Android7.1

  9. 常见单片机通信协议介绍【CAN、LIN】【7000字】【详解】【原创】

    文章目录 前言 一.先百度百科几个专业名词看看 1.单片机 2.通信 3.❤不能纸上谈兵,也不能眼高手低 二.32单片机代码 1.浅浅分析下32内核架构 2.浅浅分析下串/并行通信.同/异步通信 3. ...

最新文章

  1. 无需成对示例、无监督训练,CycleGAN生成图像简直不要太简单
  2. 习题5-5 使用函数统计指定数字的个数 (15 分)
  3. 微信硬件平台智能路由行业解决方案
  4. python输入输出-6、Python 输入输出
  5. Flex前端与Java服务端交互,反射机制挑大旗
  6. 改变listview的每个item的背景色
  7. GoogLeNet代码解读
  8. Day3-----delayPrompt
  9. python之简单爬虫(爬取豆瓣出版社)
  10. ant 执行多个构建文件
  11. airtest web 录制滑块_Airtest之web自动化(一)
  12. C#中如何截取Windows消息来触发自定义事件
  13. 关闭tomcat报错Cannot allocate memory
  14. 【Python】Pandas DataFrame 一维表二维表的转换
  15. 9.12测试(二)——国际象棋
  16. song -接小球游戏1
  17. 【时间序列】IJCAI 2021丨时间序列相关研究论文汇总
  18. 基于Tofino2的64X100GE高性能可编程交换机MX7636-64X
  19. AU降噪 李兴兴
  20. Caché SQL 高性能优化

热门文章

  1. 如何批量输出条形码图片
  2. 中文字符编码之GBK,UTF-16和UTF-8
  3. 5G图传 5G单兵 5G视频终端 无人机4G图传
  4. Java 实现数据脱敏的技术方案
  5. 一个可以免费下载O Reilly的书籍的地方
  6. Java同步技术(十)
  7. tomcat命令行重启
  8. Intel SGX开发者参考书(四)—— Enclave开发基础(三)
  9. Java编程那些事儿70——抽象类和接口(三)
  10. Android 手机抓包