You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SPI通信中MPSSE库的SPI_ReadWrite函数功能是什么?

SPI函数的信号层差异与SPI_ReadWrite的价值

SPI本质是同步全双工总线,硬件层面每个时钟周期必然同时完成1位数据的输出(MOSI线)和输入(MISO线),你提到的三个库函数只是对这个固有硬件行为做了不同的上层封装,信号层面的差异如下:

  • SPI_Write:仅处理用户传入的发送数据,将数据逐位输出到MOSI线,同时期MISO线上输入的所有数据会被库直接丢弃,不会返回给调用方。信号层面依然存在MISO输入动作,只是上层未做保留。
  • SPI_Read:仅返回MISO线上的输入数据,调用时库会自动在MOSI线上输出固定的占位数据(通常是0x00或0xFF,由库的默认配置决定),该占位数据不会暴露给调用方。信号层面依然存在MOSI输出动作,只是输出内容为无意义的填充值。
  • SPI_ReadWrite:同时保留收发两侧的数据,将调用方传入的发送缓存内容输出到MOSI,同时将相同时钟周期内MISO的输入数据写入接收缓存返回给调用方,无数据丢弃或填充动作。

SPI_ReadWrite的存在主要有两个核心意义:

  1. 满足特定从设备的协议要求
    很多SPI从设备的通信协议本身要求全双工交互,比如SPI接口的ADC/DAC,你在MOSI上输出DAC配置值的同时,MISO就会同步返回ADC的采样结果;再比如部分Flash、传感器器件,你发送读指令、地址的同时,MISO会同步返回器件状态位,这类场景下单独的读/写函数根本无法满足协议要求,必须用同时收发的接口。
  2. 大幅提升通信效率
    就算是逻辑上需要“先写指令/地址、再读数据”的串行场景,用SPI_ReadWrite也可以合并为单次传输:你可以把要发送的指令、地址和读阶段需要的占位数据拼成一个连续的发送序列,单次调用SPI_ReadWrite,之后丢弃接收缓存中对应发送阶段的无效数据,保留后续的读数据即可。这种方式只需要拉一次片选、走一次USB传输(你使用的MPSSE是USB转SPI方案),比拆分调用SPI_Write+SPI_Read少了一次USB交互和片选切换开销,延迟更低、吞吐量更高。

内容的提问来源于stack exchange,提问作者yeuop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:54:03