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

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

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

• CS(NSS)信号线在空闲状态为低电平时, CPOL=0;空闲状态为高电平时, CPOL=1。
• CPHA=0, MOSI和MISO数据线的有效信号在SCK的奇数边沿保持不变,数据信号将在SCK奇数边沿时被采样,在非采样时刻, MOSI和MISO的有效信号才发生切换。

• CS(NSS)信号线在空闲状态为低电平时, CPOL=0;空闲状态为高电平时, CPOL=1。
• CPHA=1, MOSI和MISO数据线的有效信号在SCK的偶数边沿保持不变,数据信号将在SCK偶数边沿时被采样,在非采样时刻, MOSI和MISO的有效信号才发生切换。

编程要点:

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 你需要知道的包管理器(Package Manager)
  2. transactionManager的type与dataSource的type
  3. anguar.js tutorial demo
  4. Routine
  5. BZOJ 1511: [POI2006]OKR-Periods of Words
  6. Redis集群的配置
  7. ubuntu tty 永久修改中文环境为英文
  8. HDOJ(HDU) 2212 DFS(阶乘相关、)
  9. 。◕‿◕。TMD
  10. org/w3c/dom/ElementTraversal 错误解决办法
  11. VS 2015 GIT操作使用说明
  12. MySQL中使用union all获得并集的排序
  13. P1379 八数码naive题,STL的胜利
  14. ASP.NET MVC3-第02节-添加一个Controller (C#)
  15. 在vue-cli搭建的项目中在后台mock接口中支持req.body和req.cookies
  16. 使用CoreAnimation 实现相机拍摄照片之后动画效果
  17. HTML5和CSS基础
  18. HDU 1503 Advanced Fruits(LCS+记录路径)
  19. 简单的 Android 菜单
  20. beego小技巧两则:通过命令行自定义端口和环境,url中带有中划线处理

热门文章

  1. Node & Cheerio & WebStorm 学习实验
  2. ORA-01219:数据库未打开:仅允许在固定表/视图中查询
  3. 更改"xxxx" 的权限: 不允许的操作
  4. Java笔记14:泛型初探
  5. 【android开发】10款实用的Android UI工具,非常有用!
  6. 心路历程——毕设程序mr跑不通的问题
  7. 不要在基类析构函数中调用纯虚函数,否则运行时会报错“pure virtual method called”
  8. jstl表达式引用文件
  9. Java读写二进制文件示例
  10. HTML+JavaScript实现链式运动特效