安泰电子世界网 首页 Ardunio Raspberry Pi 硬件(十三)

Raspberry Pi 硬件(十三)

2024-11-5 17:06 | 发布者: txc | 查看: 15 | 评论: 0

简介:Raspberry Pi 硬件
SPI3 (BCM2711 only)
SPI功能接头引脚Broadcom 引脚名称Broadcom引脚功能
MOSI03GPIO02SPI3_MOSI
MISO28GPIO01SPI3_MISO
SCLK05GPIO03SPI3_SCLK
CE027GPIO00SPI3_CE0_N
CE118GPIO24SPI3_CE1_N
SPI4 (BCM2711 only)
SPI 功能接头引脚Broadcom 引脚名称Broadcom引脚功能
MOSI31GPIO06SPI4_MOSI
MISO29GPIO05SPI4_MISO
SCLK26GPIO07SPI4_SCLK
CE007GPIO04SPI4_CE0_N
CE122GPIO25SPI4_CE1_N
SPI5 (BCM2711 only)
SPI功能接头引脚Broadcom 引脚名称Broadcom引脚功能
MOSI08GPIO14SPI5_MOSI
MISO33GPIO13SPI5_MISO
SCLK10GPIO15SPI5_SCLK
CE032GPIO12SPI5_CE0_N
CE137GPIO26SPI5_CE1_N
SPI6 (BCM2711 only)
SPI功能接头引脚Broadcom 引脚名称Broadcom引脚功能
MOSI38GPIO20SPI6_MOSI
MISO35GPIO19SPI6_MISO
SCLK40GPIO21SPI6_SCLK
CE012GPIO18SPI6_CE0_N
CE113GPIO27SPI6_CE1_N

主模式

信号名称缩写

SCLK - serial clock
CE   - chip enable (often called chip select)
MOSI - master out slave in
MISO - master in slave out
MOMI - master out master in
标准模式

在标准SPI模式下,外设实现标准三线串行协议(SCLK、MOSI和MISO)。

双向模式

在双向SPI模式下,实现了相同的SPI标准,只是单线用于数据(MOMI),而不是标准模式下使用的两根线(MISO和MOSI)。在此模式下,MOSI引脚用作MOMI引脚。

低速串行接口 (LoSSI) 模式

LoSSI 标准允许向外围设备 (LCD) 发出命令,并在外围设备之间传输数据。LoSSI 命令和参数的长度为 8 位,但使用额外的位来指示字节是命令还是参数/数据。对于数据,此额外位设置为高位,对于命令,此额外位设置为低位。生成的 9 位值序列化到输出。LoSSI 通常与兼容 MIPI DBI 的 C 型 LCD 控制器一起使用。

注意某些命令会触发 SPI 控制器的自动读取,因此此模式不能用作多用途 9 位 SPI。

传输模式

  • 调查

  • 中断

  • DMA型

速度

CLK 寄存器的时钟分频器 (CDIV) 字段设置 SPI 时钟速度:

SCLK = Core Clock / CDIV

如果 CDIV 设置为 0,则除数为 65536。除数必须是 2 的倍数,奇数四舍五入。请注意,由于模拟电气问题(上升时间、驱动强度等),并非所有可能的时钟速率都可用。
有关详细信息,请参阅 Linux 驱动程序部分。

芯片选择

在 DMA 模式下运行时,与 CS 线的自动断言和取消断言相关的设置和保持时间如下:

  • CS 线将在传输第一个字节的 msb 之前至少置位三个内核时钟周期。

  • CS 线将在不早于最后一个时钟脉冲后沿后的一个内核时钟周期内被取消置位。

SPI软件

Linux 驱动程序

默认的 Linux 驱动程序是 spi-bcm2835。
默认情况下,SPI0 处于禁用状态。要启用它,请使用 raspi-config,或确保 /boot/firmware/config.txt 中没有注释掉 dtparam=spi=on 行。默认情况下,它使用两条芯片选择线,但可以使用 dtoverlay=spi0-1cs 将其减少到一条。还有 dtoverlay=spi0-2cs;在没有任何参数的情况下,它等效于 dtparam=spi=on。
要使能 SPI1,您可以使用 1、2 或 3 条芯片选择线,并在每种情况下添加:

dtoverlay=spi1-1cs  #1 chip select
dtoverlay=spi1-2cs  #2 chip select
dtoverlay=spi1-3cs  #3 chip select

