Skip to main content
与连接到 Lager Box 的设备进行 SPI(串行外设接口)数据传输。 SPI 是一种同步串行协议,使用四根线:SCLK(时钟)、MOSI(主出从入)、 MISO(主入从出)和 CS(片选)。

语法

参数

选项

不带子命令调用时,列出 Box 上的 SPI Net(或显示指定 Net 的配置)。

子命令

config

配置 SPI 总线参数。这些设置会在后续命令中保持有效。
SPI 模式: 示例:

transfer

进行一次全双工 SPI 传输:在发送数据的同时接收响应。如果提供的数据短于 NUM_WORDS,剩余的字会用填充值补齐;如果更长,数据会被截断。
示例:

read

从 SPI 从设备读取数据。它在时钟同步读入响应的同时发送填充字节。
示例:

write

向 SPI 从设备写入数据。它执行一次全双工传输,并显示收到的响应。
示例:

十六进制数据格式

数据参数接受多种十六进制写法。解析方式取决于字长: 8 位字长(默认): 16 位或 32 位字长: 数值会按配置的字长范围进行校验。

填充值格式

--fill 选项接受十六进制或十进制值:

频率格式

时钟频率接受数值,并可带可选后缀:

受支持的硬件

LabJack T7 时钟: 请求 800 kHz 及以上时,实际约以 800 kHz 运行。在约 1 kHz 到 800 kHz 之间的大多数速率上,T7 固件会让多字节传输失败。因此对于多字节传输,驱动程序会把该范围内的请求改为约 1 kHz 运行,并打印一次警告。单字节传输,以及约 1 kHz 及以下的请求,使用您请求的速率。

LabJack U3

U3 通过它自己的固件命令而不是 LJM 来运行 SPI。在 U3 上使用 SPI 需要 U3 硬件版本 1.21 或更高。 引脚: 默认通道 FIO4-FIO7 按 CS、CLK、MISO、MOSI 的顺序分配引脚。这个顺序与 T7 不同,T7 是 CS、CLK、MOSI、MISO。若要使用其他引脚,请用 lager nets add 配合 --cs--sck--mosi--miso 选项创建 Net。 FIO0-FIO3 不能承载 SPI。EIO 和 CIO 线位于 U3 的 DB15 连接器上。 限制:
  • 一次传输最多 50 字节:8 位字长为 50 个字,16 位为 25 个字,32 位为 12 个字。
  • 时钟约在 5.4 kHz 至 71.4 kHz 之间运行,并且 Box 绝不会超过您请求的速率。超出该范围的请求会被钳位。
  • config 打印硬件实际使用的速率。当该速率与请求不同时,它会在括号中给出请求值:
没有保存频率的 Net 会以最高速率运行。在这样的 Net 上,config 显示默认请求值 (requested 1000000Hz)。CLI 不会为被钳位的时钟给出警告,因此请阅读 config 输出中的速率。 片选: U3 固件在每次传输时把 CS 拉低,并在结束时释放它。它没有极性控制,也没有保持控制。Box 会拒绝 --cs-active high。在 auto CS 模式下,Box 也会拒绝 --keep-cs 对于高电平有效的设备,或者需要跨多次传输保持 CS 时,请创建不含 CS 的 SPI Net,并用一个 gpio Net 驱动 CS。不含 CS 的 Net 使用 manual CS 模式。

Net 配置

SPI Net 配置在 Box 的 saved_nets.json 中。Net 记录示例:
Aardvark 适配器:

输出格式


示例


故障排除

设备没有响应

  • 检查 MOSI、MISO、SCLK 和 CS 的接线
  • 确认 SPI 模式与设备数据手册一致
  • 确认 CS 极性(大多数设备为 --cs-active low
  • 可以尝试用 --frequency 100k 降低频率

数据错乱

  • 确认 SPI 模式(CPOL/CPHA)与设备一致
  • 检查位序(高位在前还是低位在前)
  • 确认字长与设备协议一致

CS 引脚不起作用(LabJack T7)

  • auto CS 模式下,T7 固件会为每次传输置位并释放 CS
  • 使用 --keep-cs 时,驱动程序改为用 GPIO 写来驱动 CS
  • 确认 Net 配置中的 cs_pin 与您的接线一致

被拒绝的选项(LabJack U3)

  • U3 上会拒绝 --cs-active high。请使用不含 CS 的 Net,再用一个 gpio Net 控制 CS。
  • 在 U3 的 auto CS 模式下会拒绝 --keep-cs。请使用同样的方法。
  • 超过 50 字节的传输会被拒绝。请把它拆成更小的传输。

说明

  • 默认 SPI Net 可以用 lager defaults add --spi-net NETNAME 设置
  • 请求 800 kHz 及以上时,LabJack T7 约以 800 kHz 运行。请求在约 1 kHz 到 800 kHz 之间的多字节传输,约以 1 kHz 运行
  • LabJack U3 约在 5.4 kHz 至 71.4 kHz 之间运行,config 会打印硬件实际使用的速率
  • SPI 是全双工的:数据总是同时发送和接收
  • 需要跨多次传输保持 CS 有效时,请使用 --keep-cs
  • 通过 config 设置的配置会在后续的 transfer/read/write 命令中保持有效

参见

  • I2C — I2C 总线通信(另一种常见的串行协议)
  • Python SPI API — 在 Python 脚本中自动进行 SPI 操作
  • 术语表 — SPI、I2C 及其他术语的定义