SPI片选踩坑实录(硬件片选和软件片选)

        SPI(Serial Peripheral Interface,串行外设接口)的片选信号(Chip Select,简称 CS 或 SS,即 Slave Select)是 SPI 通信中用于选择从设备的关键控制信号,其作用是在多从设备的 SPI 总线上,指定当前与主设备进行通信的从设备。

片选信号的基本原理

  • SPI 总线通常包含 4 根线:SCLK(时钟线)、MOSI(主发从收数据线)、MISO(主收从发数据线)和 CS(片选线)。
  • 主设备通过拉低某个从设备的 CS 信号,来选中该从设备进行通信;未被选中的从设备,其 CS 信号为高电平,会忽略总线上的通信数据。
  • 在通信过程中,被选中的从设备会响应主设备的指令,而其他从设备则处于空闲状态。

片选信号的有效电平

  • 片选信号通常是低电平有效,即当 CS 信号为低电平时,从设备被选中;当 CS 信号为高电平时,从设备未被选中。

片选信号的控制方式

  1. 硬件片选(芯片控制)

    由 SPI  Master自动生成和控制片选信号,主设备在发送数据时,硬件会自动拉低对应从设备的 CS 信号,数据发送完成后自动拉高。
  2. 软件片选(GPIO 控制)

    将片选信号连接到主设备的 GPIO 引脚,通过软件编程(如设置 GPIO 输出高低电平)来控制片选信号的状态。

硬件片选和软件片选的选择问题实测:

        以前用官方SDK移植开发通常直接用硬件片选,把管脚复用成芯片内部的CS信号,用起来很方便,但是后面调试了一些SPI驱动设备后发现,用GPIO控制可能是更好的选择,主要是发现有些从设备的时序不允许你中途拉高CS,比如以下图片就要求在特定模式下持续拉低CS信号:

        如果没有注意对多个字节分开读取,就会导致时序出现问题从而读上来顺序有问题。

        还有一个例子是对于有些从设备芯片,只能每次从它特定的寄存器读数据(比如四字节data寄存器这种),当数据量大的时候没办法用驱动接口一次性读取完,这时候如果是硬件片选必然会出现多次CS拉高拉低,就会导致数据异常。

        所以配置成GPIO整体来说更灵活可控,在多设备情况下也能实现更好的控制,代价就是需要频繁操作GPIO会带来一定资源开销。

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

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

相关文章

从理论到RTL,实战实现高可靠ECC校验(附完整开源代码/脚本)(3) RTL实现实战

第二部分:ECC (30, 24)RTL实现实战 - 精雕细琢的硬件卫士 理论是基石,实现是关键。本部分将 手把手构建参数化、可综合、高可靠的ECC编解码器 。本部分将以MIPI 协议中Packet Header 用到的ECC(30,24) 为例…

揭密设计模式:像搭乐高一样构建功能的装饰器模式

揭密设计模式:像搭乐高一样构建功能的装饰器模式 在软件开发中,我们常常会遇到一个问题:如何给一个对象动态地添加新功能,同时又不想修改它的代码?如果直接在原有类上修修补补,代码会变得臃肿复杂&#xff…

【Vue】前端 vue2项目搭建入门级(二)

本文不同于【Vue】前端 vue2项目搭建入门级(一),本文创建vue2项目方式是一键创建vue2 项目,不需要自己配置。1.cmd进入根目录,输入vue create project(vue create 项目名)创建一个project的项目…

基于SQLite索引的智能图片压缩存储系统设计与实现

摘要 本文介绍一种基于SQLite索引的智能图片压缩存储系统,通过融合图像质量压缩与数据压缩技术,实现60-80%的压缩率,较传统方法压缩效率提升4-5倍。系统采用“大文件存储索引数据库”架构,针对性解决海量图片数据迁移与存储中的核…

【一张图看懂Kafka消息队列架构】

