SPI

SPI简介

SPI(Serial Peripheral interface)串行外围设备接口,Motorola首先提出.SPI主要应用在EEPROM , FLASH , 实时时钟 , AD转换器 , 还有数字信号处理器和数字解码器之间.SPI是一种高速的,全双工,同步的通信总线
SPI_第1张图片
主从机各有一个移位寄存器,也就是主机移出一位,从机接收一位,并移出一位,然后主机接收一位,明白这个在写模拟SPI的时候才不会出错
SPI接口一般有使用四条线通讯:
MISO:主设备数据输入,从设备数据输出(Master input Slave out)
MOSI:主设备数据输出,从设备数据输出(Master outSlave input)
SCLK :时钟信号,由主设备产生
CS:从设备片选信号

SPI时序

同步时钟

SPI_第2张图片

时钟极性(CPOL)Clock Polarity

CPOL = 0:同步时钟空闲状态低电平
CPOL = 1 :同步时钟空闲状态高电平

时钟相位(CPHA)-Clock Phase

CPHA = 0:在同步时钟的第一个跳变沿数据被采样
CPHA = 0:在同步时钟的第二个跳变沿数据被采样

模拟SPI-LDC1000

1.阅读芯片手册确定何时写入何时读出数据

所以可以得到下降沿输出数据,上升沿输入数据
SPI_第3张图片
这里写图片描述

2.初始化SPI的四个引脚

MISO:上拉输入
MOSI:推免输出
SCLK:推免输出
CSB:推免输出

3.写最核心的SPI读写函数-(先忽略CSB线)

void ldc1000_WR(u8 reg)
{
    int i = 0;
    SCLK = 0;//空闲时为低电平
    for(i = 0 ; i <8 ; i++)
    {
        if(reg&0x80)MOSI = 1;
        else MOSI = 0;//先把数据放到数据线上,等待上升沿(必须这样)
        SCLK = 1;//上升沿到来,数据写入
        reg = reg<<1;
        if(MISO)reg |= 1;//else可以省略因为移位后已经是0
        SCLK = 0;//下降沿
    }
}

你可能感兴趣的:(单片机技术,SPI,通信,应用)