一、SPI总线基本概念
SPI ( Serial Peripheral Interface ———串行外设接口) 总线是Motorola 公司推出的一种同步串行接口技术。SPI 总线系统是一种同步串行外设接口, 允许MCU 与各种外围设备( 如闪存、数摸转换、网络控制器、从MCU) 以串行方式进行通信、数据交换。
SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。其工作模式有两种:主模式和从模式。SPI 是一种允许一个主设备启动一个从设备的同步通讯的协议,从而完成数据的交换。
也就是SPI 是一种规定好的通讯方式。这种通信方式的优点是占用端口较少,一般4 根就够基本通讯了(不算电源线)。同时传输速度也很高。一般来说要求主设备要有SPI 控制器(也可用模拟方式),就可以与基于SPI 的芯片通讯了。
二、SPI总线系统结构
SPI 系统可直接与各个厂家生产的多种标准外围器件直接接口, 一般使用4 条线: 串行时钟线(SCK) 、主机输入/ 从机输出数据线SDO、主机输出/ 从机输入数据线SDI 和低电平有效的从机选择线SS。SDI 和SDO 用于串行接收和发送数据,数据高位在前低位在后。在SPI 设置为主机方式时,SDO 是主机读从机,SDI 是主机写从机。SCK 用于提供时钟脉冲将数据一位位地传送。SPI 总线器件间传送数据框图如图1 所示。
三、SPI总线的接口特性
利用SPI 总线可在软件的控制下构成各种系统。如1 个主MCU 和几个从MCU、几个从MCU 相互连接构成多主机系统(分布式系统)、1 个主MCU 和1 个或几个从I / O 设备所构成的各种系统等。在大多数应用场合,可使用1个MCU 作为主控机来控制数据,并向1 个或几个从外围器件传送该数据。从器件只有在主机发命令时才能接收或发送数据。其数据的传输格式总是高位(MSB)在前,低位(LSB)在后。
当一个主控机通过SPI 与几种不同的串行I / O 芯片相连时,必须使用每片的允许控制端,这可通过MCU 的I / O 端口输出线来实现。
但应特别注意这些串行I / O 芯片的输入输出特性:首先是输入芯片的串行数据输出是否有三态控制端。平时未选中芯片时,输出端应处于高阻态。若没有三态控制端,则应外加三态门。否则MCU 的MISO端只能连接一个外设。其次是外设的串行数据输入是否有允许控制端。
因为只有在此芯片允许时,SCK 脉冲才把串行数据移入该外设;在禁止时,SCK 对外设无影响。若原来没有允许控制端,则增加控制门;当然,也可以在SPI 总线上只连接1 个外设,就不必用允许控制。
通过前文的原理介绍,我们已经对SPI 总线的特性以及工作原理有了大致地了解,但当我们拿到一个SPI 总线器件时要正确地应用它,还是一时不知如何下手,比如我们现在要想把一个具体的数据存储放器件中去,需要怎么办呢?现在,我们来一起看一个数据存储的例子,通过一个实例,相信会给大家带来一个感性的认识,下面就以目前单片机系统中广泛应用的SPI 接口的数据存储器93C46 为例,介绍SPI器件的基本应用。
四、93C46串行存储器简介
93C46 是1k 位串行EEPROM 储存器。
每一个储存器都可以通过DI/DO 引脚写入或读出。它的存储容量为1024 位,内部为128×8位或64×16 位。93C46 为串行三线SPI 操作芯片,在时钟时序的同步下接收数据口的指令。
指令码为9 位十进制码,具有7 个指令,读、擦写使能、擦除、写、全擦、全写及擦除禁止。该芯片擦写时间快,有擦写使能保护,可靠性高,擦写次数可达100 万次, 93C46 的引脚功能图如图2 所示。
图2 93C46 的引脚图
表1 :93C46 串行EEPROM 指令格式选择表