…​添加到 /boot/firmware/config.txt 文件。SPI2、SPI3、SPI4、SPI5 和 SPI6 也存在类似的叠加。
由于某些限制,驱动程序不使用硬件芯片选择行。相反,它可以使用任意数量的GPIO作为软件/GPIO芯片的选择。这意味着您可以自由选择任何备用 GPIO 作为 CS 线路,并且所有这些 SPI 覆盖都包含该控件 - 有关详细信息,请参阅 /boot/firmware/overlays/README,或运行(例如)dtoverlay -h spi0-2cs (dtoverlay -a | grep spi 可能有助于列出它们)。

Speed

该驱动程序支持所有速度,甚至是内核时钟的整数除数,尽管如上所述,由于GPIO和连接设备的限制,并非所有这些速度都支持数据传输。根据经验,任何超过 50MHz 的频率都不太可能起作用,但您的里程可能会有所不同。

支持的模式位
SPI_CPOL    - clock polarity
SPI_CPHA    - clock phase
SPI_CS_HIGH - chip select active high
SPI_NO_CS   - 1 device per bus, no Chip select
SPI_3WIRE   - bidirectional mode, data in and out pin shared

双向模式,也称为 3 线模式,由 spi-bcm2835 内核模块支持。请注意,在此模式下,spi_transfer结构的 tx 或 rx 字段必须为 NULL 指针,因为只能进行半双工通信。否则,传输将失败。spidev_test.c 源代码没有正确考虑这一点,因此在 3 线模式下根本无法工作。

支持的每字位数
  • 8 - 正常

  • 9 - 使用 LoSSI 模式支持此功能

传输模式

所有 SPI 总线都支持中断模式。SPI0 和 SPI3-6 也支持 DMA 传输。

SPI 驱动程序延迟

线程讨论延迟问题。

spidev

spidev 为各个 SPI CS 线路提供了基于 ioctl 的用户空间接口。设备树用于指示 CS 线是由内核驱动程序模块驱动还是由 spidev 代表用户管理;不可能同时做这两件事。请注意,Raspberry Pi 自己的内核对使用 Device Tree 来启用 spidev 更加宽松 - 上游内核会打印有关此类使用的警告,并最终可能会完全阻止它。

使用 C 语言中的 spidev

Linux 文档中有一个环回测试程序,可以用作起点。请参阅“疑难解答”部分。

使用 Python 中的 spidev

有几个 Python 库提供对 spidev 的访问,包括 spidev (pip install spidev - see https://pypi.org/project/spidev/) 和 SPI-Py (https://github.com/lthiery/SPI-Py)。

从 shell 中使用 spidev,例如 bash
# Write binary 1, 2 and 3
echo -ne "\x01\x02\x03" > /dev/spidev0.0

其他 SPI 库

还有其他用户空间库通过直接操作硬件来提供 SPI 控制:不建议这样做。

故障排除

环回测试

这可用于测试 SPI 发送和接收。在 MOSI 和 MISO 之间放一根电线。它不测试 CE0 和 CE1。

wget https://raw.githubusercontent.com/raspberrypi/linux/rpi-6.1.y/tools/spi/spidev_test.c
gcc -o spidev_test spidev_test.c
./spidev_test -D /dev/spidev0.0
spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)

FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

上面的一些内容是从 elinux SPI 页面复制的,该页面也借用了这里。两者都受 CC-SA 许可证的保护。

通用串行总线 (USB)

一般来说,Linux 支持的每个设备都可以与 Raspberry Pi 一起使用,尽管 Raspberry Pi 4 之前的型号存在一些限制。

最大功率输出

与所有计算机一样,Raspberry Pi 上的 USB 端口提供有限的电源。USB 设备的问题通常是由电源问题引起的。要排除电量不足是问题的原因,请使用有源集线器将 USB 设备连接到 Raspberry Pi。

USB 端口的最大功率输出
树莓派零,1每个端口 500mA1
树莓派 2、3、4所有端口总电流为 1200mA
树莓派 5使用3A电源时为600mA,使用5A电源时为1600mA
  1. 对于原始的 Raspberry Pi 1 型号 B,每个端口的限制为 100mA。

树莓派 5

Raspberry Pi 5 需要一个高质量的 USB-C 电源,能够在 +5V (15W) 下提供 3A 的电流才能启动。但是,使用这种电源会限制对外设的电流消耗。如果您使用的电源在首次启动时无法在 +5V 下提供 5A 电流,操作系统将警告您外设的电流消耗将限制为 600mA。
对于希望驱动硬盘驱动器和 SSD 等高功率外围设备,同时为峰值工作负载留出余量的用户,应使用能够提供 +5V (25W) 5A 电流的 USB-PD 电源。如果 Raspberry Pi 5 固件检测到这样的电源,它会将外设的 USB 电流限制增加到 1.6A,为下游 USB 设备提供 5W 的额外功率,以及 5W 的额外板载功率预算。

