公告
  
欢迎回来!目前功能升级完毕,
本站限时免费查看资料,请尽快注册账号,后续将限制游客访问~

朕已阅

首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

SPI(串行外设接口) 树莓派Pico RP2040【入门级教程】

  7676 
 0
 1
RASPI   ydxhuo.com 

Image



一:SPI介绍

SPI(Serial Peripheral Interface,串行外设接口)是一种高速、全双工、同步的通信协议,常用于微控制器与外围设备(如传感器、显示屏、ADC/DAC 等)之间的短距离通信。


1.SPI 采用主从(Master-Slave)架构,特点包括:


高速传输速率(通常可达几 Mbps)

全双工通信(可同时发送和接收数据)

同步通信(使用时钟信号同步数据传输)

支持多个从设备


2.SPI 工作逻辑:

SPI 通信主要通过 4 根线实现:

SCLK(Serial Clock):时钟线,由主机产生,用于同步数据传输

MOSI(Master Out Slave In):主机输出,从机输入

MISO(Master In Slave Out):主机输入,从机输出

CS/SS(Chip Select/Slave Select):片选线,用于选择通信的从设备(低电平有效)


3.SPI 工作流程:

主机通过拉低某个从设备的 CS 线选中该设备

主机产生 SCLK 时钟信号

数据在时钟信号的同步下,通过 MOSI 和 MISO 线同时传输

每个时钟周期传输一位数据

通信结束后,主机拉高 CS 线释放该从设备


树莓派 Pico的SPI 有 2 个硬件 SPI 控制器:SPI0 和 SPI1,默认引脚分配如下:其中CS 引脚可任意选择 GPIO 引脚。

spi控制器SCK引脚MOSI引脚MISO引脚
SPI0SPI2GP3GP4
SPI1GP10GP11GP12


二:示例程序

以下示例展示如何使用树莓派 Pico 的 SPI 接口进行通信,包含主机和从机两种模式的代码。

from machine import Pin, SPI
import time

# 初始化SPI0为主机模式
spi = SPI(0,
          baudrate=1000000,  # 1MHz
          polarity=0,        # 时钟空闲时为低电平
          phase=0,           # 数据在时钟上升沿采样
          sck=Pin(2),        # SCK引脚
          mosi=Pin(3),       # MOSI引脚
          miso=Pin(4))       # MISO引脚

# 初始化CS引脚
cs = Pin(5, Pin.OUT, value=1)  # 初始化为高电平(未选中)

def send_receive_data(data):
    cs.value(0)  # 拉低CS,选中从设备
    time.sleep_us(10)  # 短暂延时
    
    # 创建接收缓冲区(与发送数据长度相同)
    rx_data = bytearray(len(data))
    
    # 发送并接收数据
    spi.write_readinto(data, rx_data)
    
    time.sleep_us(10)
    cs.value(1)  # 拉高CS,释放从设备
    return rx_data

# 主循环
while True:
    # 发送数据
    tx_data = bytearray([0x01, 0x02, 0x03, 0x04])
    rx_data = send_receive_data(tx_data)
    
    print(f"发送: {list(tx_data)}")
    print(f"接收: {list(rx_data)}")
    
    time.sleep(1)


1.代码说明:

主机模式代码(spi_master.py):

初始化 SPI0 为主机模式,设置波特率为 1MHz

配置 SCLK、MOSI、MISO 和 CS 引脚

send_receive_data函数实现:拉低 CS 选中设备、发送数据并接收响应、最后释放 CS

主循环中周期性发送数据并打印收发内容

从机模式代码(spi_slave.py):

初始化 SPI0 为从机模式,参数需与主机匹配

监听 CS 引脚状态,当被选中时进行数据收发

接收主机数据的同时发送预设的响应数据

简单修改响应数据,以便观察通信效果

2.测试方法:

准备两块树莓派 Pico 板

分别将主机代码和从机代码上传到两块 Pico

按如下方式连接线路:

主机 SCLK(GP2)→ 从机 SCLK(GP2)

主机 MOSI(GP3)→ 从机 MOSI(GP3)

主机 MISO(GP4)→ 从机 MISO(GP4)

主机 CS(GP5)→ 从机 CS(GP5)

两块 Pico 共地(GND 相连)

分别给两块 Pico 上电,通过串口监视器观察通信结果

3.注意事项:

主从设备的 SPI 参数(波特率、极性、相位)必须一致

通信距离不宜过长,通常在几米以内

多从机情况下,每个从机需要独立的 CS 线

高速通信时可能需要考虑线路阻抗匹配

通过 SPI 协议,树莓派 Pico 可以高效地与各种外设进行通信,适用于需要高速数据传输的场景。


标签:
作者签名:    楼主  2025-08-25 14:47:04
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.216.47 , 2026-01-27 14:33:48
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(1) 分享
分享

请保存二维码或复制链接进行分享

取消
已有0次打赏