SPI简介

SPI 协议是由Motorola提出的通讯协议 (Serial Peripheral Interface) ,是一种高速全双工的串行通信总线。

SPI 通讯使用 3 条总线 :SCK、 MOSI、 MISO ,以及若干片选线(SS、CS、NSS)。

主机要和哪个从机通信,就把对应的片选线拉低,由高变低是起始信号,由低边高是停止信号

CPOL/CPHA 及通讯模式

时钟极性 CPOL 是指 空闲状态时SCK 的电平信号。CPOL=0 时, SCK 在空闲状态为低电平, CPOL=1 时则反之。

时钟相位 CPHA 是指数据的采样的时刻。当 CPHA=0 时, 信号将会在SCK 时钟线的“奇数边沿”被采样, CPOL=1 时则反之。

所以SPI就有4种通讯模式,实际中采用较多的是“模式 0”与“模式 3

模式 CPOL CPHA SCK空闲状态 采样时刻
0 0 0 低电平 奇数边沿
1 0 1 低电平 偶数边沿
2 1 0 高电平 奇数边沿
3 1 1 高电平 偶数边沿

实例分析

逻辑分析仪图示

已知:SPI使用的是模式1,输入的数据是0x58 0x03,收到的数据是0x00 0x00 0x00 0xA4,和图示完全符合。

图片可能不太好放大看,文末提供源文件。

相关实验代码(ESP32)

void bl0942_init()
{esp_err_t ret;static spi_bus_config_t buscfg={.miso_io_num = PIN_NUM_MISO,.mosi_io_num = PIN_NUM_MOSI,.sclk_io_num = PIN_NUM_CLK,.quadwp_io_num = -1,.quadhd_io_num = -1,.max_transfer_sz = 1024};// 初始化spiret = spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO);ESP_LOGI(TAG, "spi_bus_initialize = %d", ret);static spi_device_interface_config_t devcfg={.clock_speed_hz = 500 * 1000,.mode = 1,.spics_io_num = -1,     // 不使用片选.queue_size = 7,.pre_cb = NULL  //传输前的回调};// 添加从设备ret = spi_bus_add_device(SPI2_HOST, &devcfg, &gw_spi);ESP_LOGI(TAG, "spi_bus_add_device = %d", ret);
}int bl0942_spi_r(uint8_t ICAddr, uint8_t cmd)
{int ret;uint8_t CHECKSUM = 0;spi_transaction_t t;memset(spi_tx_buf, 0, sizeof(spi_tx_buf));spi_tx_buf[0] = ICAddr;spi_tx_buf[1] = cmd;memset(&t, 0, sizeof(t));t.length = 8 * 6;t.tx_buffer= spi_tx_buf;t.rx_buffer= spi_rx_buf;t.user=(void*)0;ret = spi_device_polling_transmit(gw_spi, &t);if (ret != 0){ESP_LOGE(TAG, "spi_device_polling_transmit err");return -1;}return 0;
}void bl0942_read_all()
{bl0942_spi_r(0x58, 0x03);ESP_LOG_BUFFER_HEX(TAG, spi_rx_buf+2, 4);// 00 00 00 a4
}

逻辑分析仪源文件

逻辑分析仪型号:Kingst LA1010

软件与源文件点击下载

SPI简介与实例分析相关推荐

  1. SSL/TLS 协议简介与实例分析

    作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...

  2. java 字符界面 curses_Linux终端图形库 Curses简介和实例分析

    随着电脑知识的普及, 越来越多的电脑爱好者开始了解和使用Linux..Linux的轻松自由之风给了我们不同的感受.但是我们不能满足于基本的命令和KDE, Gnome等用户界面的操作. 我们要干什么? ...

  3. 【五线谱】还原记号 ( 还原记号使用简介 | 变音记号、还原记号实例分析 )

    文章目录 一.还原记号 二.还原记号实例分析 1.原始音符分析 2.加入变音记号后的音符分析 一.还原记号 如果在 A3 音符前使用了变音记号 , 则默认其它音符也使用该变音记号 , 如果想要取消该变 ...

  4. python线性回归算法简介_Python实现的简单线性回归算法实例分析

    本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > ...

  5. RPC-原理及RPC实例分析

    还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...

  6. 马歇尔·赫伯特:人工智能的前沿技术与实例分析

    来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...

  7. DPDK 跟踪库tracepoint源码实例分析

    DPDK笔记 DPDK 跟踪库tracepoint源码实例分析 RToax 2021年4月 注意: 跟踪库 基于DPDK 20.05 DPDK跟踪库:trace library 1. trace流程源 ...

  8. Python实现主成分分析(PCA)降维:原理及实例分析

    转载文章:Python实现主成分分析(PCA)降维:原理及实例分析 简介 降维是由一些问题带来的: 可以缓解由维度诅咒(高维)带来的问题: 可以用来压缩数据,将损失数据最小化: 可以将高维数据降到低维 ...

  9. wifi快速漫游实例分析

    wifi快速漫游实例分析 公司使用realtek的wifi方案做mesh路由器,这段时间一直在研究这个方案的快速漫游(Fast Transition BSS,简称FT)功能.今天把这段时间的收获记录一 ...

最新文章

  1. ffmpeg 基本用法大全
  2. php {template header},php通过header发送自定义数据
  3. 利用iframe与Response.Flush实现进度展示效果
  4. 在HTML中使用CSS美化网页的三种方法
  5. golang国际化站点
  6. 3DSlicer13:Command Line Interface(CLI)
  7. iOS 消息转发机制
  8. Linux学习:目录操作函数
  9. React开发(230):ant design table固定表头
  10. Xshell 使用数字小键盘进行vim 写入操作.
  11. Cookie、Session、Token
  12. try catch 处理异常太烦人了,我已经不用了
  13. ubuntu18.04-安装-wechat
  14. PLSQL 升级到最新版本 以及 破解注册细则
  15. 试卷自动生成工具使用说明
  16. Android修改PackageInstaller自动安装指定应用,android开发网易新闻
  17. Word表格中文字如何居中?
  18. 110 AddressBook
  19. vue+pdf.js 印章签署完后鼠标滑过显示签章信息
  20. 水星怎么设置网速最快_水星路由器怎么限制别人网速_水星怎么限制wifi网速?-192路由网...

热门文章

  1. 使用Grid制作联系人表格
  2. CodeSoft 6 乱码解决方案
  3. 是什么原因导致OutOfMemoryError?
  4. Linux开发:快速开发游戏的9个关键!
  5. J1939 DM1多包广播报文发送
  6. Arduino 学习笔记 | 单片机控制驱动MAX7219 8*8 LED点阵显示模块
  7. Python学习-飞机大战(1)
  8. 干货:一文看懂网络爬虫实现原理与技术(值得收藏)
  9. 计算机研究生专业全国高校排名
  10. Hadoop整体框架