• 模拟SPI协议时序


      SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制。

      在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE)。

      所以,在以下的介绍中,都是默认单片机是主机模式进行说明的。

      SPI总线相对于IIC总线,无总裁机制,无应答机制。

      SPI常用的四线制分别是,MISO(主入从出)、MOSI(主出从入)、SCK(同步时钟线)、CS(片选线,也有是NSS)。

      主从机之间典型的接线方式如下所示:

      

      按照时钟线的时钟极性(CPOL)和相位(CPHA),将SPI总线区分成4种工作方式。

      具体区分如下:

      当时钟极性(CPOL==0)时:表示时钟线空闲状态为低电平;

      当时钟极性(CPOL==1)时:表示时钟线空闲状态为高电平;

      当时钟相位(CPHA==0)时:表示数据在时钟的第一个边沿输出;

      当时钟相位(CPHA==1)时:表示数据在时钟的第二个边沿输出;

      如上所示,CPOL和CPHA两两组合,可表示4种工作方式,假设配置CPOL=0,CPHA=0,表示数据线在空闲时处于低电平,主机数据在时钟的第一个边沿(也就是上升沿被输出),在第二个边沿(也就是下降沿被读入)。

      需要注意的是,主机的配置必须根据从机设计,例如,从机是上升沿输出,下降沿输入。那么,主机在配置的过程当中,必须采用上升沿输出,下降沿输入,即SPI0工作方式。

      采用I/O端口模拟SPI协议时序,可以很好地加深对于SPI总线的理解。

      SPI写时序模拟:

     1 void SPI_write(unsigned char dat)
     2 {
     3         unsigned char temp;
     4         for(temp=0x80;temp!=0;temp>>=1)
     5         {
     6                 SCK=0;
     7                 if(temp&dat==0)
     8                 {
     9                         MOSI=0;
    10                 }
    11                 else
    12                 {
    13                         MOSI=1;
    14                 }
    15                 SPI_delay(); //让MOSI稳定
    16                 SCK=1;
    17         }
    18 }

      SPI读时序模拟:

     1 unsigned char SPI_read(void)
     2 {
     3         unsigned char temp;
     4         unsigned char dat;
     5         for(temp=0x80;temp!=0;temp>>=1)
     6         {
     7                 SCK=1;
     8                 SPI_delay();  //让SCK稳定
     9                 SCK=0;
    10                 if(MISO==1)
    11                 {
    12                         dat|=temp;
    13                 }
    14                 else
    15                 {
    16                         dat&=~temp;
    17                 }
    18         }
    19         return dat; 
    20 }

      

  • 相关阅读:
    【python】为什么IDE看很多源码的函数都是pass带过
    【PyQt5】使用pyqtgraph绘图时UI卡顿的解决
    Qt designer button图标适应控件大小
    【转载】标量,向量,矩阵与张量
    Python实现简单的HTTP服务器(支持文件下载)
    Python——Pygame实现生命游戏(game of life)
    mysql允许外部连接设置
    fastdfs在ubuntu的编译安装,php扩展fastdfs的安装
    ubuntu下安装mongodb
    ubuntu16.04安装mongo扩展出现的问题
  • 原文地址:https://www.cnblogs.com/achao123456/p/5535929.html
Copyright © 2020-2023  润新知