Android Things:外设I/O接口-SPI

本文介绍了Android Things平台中SPI接口的工作原理,包括SPI的全双工数据传输、时钟模式配置以及如何与外部设备进行通信。通过案例演示,展示了如何使用SPI控制Max7219模块进行显示,提供了相关代码示例和资源链接。
摘要由CSDN通过智能技术生成

一、接口简介


串行外围接口(Serial Peripheral Interface)设备通常需要快速的数据传输速率。SPI适合高带宽使用情况,如外部非易失性存储器和图形显示,许多传感器除了I2C也支持SPI。

SPI总线是一种同步的串行接口:这意味着它依赖于共享的时钟信号来同步设备之间的数据传输。控制时钟信号的设备被称为master。其它所有连接的外设被认为是Slaves。每个设备连接到同一组数据信号以形成总线。从理论上讲,SPI数据传输率是仅限于master切换时钟信号的快慢。时钟速度通常在16MHz到25MHz范围。高速共享时钟允许SPI外设更快的传输数据,比UART错误更少。

SPI支持全双工数据传输:意味着master和slave可以同时交换数据。为了支持全双工传输,总线必须提供下列单独的信号,使得SPI最少四线接口:

  • Master出Slave入(MOSI);
  • Mater入Slave出(MISO);
  • 共享时钟信号(CLK);
  • 共同的接地参考(GND);

SPI支持同一总线连接多个从设备:和I2C不同,slave设备使用硬件寻址。每个slave都需要外部芯片选择信号,来让master定位特定的设备作为数据传输的目标。如果仅仅使用一个slave这个信号就不必须。
这里写图片描述

二、接口使用


  1. 打开连接
    创建PeripheralManagerService对象,使用你想打开端口的名称,调用open()方法打开连接。

    public class HomeActivity extends Activity {
         
        // SPI Device Name
        private static final String SPI_DEVICE_NAME = ...;
    
        private SpiDevice mDevice;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Attempt to access the SPI device
            try {
                PeripheralManagerService manager = new PeripheralManagerService();
                mDevice = manager.openSpiDevice(SPI_DEVICE_NAME);
            } catch (IOException e) {
                 Log.w(TAG, "Unable to access SPI device", e);
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
    
            if (mDevice != null) {
                try {
                    mDevice.close();
                    mDevice = null;
                } catch (IOException e) {
                    Log.w(TAG, "Unable to close SPI device", e);
                }
            }
        }
    }
  2. 配置时钟和数据模式
    在一个SPI总线连接建立之后,配置数据传输速率和操作模式来匹配同一条总线上的Slave设备。为了成功的传输数据,在总线的所有设备必须具有相同的时钟和数据格式行为。

    设置SPI模式,定义了时钟信号的极性和相位。你选择的属性基于三个属性:
    这里写图片描述

    • 闲置级别:当没有数据传输的时候,时钟信号的级别(或高或低);
    • 前沿:每个时钟脉冲的前沿;
    • 后沿:每个时钟脉冲前沿相反过渡;

    支持以下模式:

    • MODE0-时钟信号闲置为低,数据传输在前时钟边沿;
    • MODE1-时钟信号闲置为高,数据传输在后时钟边沿;
    • MODE2-时钟信号闲置为低,数据传输在前时钟边沿;
    • MODE3-时钟信号闲置为高,数据传输在后时钟边沿;

    设置如下SpiDevice参数:

    • 频率:以Hz为单位指定共享时钟信号。时钟信号的能力在不同的设备之间有所不同。在设置这个值之前,你应该确认下你设备支持的频率。
    • xxx:指定在总线上传输的每个字节中比特的顺序,这也被称为数据的字节序。默认情况下,数据将会把最高有效位(MSB)首先发送。
    • 每个字的比特:配置一次传输的比特数,…,默认的值是8比特每字。
    pu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值