用单片机软件模拟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,微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

NRF905无线收发模块的基本特点和工作方式

nrf905模块介绍  nRF905是挪威Nordic公司推出的一款单片射频发射器芯片,采用32引脚5mm&TImes;5mm QFN封装,工作于433...

发表于 08-10 14:48 276次 阅读
NRF905无线收发模块的基本特点和工作方式

对转台速率校准卡SPI接口的开发和利用

在总线接口电路的设计中,采用了具备在系统可编程能力的复杂可编程逻辑器件CPLD取代传统的标准逻辑电路....

发表于 07-20 08:44 70次 阅读
对转台速率校准卡SPI接口的开发和利用

SPI接口的FLASH ROM AT45DB161D的驱动方法介绍

[table] [tr][td] (1)芯片介绍 AT45DB161D是串行接口的闪存芯片,可工作在2.5V~2.7V,可广泛应用于数据语音、图像...

发表于 07-19 04:03 96次 阅读
SPI接口的FLASH ROM AT45DB161D的驱动方法介绍

关于SPI接口基本功能与模式介绍

SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是M....

的头像 MCU开发加油站 发表于 07-18 15:54 437次 阅读
关于SPI接口基本功能与模式介绍

ADI ADGS1408(9)SPI接口多路复接器解决方案

本文介绍了ADGS1408/ADGS1409产品亮点和主要特性,功能框图,以及EVAL-ADGS14....

的头像 电子发烧友网工程师 发表于 07-14 07:01 668次 阅读
ADI ADGS1408(9)SPI接口多路复接器解决方案

可支持多协议工业以太网及现场总线的TIDA-00299技术资料下载

                           &nb...

发表于 07-13 14:00 119次 阅读
可支持多协议工业以太网及现场总线的TIDA-00299技术资料下载

SPI接口控制的模拟开关解决方案详解

设计一个要求高通道密度的系统时,例如在测试仪器仪表中,电路板上通常需要包括大量开关。当使用并行接口....

的头像 发表于 07-10 15:14 223次 阅读
SPI接口控制的模拟开关解决方案详解

2.4 GHz CDMA无线电收发器CYWUSB6934应用电路

CYWUSB6934是一个2.4 GHz CDMA无线电收发器。其通过SPI接口能够直接与USB控制....

发表于 07-02 09:07 108次 阅读
2.4 GHz CDMA无线电收发器CYWUSB6934应用电路

关于高性能主从模式动态可重构的SPI IP核的设计

随着集成电路设计的快速发展,系统芯片(System-on-a-Chip,SoC)的集成度越来越高,从....

的头像 电子设计 发表于 06-14 15:26 415次 阅读
关于高性能主从模式动态可重构的SPI IP核的设计

SPI接口之间数据传输中故障分析

