单片机软件模拟SPI接口—加深理解SPI总线协议

  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的子程序。
[cpp] view plaincopy
  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总线协议相关推荐

  1. 基于高速51单片机的模拟USB接口设计

    基于高速51单片机的模拟USB接口设计 作者:廖颂文 摘要:参照AVRUSB技术给出了51单片机通过模拟USB通信的实现方法.用VC编写了上位机软件,通过libusb驱动实现了PC与ST12LE560 ...

  2. CANOpen系列教程02_理解CAN总线协议

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!https://www.cnblogs.com/captainbed 正文: CANOpen ...

  3. CORE-ESP32C3|eink|墨水屏日历+时间日期+温度显示|I2C软件模拟| LuatOS-SOC接口|官方demo|学习(14):墨水屏动态日历+oled日期显示+ AHT10测温模组

    目录 参考博文 源于网友oled+eink+aht10项目 源代码修改及复现说明 主要修改 显示效果 ​编辑硬件准备 软件版本 日志及soc下载工具 软件使用 接线说明 天气显示屏 硬件接线 温度采集 ...

  4. STM32F103单片机软件模拟IIC并读取TMP112数字温度传感器

    本文利用STM32F103系列单片机读取TMP112数字温度传感器的温度信息,TMP112数字传感器采用IIC总线协议通信.STM32自身含有硬件IIC资源,分别是PB6-->SCL.PB7-- ...

  5. FPGA高速接口设计之SpaceWire——总线协议概述

    目录 一.SpaceWire总线协议概述 1.物理层 2.信号层 2.1 低电压差分信号(LVDS)技术 2.2 数据-滤波(DS)编码技术 3. 字符层 3.1 控制字符 3.2 数据字符 3.3 ...

  6. 软件模拟SPI接口程序代码

    目录 SPI协议简介 SPI接口介绍 SPI接口连接图 SPI数据传输方向 SPI传输模式 模拟SPI程序 SPI协议简介 SPI的通信原理很简单,一般主从方式工作,这种模式通常有一个主设备和一个或者 ...

  7. SPI通讯原理,SPI驱动程序编写,EEPROM,Tja1145,CAN收发器驱动程序,嵌入式,单片机,软件

    一.SPI通信原理讲解 0.架构讲解 1.通常CPU芯片(如TI的280049.英飞凌的TC234)中集成了SPI模块,CPU可使用SPI通讯模块实现与外部设备的通讯,如CPU与EEPROM模块的通讯 ...

  8. 基于labview的温湿度数据采集_【零偏原创】基于FPGA的多路SPI接口并行数据采集系统...

    摘 要:本文简述了SPI协议,建立了基于FPGA的SPI接口电路模型,并说明其输入输出端口和数据发送和接收过程,仿真验证了在主状态机控制下10个SPI接口并行采集数据,并在FPGA开发板上进行验证. ...

  9. SPI协议概括、SPI总线工作的四种方式和SPI接口时序

    SPI协议概括: SPI总线是一种4线总线,因其硬件功能很强,所以与SPI有关的软件就相当简单,使中央处理器(Central Processing Unit,CPU)有更多的时间处理其他事务.正是因为 ...

最新文章

  1. .NET如何从配置文件中获取连接字符串
  2. 在安装和使用Oracle过程中可能遇到的困难及其相应的解决措施
  3. Oracle快速复制表
  4. 面试题系列——OSI七层模型
  5. 计算机专业联考335分,联考专业分、文化分达到多少能过本科线(附2019年美术高考分数线汇总...
  6. 阿里云成为首个通过“虚拟化云平台性能测试(大规模)”的云厂商
  7. C++7行代码实现求最大公约数
  8. 如何在Vue中使用Font Awesome?
  9. 电子设备的节能分析与设计
  10. 6 Django的视图层
  11. 股票中,什么是滚动市盈率,有什么作用?
  12. 国内某厂商摄像头敏感信息泄露漏洞事件分析
  13. c语言我喜欢你,【幻 仿】UC启动时的我喜欢你
  14. 辅流式沉淀池固体负荷计算方法_20000m3/d污水厂设计计算书
  15. 模拟电路设计(39)---一文搞懂直流电源EMI滤波器
  16. Need assistance with accessing your developer account
  17. 在C语言中为什么c1出现错误,我在用C语言编程时,编译后总出现Error:spawning C1.exe的错误,看不懂,是什么意思啊??快快快,谢谢!...
  18. 灰度图像--形态学处理:腐蚀、膨胀、开操作、闭操作、顶帽、底帽等
  19. 用Netty实现简单的聊天:一对一匹配聊天
  20. 【U3D日记-2016年10月28日】float转int 误差!

热门文章

  1. 数据分析师要会mysql_数据分析人员需要掌握sql到什么程度?
  2. pytorch使用torch.nn.Sequential构建网络
  3. html css图片展开动画,8个实用炫酷的HTML5图片动画应用
  4. sql查询时间过长和什么有关系_2020年成人高考成绩查询时间是什么时候?
  5. nexus、maven私服仓库(一)
  6. 最短路径 | 1087 三重标尺+记录最短路径条数
  7. 在Tomcat启动时直接创建servlet(二)
  8. [存档]获取通讯录信息并写到SD卡上
  9. mojoportal升级中用户相关设置
  10. WPF自定义控件 —— 布局