SPI简介与实例分析

news2024/11/17 16:13:46

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

模式CPOLCPHASCK空闲状态采样时刻
000低电平奇数边沿
101低电平偶数边沿
210高电平奇数边沿
311高电平偶数边沿



实例分析

逻辑分析仪图示

已知: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
    };

    // 初始化spi
    ret = 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

软件与源文件点击下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/353486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

看板项目管理使用指南

作为一种项目管理方法,看板涉及创建列出任务详细信息的可视化卡片,并将它们组织到代表生产过程不同阶段的白板列表中。 今天,看板已经从工厂的白板发展到了我们电脑屏幕上的数字看板应用程序形式。现在的看板项目管理方法可帮助团队管理编辑…

CentOS Stream 8配置DNS

1:用CentOS搭建DNS的目的是想解析一台下载服务器,IP地址172.18.0.58,现在是用IP地址方的式访问,想搭建DNS服务器用域名的方式访问。 使用下面的命令查看一下当前系统的Bind版本。 yum info bind 版本是9.11.36.我的CentOS是最小…

KDGK-703S便携式综合校验仪(毫伏发生器)

一、产品简介 KDGK-703S便携式综合校验仪(毫伏发生器)是一种集数显式电压、电流、频率标准信号源、Pt100 铂电阻温度模拟标准信号源、数字式电压、电流、频率测量功能于一体的高精度、高分辨率、多用途的自动化仪表校准仪器。 它具有信号输出和测试功能&…

有关eclipse的使用tips

一、alt/键 会产生单词提示,可以提高编程速度。例如不需要辛辛苦苦的打出:System.out.println();整句,只需要在eclipse中输入syso,然后按住ALT/就会出来System.out.println();在alt键/不管用的情况下,可使用以下方法来…

HDMI AVI InfoFrame

AVI/AUDIO/VSI Infoframe都是HDMI的辅助数据类别,HDMI遵循CEA-861规范,CEA 第八章--CONTROL AND CONFIGURATION 8.2定义了三种InfoFrame。 一个InfoFrame packet载送一个InfoFrame,根据HDMI协议规范,其大小为30字节一个CheckSum。…

关于医院医用医疗隔离电源系统应用案例的分析探讨

【摘要】:介绍该三级医院采用安科瑞医用隔离电源柜,使用落地式安装方式,从而实现将TN系统转化为IT系统,同时监测系统绝缘情况。 【关键词】医用隔离电源柜;IT系统;绝缘情况;中西医结合医院&…

盘点Linux内核网络知识100道题,这篇就够了

计算机网络模型 1、五层因特网协议栈和七层OSI(Open System Interconnections)参考模型分别是什么? 5层:应用层、传输层、网络层、数据链路层、物理层 7层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理…

Gradle安装部署与基础入门详解

【1】Gradle简介 Gradle 是一款Google 推出的基于JVM、通用灵活的项目构建工具,支持Maven,JCenter 多种第三方仓库;支持传递性依赖管理、废弃了繁杂的xml 文件,转而使用简洁的、支持多种语言(例如:java、groovy 等)的build 脚本文…

Delphi 的TZipFile压缩文件自定义(去掉盘符)

关于Delphi中的TZipFile压缩文件,非常方便,该类位于System.Zip单元中,压缩一个目录只需要一条命令TZipFile.ZipDirectoryContents就可以,但是这也有个不方便,就是不能动态增加文件和目录。如果想自定义增加文件或者目录…

【MyBatis】第十篇:mybatis的分页插件---pageHelper

分页无论是那个开发都是常见的使用场景,当然对于分页需要如果自己写的,不过自己写的话可能会需要想到很多: 比如:通过查询sql判断有多少数据,在页面显示共有多少页面。然后每页返回的数据是多少,上一页以及…

Echarts 更改K线图颜色,解释K线图4个数字意义

第019个点击查看专栏目录本示例修改K线度的颜色,方法参考源代码。 这里面讲一下K线图的四个数字,如[20, 34, 10, 38], 第一位:20代表开盘价格, 第二位:34代表闭盘价格, 第三位:10代表最低价&…

buuctf Web 上

buuctf Web 1.[HCTF 2018]WarmUp[HCTF 2018]WarmUp 访问url http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/ 如下 打开靶场后,查看源码即可看到构造url访问获得index.php的源码 http://e00c89a6-d7d6-4a78-a346-614edfb95738.node3.buuoj.cn/in…

Typescript的原始据类型和Any类型

最新的ECMAScript标准定义了8中数据类型: 7种原始类型: BooleanNullUndefinedNumberBigintStringSymbol和 Object 除 Object 以外的所有类型都是不可变的 (值本身无法被改变》。例如,与C语言不同JavaScript 中字符串是不可变的 (译注: 如,Ja…

Unreal Engine05:UE4基本概念

写在前面 主要是介绍一下UE4中的一些常用概念。 参考的博客如下: UE4常用逻辑关系和说明;UE4入门学习4:C编程介绍;UE4中基础的类及其之间的关系;[官方] 虚幻引擎 4 术语;《图解UE4渲染体系》Part 0 引擎基…

记录robosense RS-LIDAR-16使用过程5

本篇记录RS-LIDAR-16录制bag包,并解析bag包为pcd。官网操作基本过了一遍,接下来记录标定。相机、雷达设备在出厂前通常都完成了内参标定工作,若要联合使用多雷达或雷达-相机时,就需要进行外参标定。接下来学习并记录标定。首先找到…

扬帆优配|杠杆资金重仓股曝光,3只科创板股获多路资金青睐

到2月16日,科创板融资余额环比前一日削减1104.16万元,其间,23股融资余额环比添加超千万元,融资净买入居前的有晶科动力、诺诚健华、爱博医疗等。 到2月16日,市场融资余额算计1.48万亿元,较前一交易日削减27…

frp实现内网穿透

文章目录一: frp是什么二: 程序文件结构三、使用步骤四:总结一: frp是什么 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网…

如何使用ArcGIS进行地理配准

1.概述 对于GIS数据而言,坐标信息是灵魂,有了坐标信息之后才能和别的数据结合使用,之前有介绍过矢量数据定义坐标信息的方法,针对栅格图,这里为大家介绍一下通过地理配准增加坐标信息的方法,希望能对你有所…

深圳“托育”放大招!政府出钱帮你带娃啦!

工作忙得不可开交 难以照料孩子的起居 这个带娃难题常常让双职工家庭 感觉到头疼不已 一边是工作,一边是孩子 父母都上班,宝宝谁来带? 未来这个问题将迎刃而解! 因为政府要出钱帮你带娃啦! 近日,深圳市总工…

Computer Graphics From Scratch - Chapter 8

系列文章目录 简介:Computer Graphics From Scratch-《从零开始的计算机图形学》简介 第一章: Computer Graphics From Scratch - Chapter 1 介绍性概念 第二章:Computer Graphics From Scratch - Chapter 2 基本光线追踪 第三章:Computer Gr…