当前位置: 首页 > web >正文

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.xdnf.cn/news/19876.html

相关文章:

  • Base64编码的作用与应用场景
  • 利用 Java 爬虫获取淘宝商品 SKU 详细信息实战指南
  • 美团龙猫(longcat.AI)编写的利用二分查找优化Excel的sheet.xml指定范围输出C程序
  • 【数学建模学习笔记】时间序列分析:ARIMA
  • Scikit-learn从入门到实践:Scikit-learn入门-安装与基础操作
  • Qwen3-Reranker-0.6B 模型结构
  • Shell脚本一键监控平台到期时间并钉钉告警推送指定人
  • 自动化基本技术原理
  • 嵌入式解谜日志-网络编程
  • Kafka面试精讲 Day 5:Broker集群管理与协调机制
  • 基于SQLite的智能图片压缩存储系统:代码解析与实战应用
  • QuickUp-Ubuntu
  • FPGA AD7606串行驱动与并行驱动
  • 【Flask + Vue3 前后端分离管理系统】
  • 友思特案例 | 食品行业视觉检测案例集锦(三)
  • 利用 Python 获取微店商品关键词搜索 API 接口数据的实战指南
  • 利用飞算Java打造电商系统核心功能模块的设计与实现
  • 硬件开发(1)—单片机(1)
  • atomic常用类方法
  • VR智慧楼宇技术:打造智能办公空间的卓越方案​
  • 深圳外贸峰会究竟藏着啥秘密?能让外贸人收获满满?
  • RHEL9源码编译MySQL8.0.40
  • 图像加密安全传输--设备端视频流加密,手机端视频流解密,使用ChaCha20-Poly1305 进行系统分析
  • 爬虫-----最全的爬虫库介绍(一篇文章让你成为爬虫大佬,爬你想爬)
  • windows系统离线安装Ollama、创建模型(不使用docker)、coze调用
  • Linux为什么不是RTOS
  • 【Vue】前端 vue2项目搭建入门级(一)
  • IoT Power软件 -- 每次开启强制升级解决方法
  • Pandas Python数据处理库:高效处理Excel/CSV数据,支持分组统计与Matplotlib可视化联动
  • 嵌入式C语言之链表冒泡排序