注意电源预算在 USB 端口和风扇接针之间共享。

树莓派 4

Raspberry Pi 4 提供两个 USB 3.0 端口和两个 USB 2.0 端口,它们连接到 VL805 USB 控制器。所有四个端口上的 USB 2.0 线路都连接到 VL805 中的单个 USB 2.0 集线器。这会将 USB 1.1 和 USB 2.0 设备的总可用带宽限制为单个 USB 2.0 端口的带宽。
在 Raspberry Pi 4 上,以前型号上使用的 USB 控制器位于 USB Type C 端口上,默认情况下处于禁用状态。

Raspberry Pi Zero,1、2 和 3

Raspberry Pi 1 Model B+、Raspberry Pi 2 和 Raspberry Pi 3 板提供四个 USB 2.0 端口。Raspberry Pi Zero板有一个微型USB On-the-Go(OTG)端口。
Raspberry Pi 4 之前型号上的 USB 控制器仅对某些设备提供基本级别的支持,这带来了更高的软件处理开销。它还仅支持一个根 USB 端口:来自连接设备的所有流量都汇集到这条总线上,该总线以 480Mbps 的最大速度运行。
USB 2.0 规范定义了三种设备速度 - 低速、全速和高速。大多数鼠标和键盘都是低速的,大多数 USB 声音设备是全速的,大多数视频设备(网络摄像头或视频捕获)是高速的。
通常,将多个高速 USB 设备连接到 Raspberry Pi 没有问题。
与低速和全速设备通信时产生的软件开销意味着同时处于活动状态的低速和全速设备的数量存在限制。连接到 Raspberry Pi 的这些类型的设备中的少量不会造成任何问题。

已知的 USB 问题

与 USB 3.0 集线器的互操作性

USB 3.0 集线器在使用全速或低速设备(包括大多数鼠标和键盘)时存在问题。大多数 USB 3.0 集线器硬件中的一个错误意味着 Raspberry Pi 4 之前的型号无法与连接到 USB 3.0 集线器的全速或低速设备通信。
USB 2.0 高速设备(包括 USB 2.0 集线器)在通过 USB 3.0 集线器连接时可正常运行。
避免将低速或全速设备连接到 USB 3.0 集线器。解决方法是将 USB 2.0 集线器插入 USB 3.0 集线器的下行端口并连接低速设备,或者在 Raspberry Pi 和 USB 3.0 集线器之间使用 USB 2.0 集线器,然后将低速设备插入 USB 2.0 集线器。

USB 1.1 网络摄像头

旧的网络摄像头可能是全速设备。由于这些设备会传输大量数据并产生额外的软件开销,因此无法保证可靠运行。解决方法是尝试以较低的分辨率使用相机。

深奥的 USB 声卡

昂贵的发烧级声卡通常使用大量的 USB 带宽。不能保证使用96kHz/192kHz DAC的可靠工作。解决方法是强制输出流为 CD 质量(44.1kHz/48kHz 16 位)会将流带宽降低到可靠水平。

单个 TT USB 集线器

USB 2.0 和 3.0 集线器具有一种机制,用于与连接到其下游端口的全速或低速设备通信,称为事务转换器 (TT)。此设备缓冲来自主机的高速请求,并以全速或低速将其传输到下游设备。USB 规范允许两种集线器配置:单 TT(所有端口一个 TT)和多 TT(每个端口一个 TT)。由于硬件限制,如果将过多的全速或低速设备插入单个 TT 集线器,则设备的行为可能不可靠。建议使用多 TT 集线器与多个全速和低速设备连接。作为一种解决方法,将全速和低速设备分布在 Raspberry Pi 自己的 USB 端口和单个 TT 集线器之间。

Raspberry Pi 修订代码

每个不同的 Raspberry Pi 模型修订版都有一个唯一的修订版代码。您可以通过运行以下命令来查找 Raspberry Pi 的修订代码:

cat /proc/cpuinfo

最后三行显示了硬件类型、修订代码和 Raspberry Pi 的唯一序列号。例如:

Hardware    : BCM2835
Revision    : a02082
Serial      : 00000000765fc593

注意:所有 Raspberry Pi 计算机都报告了BCM2835,即使是那些具有 BCM2836、BCM2837、BCM2711 和 BCM2712 处理器的计算机也是如此。不应使用此字符串来检测处理器。使用以下信息或 cat /sys/firmware/devicetree/base/model 解码修订版代码。

最新评论

友情链接:

返回顶部