用单片机软件模拟spi接口的操作方法

玩转单片机 2017-11-13 14:27 次阅读

SPI(Serial Peripheral Interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准,目前,各半导体公司推出了大量的带有SPI接口的具有各种各样功能的芯片,如RAM,EEPROM,FlashROM,A/D转换器、D/A转换器、LED/LED显示驱动器、I/O接口芯片、实时时钟、UART收发器等等,为用户的外围扩展提供了极其灵活而价廉的选择。由于SPI总线接口只占用微处理器四个I/O口线,采用SPI总线接口可以简化电路没计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。现以 AT89C205l单片机模拟SPI总线操作串行EEPROM 93CA6为例,如图1所示,介绍利用单片机的I/O口通过软件模拟SPI总线的实现方法。在这里,仅介绍读命令的时序和应用子程序。

93C46存储器SPI总线的工作原理

93CA6作为从设备,其SPI接口使用4条I/O口线:串行时钟线(SK)、输出数据线DO、输入数据线DI和高电平有效的从机选择线CS。其数据的传输格式是高位(MSB)在前,低位(LsB)在后。93C46的SPI总线接口读命令时序如图2所示。

软件模拟SPI接口的实现方法 

对于不带SPI串行总线接口的AT89C2051单片 机来说,可以使用软件来模拟SPI的操作,图1所示 为AT89C2051单片机与串行EEPROM 93C46的硬件 连接图,其中,P1.0模拟SPI主设备的数据输出端 SDO,P1.2模拟SPI的时钟输出端SCK,P1.3模拟 SPI的从机选择端SCS,P1.1模拟SPI的数据输入 SDI。

上电复位后首先先将P1.2(SCK)的初始状态设置为0(空闲状态)。读操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(10),6位被读的数据地址(A5A4A3A2A1A0),然后通过P1.1口读1位空位(0),之后再读l6位数据(高位在前)。写操作:AT89C2051首先通过P1.0口发送1位起始位(1),2位操作码(01),6位被写的数据地址(A5A4A3A2A1A0),之后通过P1.0口发送被写的l6位数据(高位在前),写操作之前要发送写允许命令,写之后要发送写禁止命令。写允许操作(WEN)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(11XXXX)。              

写禁止操作(WDS)):写操作首先发送1位起始位(1),2位操作码(00),6位数据(00XXXX)。

下面介绍用C51模拟SPI的子程序。

  1. //首先定义好I/O口  

  2. sbit SDO=P1^0;  

  3. sbit SDI=P1^1;  

  4. sbit SCK=P1^ 2;  

  5. sbit SCS=P1^3;  

  6. sbit ACC_7= ACC^7;  

  7. unsigned int SpiRead(unsigned char add)  

  8. {  

  9.     unsigned char i;  

  10.     unsigned int datal6;  

  11.     add&=0x3f;/*6位地址*/  

  12.     add |=0x80;/*读操作码l0*/  

  13.     SDO=1;/*发送1为起始位*/  

  14.     SCK=0;  

  15.     SCK=1;  

  16.     for(i=0;<8;i++)/*发送操作码和地址*/  

  17.     {  

  18.         if(add&0x80==1)  

  19.             SDO=1;  

  20.         else   

  21.             SDO=0;  

  22.         SCK=0;/*从设备上升沿接收数据*/  

  23.         SCK=1;  

  24.         add<<= 1;  

  25.     }  

  26.     SCK=1;/*从设备时钟线下降沿后发送数据,空读1位数据*/  

  27.     SCK=0;  

  28.     datal6<<= 1;/*读16位数据*/  

  29.     for(i=0;<16;i++)  

  30.     {  

  31.         SCK= 1;  

  32.         _nop_();  

  33.         if(SDI==1)  

  34.             datal6|=0x01;  

  35.         SCK =0;  

  36.         datal6< < =1;  

  37.     }  

  38.     return datal6;  

  39. }  

对于不同的串行接口外围芯片,它们的时钟时序是不同的。上述子程序是针对在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件。这些子程序也适用于在串行时钟)的上升沿输入和下降沿输出的其它各种串行外围接口芯片,只要在程序中改变P1.2(SCK)的输出电平顺序进行相应调整即可。

玩转单片机技术专区

原文标题:单片机软件模拟SPI接口—加深理解SPI总线协议

文章出处:【微信号:mcu168,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

关注电子发烧友微信

有趣有料的资讯及技术干货

下载发烧友APP

打造属于您的人脉电子圈

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

