语法
参数
选项
不带子命令调用时,列出 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打印硬件实际使用的速率。当该速率与请求不同时,它会在括号中给出请求值:
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 记录示例:
输出格式
示例
故障排除
设备没有响应
- 检查 MOSI、MISO、SCLK 和 CS 的接线
- 确认 SPI 模式与设备数据手册一致
- 确认 CS 极性(大多数设备为
--cs-active low) - 可以尝试用
--frequency 100k降低频率
数据错乱
- 确认 SPI 模式(CPOL/CPHA)与设备一致
- 检查位序(高位在前还是低位在前)
- 确认字长与设备协议一致
CS 引脚不起作用(LabJack T7)
- 在
autoCS 模式下,T7 固件会为每次传输置位并释放 CS - 使用
--keep-cs时,驱动程序改为用 GPIO 写来驱动 CS - 确认 Net 配置中的
cs_pin与您的接线一致
被拒绝的选项(LabJack U3)
- U3 上会拒绝
--cs-active high。请使用不含 CS 的 Net,再用一个gpioNet 控制 CS。 - 在 U3 的
autoCS 模式下会拒绝--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 及其他术语的定义

