博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPI—读写串行 FLASH
阅读量:6068 次
发布时间:2019-06-20

本文共 1363 字,大约阅读时间需要 4 分钟。

SPI协议简介

SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface),即串行外围设
备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADCLCD 等设备与 MCU 间,
要求通讯速率较高的场合。

 

 

标号1处, NSS信号线由高变低,是SPI通讯的起始信号。 NSS是每个从机各

自独占的信号线,当从机检在自己的NSS线检测到起始信号后,就知道自己
被主机选中了,开始准备与主机通讯。
在图中的标号6处, NSS信号由低变高,是SPI通讯的停止信号,表示本次通
讯结束,从机的选中状态被取消。

 为什么MOSI,MISO信号线是两根交叉呢?因为这样可以在采样时传递0或者1两种选择,而选择切换时就在触发情况下进行切换(交叉处),所以spi的通讯,到底属于4种模式中的哪种模式很重要。

• CS(NSS)信号线在空闲状态为低电平时, CPOL=0;空闲状态为高电平时, CPOL=1

• CPHA=0MOSIMISO数据线的有效信号在SCK的奇数边沿保持不变,数据信号将在SCK奇数边沿时被采样,在非采样时刻, MOSIMISO的有效信号才发生切换。

• CS(NSS)信号线在空闲状态为低电平时, CPOL=0;空闲状态为高电平时, CPOL=1

• CPHA=1MOSIMISO数据线的有效信号在SCK的偶数边沿保持不变,数据信号将在SCK偶数边沿时被采样,在非采样时刻, MOSIMISO的有效信号才发生切换。 

 

 

 

 

 

 

 

 

 

 

编程要点:

 

上面的MISO,按照正常情况来说,这个引脚应该配置为输入模式,但是在SPI引脚复用的时候,配置成输出模式,也可以接收数据。

 

在复用模式的时候,配置成推挽或者开漏输出,也可以对输入数据寄存器访问,这样的复用情况下,可以输出也可以输入。但是要是你想配置成输入模式也具有输出功能,那就不切实际了,没有配置输出,肯定没有输出,没有配置输入,可我外部有输入时,在复用情况下,是可以接收输入的。

还要注意与MCU通信的SPI芯片手册对于SPI模式的描述,有的直接给出了模式,有的支持好几种,有的压根就不说,要你自己去看手册的时序图并自己判断。

比如:W25Q128 和ADS1256,都是SPI通信的,但是W25Q128的芯片手册比较人性化:

直接给出了支持模式0和模式3,而且我们知道,通信速率取决于速度更慢的一方,W25Q128也给出了:

但是,TI的ADS1256可没有那么人性化:

英文文档没有介绍关于4种模式的,只有通过时序,我们可以的知道是模式一。同样,速率也不是以时钟多少兆体现的,而是

SPS:每秒采样次数,sample per second。

经过这次项目对ADS1256的调试,对spi认识更加清楚了。

 接收和发送函数在同一个函数中:

SPI是全双工的,所以可以在发送的时候接收,也可以在接收的时候发送。但是,我们的通信都是先写发送,再写接收,我在想可不可以先写接收,再写发送呢?这样去想为什么是很好的学习方式,但是经过思考之后,应该是不可行的,必须先写发送再写接收,因为你要通过SPI通信,作为SPI通信发起者,应该先发送,再接收。经测试,也确实如此。(这里是我的推论,如果没有更改,证明测试之后如我预期)。

 

转载地址:http://hufgx.baihongyu.com/

你可能感兴趣的文章
iphone-common-codes-ccteam源代码 CCLanguage.h
查看>>
基于WDF的PCI/PCIe接口卡Windows驱动程序(5)-如何为硬件移植驱动程序
查看>>
团队工作第四次推进之——软件设计规格说明书
查看>>
RepositoryBase文件解析
查看>>
cocos2d-x代码阅读笔记 - 入口
查看>>
BPEL_Oracle BPEL新一代工作流介绍(概念)
查看>>
ADF_ADF Faces系列1_使用JSF开发基于Ajax的用户界面:ADF Faces 富客户端组件简介(Part1)...
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
ios9 -3dtouch 手势添加到app上
查看>>
浅谈树分治
查看>>
GPU通用计算调研报告
查看>>
Silex - 基于Symfony2组件的微型框架
查看>>
通过SQL语句查看数据库表的列数
查看>>
MongoDB 基础
查看>>
H5 浏览器开发文档
查看>>
jQuery中Ajax事件beforesend及各参数含义
查看>>
ubuntu 18.04 install gitlab-ce
查看>>
OkHttp使用教程
查看>>
Git Tutorial 5 - Branch and Merge - Local
查看>>