参考:

作者:李俊轩   来源:本站原创   点击数:x  更新时间:2013年07月18日   【字体:

 

SPI的英文全称是:“Serial Peripheral Interface”,翻译成中文的意思是串口通信外围设备接口技术。也就是把数据用串口传输方式进行交换。它有一个主控制器,一般我们采用微处理器,比如常用的单片机,以及一些其它的外围设置,比如数码管,液晶显示频,SD卡等外围设备。

它一般是由5根线组成的:分别是MOSI,MISO,SCK, SS以及地线,电源线。
MOSI:是由主机向设备发出数据的。
MISO:是由设备向主机发送数据的。
SCK:是起到一个控制数据传输的校准,根据arduino官方的说法,好像还具备有对数据全能的控制作用。
SS线是用于一根使能线,特别是接多个外围设备的时候,可以通过控制SS线,对不同的外围设备进行通信。
写一个程序关于SPI必须注意的问题有:
1.       字节的传输是从最高位(MSB)传输,还是从最低位(LSB)传输呢?这是由SPI.setBitOrder()函数进行设置的。
2.       当数据不传输时,时钟线是高还是低?
3.       触发方式是上升沿触发还是下降沿触发呢?这个由SPI.setDataMode()函数进行设置。
4.       SPI运行的速度是多快呢?这个由SPI.setClockDivider()函数进行设置。
arduino2009板上,10脚是SS11脚是MOSI, 12脚是MISO13脚是时钟引脚。当然在同时用这几根引脚控制多个外围设备的时候,SS引脚可以是其它引脚,比如arduinoEhthernet模块,利用第4个引脚去控制SD卡的SS端。第10引脚控制Enthernet模块的SS端,下面是三种不同的硬件接法示意图:
 
这是auduino只控制一个外围设备的接法。
 
这是数据传输的时序图。
 
这是第三种方法,主机控制多个外围设备的接法。上文提到的控制网络模块与SD卡两个外围设备用的电路http://www.51hei.com/mcu/2014.html 就是这种电路。
 
这是另外一种接法,也是同时控制多个外围设备,但是这种占用到主机的引脚相对于第二种来说会少一点。
下面再补充几个上文没有说到的关于SPI的函数:
SPI.begin()
作用是初始化SPI总线。设备SCK, MOSI,SS为输出。把SCKMOSI拉低,把SS线进行拉高。
SPI.end()
作用是结束SPI传输,或者准确地说是禁止SPI总线工作。
SPI.transfer(val)
作用是传输一个字节,这里要指出来的是val只能是字节。

最新文章

  1. ubuntu 入门
  2. Java重点识记
  3. 6.openssl rsautl和openssl pkeyutl
  4. Python笔记 001
  5. Solr5.3.1通过copyField设置多个field(字段)同时检索
  6. Using Post_Query Trigger in Oracle Forms
  7. python中函数的总结之三
  8. 用Drawing画图如何不会消失
  9. ehcache 分布式集群同步数据实例
  10. The equation - SGU 106(扩展欧几里得)
  11. 关于ClassLoader
  12. Octave Tutorial(《Machine Learning》)之第一课《数据表示和存储》
  13. BZOJ 2595: [Wc2008]游览计划 [DP 状压 斯坦纳树 spfa]【学习笔记】
  14. python yield返回多个值
  15. json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象
  16. 解决bootstrap-table多次请求只触发一次的问题
  17. 【框架】用excel管理测试用例需要的参数数据(二)
  18. why go
  19. 菜鸟合作伙伴日志接入规范之C#实现
  20. (疯狂java)第二课

热门文章

  1. Tornado + vue.js 前后端分离运行脚本
  2. jq cdn地址
  3. idea vue文件设置tab为四个空格
  4. 总结回顾js arr的常见方法以及相关的使用场景(一)
  5. 【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
  6. [Oracle/Sql] Decode与Case
  7. 我的T440p出现怪事情了
  8. javascript事件环微任务和宏任务队列原理
  9. delphi DBgrid应用全书
  10. XXE外部实体注入漏洞