0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

软件模拟SPI接口的实现方法过程详解

GReq_mcu168 2017-12-01 11:13 次阅读

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的子程序。

//首先定义好I/O口

sbitSDO=P1^0;

sbitSDI=P1^1;

sbitSCK=P1^2;

sbitSCS=P1^3;

sbitACC_7=ACC^7;

unsignedintSpiRead(unsignedcharadd)

{

unsignedchari;

unsignedintdatal6;

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

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

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

SCK=0;

SCK=1;

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

{

if(add&0x80==1)

SDO=1;

else

SDO=0;

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

SCK=1;

add<<= 1;  

}

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

SCK=0;

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

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

{

SCK=1;

_nop_();

if(SDI==1)

datal6|=0x01;

SCK=0;

datal6< < =1;  

}

returndatal6;

}

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5999

    文章

    43968

    浏览量

    620746
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1613

    浏览量

    89585
  • 93C46
    +关注

    关注

    0

    文章

    23

    浏览量

    9849

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

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于GPIO模拟SPI接口驱动设计与实现

    SPI总线是我们常用的串行设备接口,一般情况下我们都会适应硬件SPI接口,但有些时候当硬件端口不足时,我们也希望可以使用软件
    发表于 12-07 16:21 4634次阅读
    基于GPIO<b class='flag-5'>模拟</b>的<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>驱动设计与<b class='flag-5'>实现</b>

    C51软件模拟实现SPI通信接口方法

    语音合成模块带有SCI及SPI接口,如采用不带有SPI接口的AT89C51单片机,必然存在扩展接口的问题。本文介绍的C51
    发表于 05-16 07:00

    怎么实现仿真SPI接口

    功能单元,利用GPIO模拟SPI接口的思想和方法实现对串行D/A芯片 TLV5367的访问,以满足工程要求。  
    发表于 08-15 06:32

    软件模拟SPI时序实现25Q64读写操作的方法

    软件模拟SPI时序实现25Q64读写操作单片机采用SPI/IIC通讯协议访问外围电子模块如:显示屏、EEPROM、FLASH、各种电子传感器
    发表于 11-30 07:35

    SPI总线接口实现数据传输的实现方法

    本文介绍了通过SPI总线接口实现数据传输的实现方法,给出了用MCS51单片机汇编语言模拟SPI
    发表于 11-16 13:34 8次下载

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

    的文章,在此分享。 当我们在设计中使用Zynq SoC或Zynq UltraScale + MPSoC时,可以有两种方法实现SPI接口: 1. 使用PS端的
    发表于 12-30 05:03 5220次阅读
    创建主/从<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>的两种<b class='flag-5'>方法</b>详谈

    STM32F10x_SPI (硬件接口 + 软件模拟)读写Flash(25Q16)

    STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)
    的头像 发表于 03-25 13:59 9466次阅读
    STM32F10x_<b class='flag-5'>SPI</b> (硬件<b class='flag-5'>接口</b> + <b class='flag-5'>软件</b><b class='flag-5'>模拟</b>)读写Flash(25Q16)

    基于可编程逻辑器件实现SPI总线接口的应用方案

    SPI串行通信接口是一种常用的标准接口,由于其使用简单方便且节省系统资源,很多芯片都支持该接口,应用相当广泛。SPI
    发表于 08-22 15:51 732次阅读
    基于可编程逻辑器件<b class='flag-5'>实现</b><b class='flag-5'>SPI</b>总线<b class='flag-5'>接口</b>的应用方案

    可配置GPIO模拟SPI总线的设计和实现过程分析

    也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO
    的头像 发表于 10-04 14:10 3826次阅读
    可配置GPIO<b class='flag-5'>模拟</b><b class='flag-5'>SPI</b>总线的设计和<b class='flag-5'>实现</b><b class='flag-5'>过程</b>分析

    软件模拟SPI时序实现25Q64读写操作

    软件模拟SPI时序实现25Q64读写操作单片机采用SPI/IIC通讯协议访问外围电子模块如:显示屏、EEPROM、FLASH、各种电子传感器
    发表于 11-20 12:06 6次下载
    <b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>SPI</b>时序<b class='flag-5'>实现</b>25Q64读写操作

    硬件SPI软件模拟SPI速度区别实测

    硬件SPI软件模拟SPI速度区别实测目前为了程序移植方便,许多以SPI接口的芯片所提供的参考代
    发表于 12-22 19:13 9次下载
    硬件<b class='flag-5'>SPI</b>与<b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>SPI</b>速度区别实测

    软件模拟SPI时序实现25Q64读写操作

    软件模拟SPI时序实现25Q64读写操作单片机采用SPI/IIC通讯协议访问外围电子模块如:显示屏、EEPROM、FLASH、各种电子传感器
    发表于 12-22 19:14 15次下载
    <b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>SPI</b>时序<b class='flag-5'>实现</b>25Q64读写操作

    软件模拟SPI

    软件模拟比硬件操作SPI更为简单,缺点是明显更加消耗CPU软件SPI实例:CPOL=1,CPHA=1(比方)u8 SOFT_
    发表于 12-22 19:15 10次下载
    <b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>SPI</b>

    单片机软件模拟SPI接口的解决方案

    电子发烧友网站提供《单片机软件模拟SPI接口的解决方案.pdf》资料免费下载
    发表于 10-13 11:31 2次下载
    单片机<b class='flag-5'>软件</b><b class='flag-5'>模拟</b><b class='flag-5'>SPI</b><b class='flag-5'>接口</b>的解决方案

    单片机spi接口的使用方法有哪些(spi接口和串口的区别)

    如果单片机没有硬件SPI模块,或者需要额外的IO引脚来实现多个SPI设备的通信,可以使用软件SPI模拟
    的头像 发表于 11-10 16:38 1608次阅读