模拟SPI的设计

SPI基本原理与结构

  • 串行外围设备接口(SPI)是由Motorola公司开发的、用来在微控制器和外围设备芯片之间实现数据交换的低成本、易使用接口。与标准的串行接口不同,SPI是一个同步协议接口,全双工通信,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机产生。接收数据的外设使用时钟对串行比特流的接收进行同步化。其传输速度可达几Mb/s。

      SPI主要使用4个信号:MISO(主机输入/从机输出)、MOSI(主机输出/从机输入)、 SCLK(串行时钟)、(外设片选或从机选择)。

      MISO信号由从机在主机的控制下产生。信号用于禁止或使能外设的收发功能。为高电平时,禁止外设接收和发送数据;为低电平时,允许外设接收和发送数据。图1所示是微处理器通过SPI与外设连接的示意图。

      主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。寄存器通过MOSI信号线将字节传送给从机,从机也将自己的移位寄存器中的内容通过MISO信号线返回给主机(如图2所示)。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。

      如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

      当主机发送一个连续的数据流时,有些外设能够进行多字节传输。多数具有SPI接口的存储芯片就以这种方式工作。在这种传输方式下,从机的片选端必须在整个传输过程中保持低电平。此时,一次传输可能会涉及到成千上万字节的信息,而不必在每个字节的数据发送的前后都去检测其起始位和结束位,这正是同步传输方式优于异步传输方式的原因所在。

      虽然SPI有以上优点,然而在图像传输中却很少用到,原因主要是其抗干扰能力差。SPI采用的是单端非平衡的传输方式,即传输的数据位的电压电平是以公共地作为参考的。在这种传输方式中,对于已进入信号中的干扰是无法消除和减弱的。而信号在传输过程中总会受到干扰,而且距离越长干扰越严重,以致于信号传输产生错误。在这种条件下,信号传输就变得毫无意义了。另外,由于单端非平衡传输方式以公共地作为参考点,地线作为信号回流线,因此也存在信号电流。当传输线两端的系统之间存在交流电位差时,这个电位差将直接窜到信号中,形成噪声干扰。所以,为了解决抗干扰问题,通常采用平衡传输(balanced transmission)方式,这里采用比较常见的RS-422。

例程:

/*
=================================================================================
SPI_ExchangeByte( );
Function : Exchange a byte via the SPI bus
INTPUT   : input, The input byte
OUTPUT   : The output byte from SPI bus
=================================================================================
*/
ui08 SPI_ExchangeByte(ui08 input)
{
    unsigned char i;
    ui08 Temp_byte,RxByte;
    Temp_byte = input;
    for(i = 0; i < 8; i++)
    {
        if(Temp_byte&0x80)
             MOSI_Set;//SDI    = 1;
        else
             MOSI_Clr;//SDI    = 0;

        RxByte=RxByte<<1;
        SCK_Clr;// SCK         = 1;
        SCK_Set;//SCK         = 0;
            Temp_byte <<= 0x01;

        if(MISO_STA==1)
        {
            RxByte|=BYTE_BIT0;
        }
        else
        {
            RxByte&=~BYTE_BIT0;
        }                     

     }
    return(RxByte);
}
时间: 2024-08-10 17:05:07

模拟SPI的设计的相关文章

模拟SPI协议时序

SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以下的介绍中,都是默认单片机是主机模式进行说明的. SPI总线相对于IIC总线,无总裁机制,无应答机制. SPI常用的四线制分别是,MISO(主入从出).MOSI(主出从入).SCK(同步时钟线).CS(片选线,也有是NSS). 主从机之间典型的接线方式如下所示: 按照时钟线的时钟极性(CPOL)和相

linux enc28j60网卡驱动移植(硬件spi和模拟spi)

本来想移植DM9000网卡的驱动,无奈硬件出了点问题,通过杜邦线链接开发板和DM9000网卡模块,系统上电,还没加载网卡驱动就直接崩溃了,找不到原因...刚好手上有一个enc28j60的网卡模块,于是就着手移植enc28j60的驱动. 其实移植enc28j60的驱动也十分简单,网上有现成的,只需要分配一些硬件资源即可. 由于我的内核版本老到掉牙,没有自带enc28j60的驱动,只能在网上找一个: enc28j60.c http://git.ti.com/ti-linux-kernel/ti-li

