• 第12章Cortex-M4-SPI-Bus


    12.1 标准SPI-Bus简介

    12.1.1 SPI-Bus简介

    SPI(Serial Peripheral interface):是由Motorola公司开发的串行外围设备接口,是一种高速的,全双工,同步的通信总线。主要应用在 EEPROMFLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器等器件。

    SPI总线的通信方式:同步串行全双工。

    SPI总线的通信速度:10MHz以上~100MHz~(……)

    12.1.1 SPI-Bus物理拓扑结构

    1. 五线制接口(四线制SPI)

    MOSI:主出从入、MISO:主入从出、SCK:时钟线、CS:片选GND:地线

    全双工通信

    1. 四线制接口(三线制SPI)

    IO:双向通信数据线、SCK:时钟线、CS:片选、GND:地线

    半双工通信

    1. 物理拓扑结构

    一主多从

    依靠片选线去区分从设备,每增加一个从设备会增加一个IO口。

    12.1.1 SPI-Bus通信格式

    通信数据帧过程:

    ① 拉低片选线

    ② 产生上升沿让MOSI以及MISO准备数据

    ③ 产生下降沿让MOSI以及MISO发送并且接收数据

    ④ 完成一个字节数据以后

    ⑤ 拉高片

     能够满足模式0的一般会满足模式3;能够满足模式1的一般会满足模式2

    Q

    SPI总线的数据帧格式不固定,可以发送并且接收任意bit的数量。

     SPI发送过程或接收过程都可以暂停。

    为了方便使用,很多情况下会将SPI总线数据格式转成一个字节发送并且接收。

    SPI总线每发送一个bit必然会接收到一个bit数据。

     模拟SPI发送并且接收一个字节数据:

     1 /*
     2 函数功能:模拟SPI总线发送并且接收一个字节
     3 函数形参:需要发送的数据
     4 函数返回值:接收道的结果
     5 备注:通信速度:100MHz
     6 */
     7 u8 spi_send_and_recive_byte(u8 send_byte_data)
     8 {
     9     u8 recive_byte_data = 0;
    10     u8 value = 0;
    11     
    12     CS = 0;
    13     
    14     //上升沿准备数据;下降沿发送并且接收数据
    15     for(value = 0; value < 8; value++)
    16     {
    17         CLK = 1;//让主从设备准备数据
    18         if(send_byte_data & (0x80 >> value))
    19         {
    20             MOSI = 1;
    21         }
    22         else
    23         {
    24             MOSI = 0;
    25         }
    26         CLK = 0;//让主从设备发送并且接收数据
    27         recive_byte_data <<= 1;//把最高位及出去,空出最低位补0
    28         recive_byte_data |= MISO;//然后最低位移移移,移到最高位
    29     }
    30     
    31     CS = 1;
    32 }
    View Code
  • 相关阅读:
    ios专题 - CocoaPods - 初次体验
    ios专题 - CocoaPods - 安装
    Objective-C浅拷贝和深拷贝
    支付宝交互流程
    UITabBar的隐藏
    iOS-容易造成循环引用的三种场景
    FMDB 的基本操作
    Swap file ".Podfile.swp" already exists!
    将UIImage保存成JPG或PNG格式存储在本地
    UI常用控件的一些属性
  • 原文地址:https://www.cnblogs.com/zhouyuqing1024/p/11847067.html
Copyright © 2020-2023  润新知