单片机(MCU)系统为了与SPI标准外围接口器件进行通信,必须使用SPI( Serial Perip....

发表于 06-02 07:17 327次 阅读
SPI接口之间数据传输中故障分析

TLV2541、TLC2551、TLC3541和TLC4541设备的系统的SPI接口实现的概述

该应用报告讨论了具有以下设备的系统的SPI接口实现:TLV2541、TLC2551、TLC3541和....

发表于 05-25 15:22 135次 阅读
TLV2541、TLC2551、TLC3541和TLC4541设备的系统的SPI接口实现的概述

TLC2552,TLV2542和MSP430F149的特点及接口代码的详细概述

本应用笔记讨论了TLC2552和TLV2542 ADC的特点。还介绍了MSP430F149到TLC2....

发表于 05-25 15:00 110次 阅读
TLC2552,TLV2542和MSP430F149的特点及接口代码的详细概述

具有SPI接口的触摸屏控制器TSC2005的详细资料免费下载

TSC2005是一种非常低功耗的触摸屏控制器,它设计用于基于先进的低压处理器的功率敏感的手持应用。它....

发表于 05-18 15:51 72次 阅读
具有SPI接口的触摸屏控制器TSC2005的详细资料免费下载

SPI接口的模拟开关提高通道密度

设计一个要求高通道密度的系统时,例如在测试仪器仪表中,电路板上通常需要包括大量开关。当使用并行接口控....

发表于 03-07 14:49 105次 阅读
SPI接口的模拟开关提高通道密度

创建主/从SPI接口的两种方法详谈

最近,Digilent开源技术社区收到了两个关于如何在Zynq SoC和Zynq UltraScal....

发表于 12-30 05:03 417次 阅读
创建主/从SPI接口的两种方法详谈

基于SPI通信接口的两片DSP的双向通信和任务同步

在载人航天、无人机、火控雷达等尖端技术领域的作动系统中,常用双控制器余度技术来提高系统的可靠性。两个....

发表于 10-30 15:00 256次 阅读
基于SPI通信接口的两片DSP的双向通信和任务同步

8通道、12位、可配置ADC/DAC,集成片内基准电压源和SPI接口

DAC是数字模拟转换器(英语:Digital to analog converter,英文缩写:DA....

发表于 06-07 10:09 578次 阅读
8通道、12位、可配置ADC/DAC,集成片内基准电压源和SPI接口

【VEML6075紫外线检测试用体验】+3.SPI接口测试

    开发板使用一块 SPI接口的128x64液晶显示屏,用来显示MCU读取紫外线传感器 的值。     先看原理...

发表于 04-16 14:20 1429次 阅读
【VEML6075紫外线检测试用体验】+3.SPI接口测试

71m65xxSPI接口

In order to avoid access conflicts and to ensure d....

发表于 04-05 16:13 237次 阅读
71m65xxSPI接口

MSP430的spi时钟始终没有输出

用的是msp430F5438A,通过SPI来读取一个传感器的数据。但是SPI的时钟始终没有输出,以下是代码,不知是哪里设置错了。...

发表于 02-28 15:09 2116次 阅读
MSP430的spi时钟始终没有输出

【LinkIt 7687试用体验】spi接口应用

最近一周在调试spi的外接设备,spi一共多使用29 30 31 32 四个主要接口,如何器件直接中断可以加外部中断触发。 函数使用API...

发表于 12-15 14:28 652次 阅读
【LinkIt 7687试用体验】spi接口应用

求助。SPI接口主模式电路设计。

SPI接口主模式电路设计。 (1)输出时钟频率可调:主时钟2/4/8/32/64分频; (2)具有主动收发功能; (3)发送、接收数据...

发表于 11-25 00:00 1196次 阅读
求助。SPI接口主模式电路设计。

MSP430单片机与TLV5620通讯(SPI接口)

MSP430单片机与TLV5620通讯(SPI接口),感兴趣的小伙伴们可以瞧一瞧。

发表于 11-17 17:44 585次 阅读
MSP430单片机与TLV5620通讯(SPI接口)

SPI接口参数配置

11.小钢炮Cannon-SPI,感兴趣的小伙伴们可以瞧一瞧。

发表于 11-16 17:27 235次 阅读
SPI接口参数配置

SPI的工作原理讲解

SPI 接口的英文全称是"Serial Peripheral Interface",翻译成中国话就是....

发表于 11-11 15:51 713次 阅读
SPI的工作原理讲解

基于nRF905射频收发模块的设计

本文介绍了单片射频收发器nRF905的芯片结构、工作模式、射频收发流程以及nRF905片内SPI接口....

发表于 10-25 18:04 243次 阅读
基于nRF905射频收发模块的设计

SPI接口

电子专业单片机开发中的学习教程资料——SPI接口

发表于 08-08 15:17 233次 阅读
SPI接口

用SPI接口读写AT25F1024

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 393次 阅读
用SPI接口读写AT25F1024

SPI接口温度传感器TC72应用测试

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 344次 阅读
SPI接口温度传感器TC72应用测试

用带SPI接口的数模转换芯片MAX515调节LED亮度

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 449次 阅读
用带SPI接口的数模转换芯片MAX515调节LED亮度

用带SPI接口的MCP23S17扩展16位通用IO端口

以前寫論文收集的一些資料,學習單片機、C語言的好資料!!!!

发表于 07-05 16:49 1139次 阅读
用带SPI接口的MCP23S17扩展16位通用IO端口

SPI接口扩展RF通信

基础的电子类资料,电子工程师必备文档,快来下载学习吧。

发表于 07-04 15:02 144次 阅读
SPI接口扩展RF通信

串口 pSRAM,Serial pSRAM,SPI接口 pSRAM大容量32Mbit,SQPI pSRAM,QPI pSRAM JSC一级代理

我司是EMLSI(JSC)一级代理,主要提供pSRAM(伪静态随机存储器) 串口 pSRAM,Serial pSRAM,SPI pSR...

发表于 05-10 09:49 1888次 阅读
串口 pSRAM,Serial pSRAM,SPI接口 pSRAM大容量32Mbit,SQPI pSRAM,QPI pSRAM JSC一级代理

SPI接口和DS1302实时时钟(12864显示)

SPI接口和DS1302实时时钟(12864显示),有兴趣的同学可以下载学习

发表于 04-27 16:18 267次 阅读
SPI接口和DS1302实时时钟(12864显示)

基于SPI接口的凌阳单片机键盘设计

本文介绍了一种通过凌阳单片机SPCE061A的SPI接口进行键盘扩展的设计 方案。该方案采用具有SP....

发表于 03-28 16:42 115次 阅读
基于SPI接口的凌阳单片机键盘设计

基于ENC28J60以太网控制器及其应用

SPI接口以太网控制器ENC28J60介绍、工作过程、及应用

发表于 03-01 17:46 333次 阅读
基于ENC28J60以太网控制器及其应用

SPI接口发片选信号导致死机

STM32F103 SPI接口发片选信号导致死机

发表于 12-08 11:53 194次 阅读
SPI接口发片选信号导致死机

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

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

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

无法往SPIBUF里写入数据的原因是什么?pic24FJGA110,是因为寄存器设置不对吗

如题,与FPGA进行收发通信,发现无法往SPIBUF写入数据,从PIC存储器视图里读不出任何数据,是空的,原因是什么?寄...

发表于 09-28 21:32 1168次 阅读
无法往SPIBUF里写入数据的原因是什么?pic24FJGA110,是因为寄存器设置不对吗

PIC24FJGA110与FPGA通信验证,有时钟、片选信号没有数据的问题?

最近在做一个项目,负责单片机与FPGA的SPI口收发通信验证任务。将没有往SPIbuf里写数据时,将单片机设为帧主模式,在s...

发表于 09-27 17:15 1282次 阅读
PIC24FJGA110与FPGA通信验证,有时钟、片选信号没有数据的问题?

MSP430F543x利用SPI接口对AT25010器件进行读写操作

发表于 09-02 15:00 289次 阅读
MSP430F543x利用SPI接口对AT25010器件进行读写操作

I2C总线接口、SPI接口、I/O接口之间区别

发表于 07-17 14:59 676次 阅读
I2C总线接口、SPI接口、I/O接口之间区别

SPI接口及应用

发表于 06-11 12:02 334次 阅读
SPI接口及应用

SPI接口TM7705 AD7705 16位ADC数据采集模块输入增益可编程资料

发表于 03-30 14:40 1181次 阅读
SPI接口TM7705 AD7705 16位ADC数据采集模块输入增益可编程资料

MP3-VS1003驱动(MP3模块)

发表于 09-26 15:48 599次 阅读
MP3-VS1003驱动(MP3模块)

250 MHz带宽DPD观测接收机 AD6641

发表于 09-24 10:29 307次 阅读
250 MHz带宽DPD观测接收机 AD6641

MSP430系列单片机模拟SPI串行口

发表于 01-21 13:24 361次 阅读
MSP430系列单片机模拟SPI串行口

AVR单片机中的SPI接口

发表于 01-19 09:22 304次 阅读
AVR单片机中的SPI接口

DSP2812 SPI接口控制SD卡读写操作

发表于 05-12 12:57 1185次 阅读
DSP2812 SPI接口控制SD卡读写操作

全功能SPI接口的设计与实现

SPI(Serial Peripheral Interface,串行外围接口)是Motorola公司....

发表于 01-08 18:17 364次 阅读
全功能SPI接口的设计与实现

MB85RS256A-DS501-00007-4v0-E

发表于 12-08 11:54 384次 阅读
MB85RS256A-DS501-00007-4v0-E

DS1390-DS1394数据资料

The low-voltage serial-peripheral interface (SPI)D....

发表于 11-15 12:09 685次 阅读
DS1390-DS1394数据资料

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

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

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

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

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

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

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

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

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

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

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

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

基于SPI接口和FIFO缓冲器的大容量高速实时数据存储方案

发表于 07-30 10:06 532次 阅读
基于SPI接口和FIFO缓冲器的大容量高速实时数据存储方案

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

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

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

MAX5113带SPI接口的14位电流DAC

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

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

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

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

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