zoukankan      html  css  js  c++  java
  • 关于arduino与SPI

    参考:

    作者:李俊轩   来源:本站原创   点击数: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只能是字节。
  • 相关阅读:
    [转] Linux 最大进程数, unable to create new native thread问题
    [转] Maven 从命令行获取项目的版本号
    [转]【JVM】调优笔记2-----JVM在JDK1.8以后的新特性以及VisualVM的安装使用
    DISCUZ 自定义模板
    Linux系统性能统计工具Sar和实时系统性能监控脚本
    shell脚本常规技巧
    Java中文编码小结
    json-smart 使用示例(推荐fastjson)
    HBase Java简单示例
    Ehcache BigMemory: 摆脱GC困扰
  • 原文地址:https://www.cnblogs.com/MCSFX/p/11139601.html
Copyright © 2011-2022 走看看