参考:

作者:李俊轩   来源:本站原创   点击数: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只能是字节。

关于arduino与SPI的更多相关文章

  1. Arduino 与 SPI 结合使用 以及SPI 深层理解

    本文主要讲解两部分内容,不做任何转发,仅个人学习记录: 一. Arduino 与 SPI 结合使用  : 二. SPI 深层理解 有价值的几个好的参考: 1. 中文版: https://blog.cs ...

  2. 总线SPI的Arduino库函数

    来源参考:https://www.cnblogs.com/MyAutomation/p/9348480.html 总线SPI的Arduino库函数 SPI基本知识 SPI:高速同步串行口.是一种标准的 ...

  3. 为什么Arduino独占鳌头并站稳脚跟?

    出处: http://bbs.dfrobot.com.cn/thread-793-1-1.html 为什么Arduino独占鳌头并站稳脚跟? 每个月,我都会在<Make>杂志上发表几篇社论 ...

  4. Arduino SPI + SPI Flash芯片W25Q80BV

    W25Q80BV是台湾华邦电子(Winbond)生产的8M-bit串行flash芯片.主要特性有: 工作电压:2.5 ~ 3.6 V 功耗:读写(active)时4mA,低功耗(power-down) ...

  5. Arduino SPI驱动7引脚0.96寸OLED SSD1306 调试笔记

    https://www.geek-workshop.com/thread-37818-1-1.html 2.下载最新库https://learn.adafruit.com/monoc ... ibra ...

  6. Arduino 串行外设接口(SPI)

    时间有限有其他项目工作在忙,感觉作者写的不错,就先记录下来了. 这几天用SPI--Arduino 在供应商的电子原件上游离游走,重要的是可以读写了, 下面是在查资料看到的一篇不错的文章关于用Ardui ...

  7. 进阶之路(基础篇) - 010 Arduino 函数(基本、串口、SPI)

    一.基本函数 pinMode(引脚号,模式); digitalWrite(引脚号,电平状态);          //默认低电平(或浮空) digitalRead(数字输入端口号); analogRe ...

  8. 一百元的智能家居——Asp.Net Mvc Api+讯飞语音+Android+Arduino

    大半夜的,先说些废话提提神 如今智能家居已经不再停留在概念阶段,高大上的科技公司都已经推出了自己的部分或全套的智能家居解决方案,不过就目前的现状而言,大多还停留在展厅阶段,还没有广泛的推广起来,有人说 ...

  9. 了解 ARDUINO 101* 平台

    原文链接 简介 作为一名物联网 (IoT) 开发人员,您需要根据项目的不同需求,选择最适合的平台来构建应用. 了解不同平台的功能至关重要. 本文第一部分比较了 Arduino 101 平台和 Ardu ...

随机推荐

  1. laravel Application实例化后两个方法

    laravel容器初始化registerBaseServiceProviders方法 上篇讲解了laravel容器的基本使用和原理,这篇继续Application构造方法中的registerBaseS ...

  2. 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 今天给大家介绍一个小软件,挺实用的,叫做拾色器. 用途:取出电脑屏幕的任意颜色,当你 ...

  3. git 合并两个分支的某个文件

    软件开发基本都是多个feature分支并行开发,而在上线前有可能某个分支的开发或测试还没有完成,又或者是产品调整,取消了该分支功能的上线计划,我们在release前不合并该分支即可,然而如果该分支中的 ...

  4. 当前PageOffice需要获取更高版本的授权才能正常运行。(Error:0x0005)

      说明当前程序的是pagoeffice3说明当前程序的是pagoeffice3.0的程序,而序列号用的是2.0的序列号,或者说是当前程序是4.0的程序,而序列号用的是3.0的序列号.即当前用的是高版 ...

  5. Mybatis-多对一和一对多

    多对一和一对多 目录 多对一和一对多 1. 复杂表的构建 2. 测试环境搭建 1. 导入Lombok 2. 新建实体类 3. 建立Mapper接口 4. 建立Mapper.xml文件 5. 在核心配置 ...

  6. 阿里云短信服务验证码封装类 - PHP

    本文记录在ThinkPHP6.0中使用阿里云短信验证码,该封装类不仅仅局限于TP,拿来即用 使用该类之前必须引入 flc/dysms 扩展,该封装类就是基于这个扩展写的 composer requir ...

  7. jzoj 3431. 【GDOI2014模拟】网格

    Description 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m.现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过 ...

  8. Ubuntu中的launcher

    最近在ubuntu系统中下载了最新版的eclipse,在一个临时文件夹中解压了eclipse压缩包,然后打开eclipse,按平时常规做法,我在launcher里右键点击eclipse,选择“锁定到启 ...

  9. docker 搭建私有云仓库

    docker搭建私有仓库   registry私有仓库 下载docker-distribution软件包 yum install epel-release yum install docker-dis ...

  10. matlab数字图像处理-冈萨雷斯-数据类和图像类之间的转换

    亮度图像 二值图像 属于注释 数据类间的转换 图像类和类型间的转化 把一个double类的任意数组转换成[0,1]的归一化double类数组----->mat2gray 图像类和类型间的转化例题 ...