支持单线SPI接口的烧录技术实现

常规的SPI接口总线是双数据线全双工的同步通讯总线,在芯片的管脚上占用四根线。这里将介绍一种半双工的....

发表于 10-15 11:02 次阅读 0条评论
支持单线SPI接口的烧录技术实现

DS1390-DS1394低电压SPI/3线接口RTC

低电压串行外设接口(SPI™) DS1390/DS1391/DS1394和低电压3线DS1392/D....

发表于 11-15 11:56 次阅读 0条评论
DS1390-DS1394低电压SPI/3线接口RTC

MAX5700双通道DAC的家庭内部电压基准和SPI接口

MAX5700/MAX5701/MAX5702双通道,低功耗,8/10/12位,电压输出数字模拟转换....

发表于 10-08 11:28 次阅读 0条评论
MAX5700双通道DAC的家庭内部电压基准和SPI接口

基于FPGA的可复用SPI接口设计

根据业界通用的SPI总线的标准,本文设计一种可复用的高速SPI总线。设计过程中很多变量都采用参数形式....

发表于 09-04 14:22 次阅读 0条评论
基于FPGA的可复用SPI接口设计

SPI总线协议的通信原理及应用举例

SPI的通信原理 很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根....

发表于 08-28 11:16 次阅读 0条评论
SPI总线协议的通信原理及应用举例

FPGA在智能手机设计中的应用

简介 世界领先的手机制造商们的广告有什么共同点? 答:他们几乎从来都不说他们的产品能够打电话除非是某....

发表于 07-23 09:31 次阅读 0条评论
FPGA在智能手机设计中的应用

MAX5113带SPI接口的14位电流DAC

MAX5113是14位,9通道,电流输出数字-模拟转换器(DAC)。该器件采用低为+3.0 V电源,....

发表于 07-16 15:11 次阅读 0条评论
MAX5113带SPI接口的14位电流DAC

通过SPI接口协议实现DSP与其它设备的通信

随着信息技术革命的深入和计算机技术的飞速发展,DSP技术也正以极快的速度被应用到科技和国民经济的各信....

发表于 04-15 10:56 次阅读 0条评论
通过SPI接口协议实现DSP与其它设备的通信

MAX1441与触摸屏传感器的SPI接口设计指南

MAX1441为双通道接近检测与触摸屏传感器,本文介绍了在产品开发过程中如何使用其接口固件,以简化M....

发表于 04-09 11:06 次阅读 0条评论
MAX1441与触摸屏传感器的SPI接口设计指南

AVR单片机串行接口SPI接口应用设计

使用的同步串行三线SPI接口,可以方便的连接采用SPI通信协议的外围或另一片AVR单片机,实现在短距....

发表于 11-09 17:37 次阅读 0条评论
AVR单片机串行接口SPI接口应用设计

科胜讯推出SPI接口控制器型调制解调器CX93040

科胜讯系统公司推出一款采用 SPI 接口的控制器型 CX93040 调制解调器,CX93040 适用....

发表于 06-13 08:50 次阅读 1条评论
科胜讯推出SPI接口控制器型调制解调器CX93040

PIC单片机与串行闪存的SPI接口设计

PIC单片机以性能稳定、品种众多等特点在工业控制、仪器仪表、家电、通信等领域得到广泛应用。虽然很多型....

发表于 01-14 19:49 次阅读 0条评论
PIC单片机与串行闪存的SPI接口设计

PIC单片机与串行闪存的SPI接口设计

PIC单片机以性能稳定、品种众多等特点在工业控制、仪器仪表、家电、通信等领域得到广泛应用。虽然很多型....

发表于 01-14 19:49 次阅读 1条评论
PIC单片机与串行闪存的SPI接口设计

SPI接口实险,LED数据管显示

SPI接口实险,LED数据管显示。 1、程序通过SPI接口输出数据到HC595芯片驱动LE....

发表于 06-30 11:19 次阅读 0条评论
SPI接口实险,LED数据管显示

MMC卡SPI接口电路

MMC卡既可以采用MMC总线访问,也可以采用SPI总线访问。大部分微处理器都有SPI接口而没有MMC....

发表于 03-29 23:41 次阅读 0条评论
MMC卡SPI接口电路

配备SPI接口的快速以太网控制器(Micrel)

麦克雷尔公司 (Micrel Inc.)推出 KSZ8851。KSZ8....

发表于 08-08 10:23 次阅读 0条评论
配备SPI接口的快速以太网控制器(Micrel)