一张图看懂Kafka消息队列架构Kafka架构全景图ApacheKafka作为当今最流行的分布式消息队列系统,其架构设计精巧而高效。通过一张典型的Kafka架构图,我们可以清晰地看到几个核心组件:生产者(Producer)、消费者(Consumer)、主题(Topic)、分区(Pa…

计算机三级嵌入式填空题——真题库(24)原题附答案速记

1.表征数字音频每秒钟数据量的参数称为波形声音的__码率__。CD音乐的声音信号的采样率约为44kHz,量化位数为16位,采用双声道,则该参数的值为__1408__kb/s。(码率取样频率*量化位数*声道数44kHz*16*21408kb/s)2.利用载波…

Gradle vs. Maven,Java 构建工具该用哪个?

Java构建工具的甜咸粽子之争,就是 Gradle 和 Maven 该用哪个? 随心所欲的手动挡 vs. 稳如老狗的自动挡 Maven用的是pom.xml。很多人一听XML就头大,觉得又臭又长。但换个角度想,XML的缺点正是它最大的优点:死板、规范、…

将Markdown文档输出成Word格式

大家好!今天想和大家分享一个技术文档格式转换的小故事。有个朋友在软件行业从事文档工作,她们的手册是用Markdown编写的,使用Facebook的Docsaurus框架,在线浏览很方便,但输出Word格式却很不方便,问我是否有…

COMSOL基于Voronoi毛细管及多边形骨料ITZ的微介观混凝土水分扩散模型

本案例是通过COMSOL对论文An innovative method for mesoscale modelling of moisture diffusion in concrete(https://doi.org/10.1016/j.cemconcomp.2024.105836)中Voronoi毛细管、多边形骨料、ITZ、水泥浆体多相材料的几何模型复现。 其中论文中的混…

机器学习和高性能计算中常用的几种浮点数精度

浮点数 (Floating-Point Number) 是一种在计算机中表示带有小数部分的数字的方式。它通过科学记数法类似的方式(尾数 基数 ^ 指数)来近似表示实数。浮点数的精度决定了它可以表示的数值范围以及数值之间的精细程度。 常见的浮点数精度包括:F…

开源大语言模型(Qwen3)

Qwen3是阿里巴巴达摩院于2025年4月29日发布的新一代开源大语言模型,属于通义千问系列的最新成员。其核心突破在于首创混合推理架构,将人类认知科学中的“快思考”与“慢思考”机制融入模型设计,实现了复杂任务处理与高效响应的平衡。 一、技术…

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制):https://www.bilibili.com/video/BV1B5PjeGETQ/ 备注: 1.本地离线卡密采用最安全的非对称加解密技术,设备id采用最安全多重混合加密不可逆技术生成,验证阶段需要网络时间,内置防抓…

【三维渲染技术讨论】Blender输出的三维文件里的透明贴图在Isaac Sim里会丢失, 是什么原因?

Blender导出的三维文件在Isaac Sim中丢失透明贴图,通常与文件格式兼容性、材质属性映射、导出设置或Isaac Sim材质解析逻辑有关。以下是具体原因分析和解决方法: 一、可能的原因文件格式对透明信息的支持差异 Blender常用的导出格式(如FBX、G…

Java线程池深度解析:从原理到实战的完整指南

Java线程池深度解析:从原理到实战的完整指南 🌟 你好,我是 励志成为糕手 ! 🌌 在代码的宇宙中,我是那个追逐优雅与性能的星际旅人。 ✨ 每一行代码都是我种下的星光,在逻辑的土壤里生长成璀璨的…

机器学习——模型架构

有监督学习 线性模型 多元线性回归:预测连续的数值(如房价、销量)。 逻辑回归:解决二分类问题(如判断邮件是否是垃圾邮件),输出概率。 非线性模型 决策树:通过一系列if-then规则进行…

深入理解Kafka事务

一 kafka事务介绍1.1 Kafka事务的作用Exactly-Once Semantics (EOS):在“消费 → 处理 → 生产”的流式链路里避免重复写与重复读带来的副作用,确保“处理一次且仅一次”的可见效果。跨分区 / 跨 Topic 原子性:将一次处理内写入的多分区多主题…

RabbitMinQ(模拟实现消息队列项目)

目录 一.消息队列背景 二.需求分析 核心概念: BrokerServer: BrokerServer的核心API: 交换机Exchange: 持久化: 网络通信: 消息应答: 三、模块划分 四、创建项目 五、创建核心类 Exchange: MSGQueue: Binding: Message: 六.…

如何构建StarRocks官方文档

不知道是网络问题还是官网问题,StarRocks文档经常出现卡顿的情况,曾经构建过Flink文档, 所以也想尝试自己构建一个StarRocks的本地官方文档 断断续续折腾了好几天,就不废话了,直接上实际步骤 1. 环境 1.1 Linux环境 …

堡垒机(跳板机)入门指南:构建更安全的多服务器运维架构

随着你的业务不断扩张,你云上服务器的数量,是不是也从一台,变成了三台、五台、甚至一个由几十台机器组成的庞大集群?你像一个尽职的“国王”,为你王国的每一座“城池”(每一台服务器)&#xff0…

(链表)Leetcode206链表反转+Leetcode6删除链表的倒数第N个结点+虚拟头节点使用

虚拟头结点的作用是:简化插入/删除逻辑方便返回头节点减少边界错误 Leetcode206链表反转 206. 反转链表 - 力扣(LeetCode) 头插法 # Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextN…