首页 > 办事核心 > 澳门新濠天地讲堂 >

51单片机分析进修系统之 SPI总线道理与使用篇

2017-09-30 09:17
分享到:
    大师好,经由以前的进修,咱们曾经对51单片机分析进修系统的使用方式及进修编制有所领会与熟悉,学会了使用IIC总线的根底学问,体味到了分析进修系统的易用性与易学性,这一期咱们将一路进修SPI总线的基来历根底理与使用实例。

    先看一下咱们将要使用的51单片机分析进修系统能完成哪些测验考试与产物斥地工作:别离有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器吹打,继电器节制,IIC总线,SPI总线,PS/2测验考试,AD模数转换,光耦测验考试,串口通信,红外线遥控,无线遥控,温度传感,步进电机节制等等。主体系统如图1所示,其配套书本教程《单片机快速入门》如图2所示。

pcb图1 51单片机分析进修系统主机部门图片

 

book

 

图2 51单片机分析进修系统配套书本教程——《单片机快速入门》

    上图是咱们将要使用的51单片机分析进修系统硬件平台,如图1所示,本期测验考试咱们用到了分析系统主机、板载的AT93C46芯片,分析系统其它功能模块道理与使用详见前几期《电子制造》杂志及后期连载教程引见。

SPI总线简介

SPI总线根底概念

    SPI ( Serial Peripheral Interface ———串行外设接口) 总线是Motorola公司推出的一种同步串行接口技术。SPI总线系统是一种同步串行外设接口,答应MCU 与各类外围设备以串行编制进行通信、数据互换。外围设备包罗FLASHRAM、A/ D 转换器、收集节制器、MCU 等。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节流空间,供给便当,恰是出于这类简单易用的特征,此刻越来越多的芯片集成为这类通信和谈。其工作模式有两种:主模式和从模式。SPI是一种答应一个主设备启动一个从设备的同步通信的和谈,从而完成数据的互换。也便是SPI是一种规定好的通信编制。这类通信编制的长处是占用端口较少,一般4根就够根底通信了(不算电源线)。同时传输速度也很高。一般来说要求主设备要有SPI节制器(也可用模仿编制),就能够与基于SPI的芯片通信了。

SPI总线系统布局

    SPI 系统可间接与各个厂家生产的多种尺度外围器件间接接口,一般使用4 条线:串行时钟线(SCK) 、主机输入/ 从机输出数据线MISO(DO)、主机输出/ 从机输入数据线MOSI(DI) 和低电平无效的从机选择线CS。MISO和MOSI用于串行领受和发送数据,先为MSB(高位),后为LSB(低位)。在SPI设置为主机编制时,MISO是主机数据输入给,MOSI是主机数据输出线。SCK用于供给时钟脉冲将数据一位位地传送。SPI总线器件间传送数据框图如图3所示:

sch

图3 SPI总线器件间传送数据框图

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端只能连接1个输入芯片。其次是输出芯片的串行数据输入能否有答应节制端。由于只需在此芯片答应时,SCK脉冲才把串行数据移入该芯片;在禁止时,SCK对芯片无影响。若没有答应节制端,则应在外围用门电路对SCK进行节制,然后再加到芯片的时钟输入端;当然,也能够只在SPI总线上连接1个芯片,而不再连接其它输入或输出芯片。

SPI总线的数据传输

    SPI是一个环形总线布局当时序其实很简单,主如果在SCK的节制下,两个双向移位寄放器进行数据互换。SPI数据传输道理很简单,它需要至多4根线,现实上3根也能够。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。此中CS是节制芯片能否被选中的,也便是说只需片选信号为事后规定的使能信号时(高电位或低电位),对此芯片的操作才无效。这就答应在统一总线上连接多个SPI设备成为可能。在SPI编制下数据是一位一位的传输的。这便是SCK时钟线具有的缘由,由SCK供给时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出经由SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。完成一位数据传输,输入也使用同样道理。多么,在至多8次时钟信号的改变(上沿和下沿为一次),就能够完成8位数据的传输。假设8位寄放器内装的是待发送的数据10101010,上升沿发送、下降沿领受、高位先发送。那么首个上升沿来的时候 数据将会是高位数据SDO=1。下降沿到来的时候,SDI上的电平将被存到寄放器中去,那么这时寄放器=0101010SDI,多么在8个时钟脉冲当前,两个寄放器的内容互相互换一次。多么就完成里一个SPI时序。下面举一个实例来申明其数据传送过程。

    假设主机和从机初始化伏贴,并且主机的sbuff=0xaa,从机的sbuff=0x55,下面将分步对SPI的8个时钟周期的数据环境演示一遍:(下表中“上”暗示上升沿,“下”暗示下降沿)

 

脉冲序号

主机缓存

从机缓存

SDI

SDO

0

10101010

01010101

0

0

1上

0101010x

1010101x

0

1

1下

01010100

10101011

0

1

2上

1010100x

0101011x

1

0

2下

10101001

01010110

1

0

3上

0101001x

1010110x

0

1

3下

01010010

10101101

0

1

4上

1010010x

0101101x

1

0

4下

10100101

01011010

1

0

5上

0100101x

1011010x

0

1

5下

01001010

10110101

0

1

6上

1001010x

0110101x

1

0

6下

10010101

01101010

1

0

7上

0010101x

1101010x

0

1

7下

00101010

11010101

0

1

8上

0101010x

1010101x

1

0

8下

01010101

10101010

1

0