GPIO模拟SPI

上次用gpio模拟i2c理解i2c协议,同样的,我用gpio模拟spi来理解spi协议. 我用的是4线spi,四线分别是片选.时钟.命令/数据.数据. 数据在时钟上升沿传递,数据表示的是数据还是命令由命令/数据线决定. 开始条件: void spi_start(void) { gpio_config(GPIO_CS, GPIO_OUTPUT); udelay(SPI_SPEED_DURATION); gpio_set(GPIO_CS, 0);/* start condition */ udela

Spectrum.Micro-Cap.v11.0.1.3.Full.Update.Only.Win32_64 2CD集成模拟/数字电路的设计编辑

Spectrum.Micro-Cap.v11.0.1.3.Full.Update.Only.Win32_64 2CD集成模拟/数字电路的设计编辑.混合以及绘制草图和环境模拟的模拟软件Spectrum.Micro-Cap v9.0.6.1 1CD(集成模拟/数字电路的设计编辑.混合以及绘制草图和环境模拟的模拟软件) Spectrum.MicroCAP.v9.0.00 1CD PTC Mathcad 15.0 M040 Multilanguage 1DVD工程计算软件PTC.Mathcad.Prim

使用GPIO模拟SPI总线进行通信

下面给出了模拟SPI总线在模式1下进行读写的伪代码,用以说明如何使用GPIO实现SPI通信:     #define SS      252                     //定义SS所对应的GPIO接口编号       #define SCLK    253                     //定义SCLK所对应的GPIO接口编号       #define MOSI    254                     //定义SCLK所对应的GPIO接口编号       

使用软件模拟spi 时序时注意点

软件模拟 spi 时序有以下几个点需要注意: cs 使能后到第一个 sck 边沿需要延时. 最后一个sck 边沿到下一个 cs 需要延时. sck 的高电平和低电平本身需要维持时间. mosi 需要先把数据放上去,然后启动上升沿,然后延时 sck 高电平的时间. 在延时了 sck 高电平的时间后,读取 miso 的电平,然后启动下降沿,然后延时 sck 低电平的时间. 原文地址:https://www.cnblogs.com/ramlife/p/11743022.html

《模拟系统设计方法设计计算机控制系统》总结

一.一般的设计步骤 (1)在连续系统控制器与被控对象之间插入保持器,比如零阶保持器ZOH,检查插入后的连续系统是否稳定,如不稳定,则重新设计控制器D(s) (2)选择合适的方法将D(s)离散化为D(z) (3)对G(s) = ZOH*H(s)离散化,D(s)和G(z)共同构成离散系统.此时检查离散系统的特性是否满足要求,如不满足就重新设计D(s) (4)用数字算法(编程)实现控制器D(z),即用差分方程表示D(z) 二.如何离散化D(s)为D(z) (1)数值积分法 - 基本思想 - A.前向矩

Linux SPI驱动设计

1. SPI总线结构 SPI串行外设接口,是一种高速的,全双工,同步的通信总线.采用主从模式架构,支持多个slave,一般仅支持单Master SPI接口共有4根信号线,分别是: 设备选择线(SS).时钟线(SCK).串行输出数据线(MOSI).串行输入数据线(MISO). 2. 数据传输过程 主节点通过MOSI线输出数据,从节点在SIMO处从主节点读取数据.同时,也通过SMOI输出MSB(最高位), 主节点会在MISO处读取从节点的数据,整个过程将一直持续,直至交换完所有的数据. 3. 总线时

IO SPI FLASH W25Q64B IO模拟SPI时序,使用FLASH 外设!W25Q64B

#include "iospiflash.h" /*******************************************//// This is a IOSPI (simulater by IO)// // Lib For Driver Flash W25Q64BV//*******************************************///sbit IOFLASHSPI_CS = P1^0;//sbit IOFLASHSPI_DIN = P1^3;/