SPI简介与实例分析
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简介与实例分析相关推荐
- SSL/TLS 协议简介与实例分析
作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...
- java 字符界面 curses_Linux终端图形库 Curses简介和实例分析
随着电脑知识的普及, 越来越多的电脑爱好者开始了解和使用Linux..Linux的轻松自由之风给了我们不同的感受.但是我们不能满足于基本的命令和KDE, Gnome等用户界面的操作. 我们要干什么? ...
- 【五线谱】还原记号 ( 还原记号使用简介 | 变音记号、还原记号实例分析 )
文章目录 一.还原记号 二.还原记号实例分析 1.原始音符分析 2.加入变音记号后的音符分析 一.还原记号 如果在 A3 音符前使用了变音记号 , 则默认其它音符也使用该变音记号 , 如果想要取消该变 ...
- python线性回归算法简介_Python实现的简单线性回归算法实例分析
本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > ...
- RPC-原理及RPC实例分析
还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...
- 马歇尔·赫伯特:人工智能的前沿技术与实例分析
来源:中国人工智能学会 2017年12月11日,国际知名机器人专家.美国卡耐基梅隆大学机器人研究所所长马歇尔·赫伯特(Martial Hebert)教授和首席科学家大卫·伯恩(David Bourne ...
- DPDK 跟踪库tracepoint源码实例分析
DPDK笔记 DPDK 跟踪库tracepoint源码实例分析 RToax 2021年4月 注意: 跟踪库 基于DPDK 20.05 DPDK跟踪库:trace library 1. trace流程源 ...
- Python实现主成分分析(PCA)降维:原理及实例分析
转载文章:Python实现主成分分析(PCA)降维:原理及实例分析 简介 降维是由一些问题带来的: 可以缓解由维度诅咒(高维)带来的问题: 可以用来压缩数据,将损失数据最小化: 可以将高维数据降到低维 ...
- wifi快速漫游实例分析
wifi快速漫游实例分析 公司使用realtek的wifi方案做mesh路由器,这段时间一直在研究这个方案的快速漫游(Fast Transition BSS,简称FT)功能.今天把这段时间的收获记录一 ...
最新文章
- ffmpeg 基本用法大全
- php {template header},php通过header发送自定义数据
- 利用iframe与Response.Flush实现进度展示效果
- 在HTML中使用CSS美化网页的三种方法
- golang国际化站点
- 3DSlicer13:Command Line Interface(CLI)
- iOS 消息转发机制
- Linux学习:目录操作函数
- React开发(230):ant design table固定表头
- Xshell 使用数字小键盘进行vim 写入操作.
- Cookie、Session、Token
- try catch 处理异常太烦人了,我已经不用了
- ubuntu18.04-安装-wechat
- PLSQL 升级到最新版本 以及 破解注册细则
- 试卷自动生成工具使用说明
- Android修改PackageInstaller自动安装指定应用,android开发网易新闻
- Word表格中文字如何居中?
- 110 AddressBook
- vue+pdf.js 印章签署完后鼠标滑过显示签章信息
- 水星怎么设置网速最快_水星路由器怎么限制别人网速_水星怎么限制wifi网速?-192路由网...