表1:脉冲与数据变化对应表

    多么就完成为两个寄放器8位的互换, SDI、SDO是相对于主机而言的。此中CS引脚作为主机的时候,从机能够把它拉底被动选为从机,作为从机的是时候,能够作为片选脚用。按照以上阐发,一个完整的传送周期是16位,即两个字节,由于,起首主机要发送死令畴昔,然后从机按照主机的号令预备数据,主机鄙人一个8位时钟周期才把数据读回来。多么的传输编制有一个长处,与通俗的串行通信不合,通俗的串行通信一次持续传送至多8位数据,而SPI答应数据一位一位的传送,以至答应暂停,由于SCK时钟线由主控设备节制,当没有时钟跳变时,从设备不采集或传送数据。也便是说,主设备经由对SCK时钟线的节制能够完成对通信的节制。SPI仍是一个数据互换和谈,由于SPI的数据输入和输出线独立,所以答应同时完成数据的输入和输出

    对于不带SPI串行总线接口的MCS51系列单片机来说,能够使用软件来模仿 SPI的操作,包罗串行时钟、数据输入和数据输出。如咱们能够定义三个通俗I/O口用来模仿SPI器件的SCK、MISO、MOSI。对于不合的串行接口外围芯片,它们的时钟时序是不合的。对于在SCK的上升沿输入(领受)数据和鄙人降沿输出(发送)数据的器件,一般应将其串行时钟输出口的初始情况设置为1,而在答应接口后再置为0。多么,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至单片机的模仿MISO线,此后再置SCK为1,使单片机从模仿的MOSI线输出1位数据(先为高位)至串行接口芯片。至此,模仿1位数据输入输出便宣布完成。此后再置SCK为0,模仿下1位数据的输入输出……,依此轮回8次,即可完成1次经由SPI总线传输8位数据的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始情况为0,即在接口芯片答应时,先置SCK为1,以便外围接口芯片输出1位数据(MCU领受1位数据),之后再置时钟为0,使外围接口芯片领受1位数据(MCU发送1位数据),从而完成1位数据的传送。 

93C46存储器的软硬件设想实例

    下面就以今朝单片机系统中遍及使用的SPI接口的数据存储器93C46为例,引见SPI器件的根底使用。

93C46串行存储器简介

    93C46是1k位串行EEPROM储存器。 每一个储存器都能够经由DI/DO引脚写入或读出。它的存储容量为1024位,内部为128×8位或64×16位。93C46为串行三线SPI操作芯片,在时钟时序的同步下领受数据口的指令。指令码为9位十进制码,具有7个指令,读、擦写使能、擦除、写、全擦、全写及擦除禁止。该芯片擦写时间快,有擦写使能庇护,靠得住性高,擦写次数可达100万次, 93C46的引脚功能图如图4所示。

93c46

图4 93C46的引脚图

CS:芯片选择

SCK:时钟

DI:串行数据输入

DO:串行数据输出

VSS:接地

NC:空脚(使用时不消接任何电路)

VCC:电源

 

指令

起始位

操作数

地址

数据

64╳16

128╳8

64╳16

128╳8

读(READ)

1

10

A5~A0

A6~A0

   

消弭((ERASE)

1

11

A5~A0

A6~A0

   

写(WRITE)

1

01

A5~A0

A6~A0

D15~D0

D7~D0

写使能(EWEN)

1

00

11XXXX

11XXXXX

   

写禁止(EWDS)

1

00

00XXXX

00XXXXX

   

芯片消弭(ERAL)

1

00

10XXXX

10XXXXX

   

芯片写入(WRAL)

1

00

01XXXX

01XXXXX

D15~D0

D7~D0

表2:93C46串行EEPROM指令格局选择表

 

指令申明:
  • 读(READ):当下达10XXXXXX指令后,地址(XXXXXXXX)的数据在SCK=1时由DO输出。
  • 写(WRITE):在写入数据前,必需先下达写使能(EWEN)指令,然后再下达01XXXXXX指令后,当SCK=1时,会把数据码写入指定地址(XXXXXXXX);而DO=0时,暗示又一次在进行写操作,写入结束后DO会转为高电平。写入动作完成后,必需再下达写禁止(EWDS)号令。
  • 消弭(ERASE):下达消弭指令11XXXXXX后会将地址(XXXXXXXX)的数据消弭。
  • 写使能(EWEN):下达0011XXXX指令后,才能够进行写(WRITE)操作。
  • 写禁止(EWDS):下达0000XXXX指令后,才可反复进行写入(WRITE)操作。
  • 芯片消弭(ERAL):下达0010XXXX指令后,全数禁止。
  • 芯片写入(WRAL):下达0001XXXX指令后,全数写入“0”。
法式功能

    本例用来完成对93C46存储器的读写操作,并验证数据能否精确。此法式能够用配套测验考试板为硬件平台,在调试时要把功能开关调到93C46处。本法式先别离向0x02和0x03两个地址写入0x55和0xAA,然后读此中一个地址,并将读到的数据显示出来验证能否精确。法式默认是读0x02地址内的数据,读者也能够编削地址数据来读其它地址数据。在测验考试前要先把功能开关心换到93C46的位置上,如图5,图6所示。

demo图5 93C46测验考试演示图

 

demo

 

图6 93C46测验考试演示图

 

硬件道理图

 

sch

 

图7 硬件道理图

法式流程图

 

software

 

图8 软件流程图

    相信看到这里,你该当能够理解咱们是若何把持单片机来进行SPI总线的读写操作了,你也能够按照本人的需要来写芯片读写、存储的相关法式。由于篇幅有限,读者伴侣能够经由网站或电子@一下一路交换与进修。鄙人几期中,咱们将连续引见51单片机分析进修系统的其它功能道理与使用。