Skip to main content
与连接到 Lager Box 的设备进行全双工 SPI(串行外设接口)通信。

导入

方法

方法参考

Net.get(name, type=NetType.SPI)

按名称获取一个 SPI Net。
参数: 返回: SPI Net 实例

config(mode, bit_order, frequency_hz, word_size, cs_active, cs_mode)

配置 SPI 总线参数。只有显式给出的参数会被修改;省略的参数保留已保存的值。 config() 改变的是正在运行的脚本中的驱动。它不会把这些值写入 saved_nets.json。要把配置保存到 Net 上,请在 CLI 中使用 lager spi NET config

SPI 模式

read(n_words, fill, keep_cs, output_format)

从 SPI 设备读取数据。接收数据的同时发送填充字节(全双工)。
返回: list[int] - 收到的字,以整数表示(当 output_format="list" 时)

read_write(data, keep_cs, output_format)

同时进行全双工的 SPI 读写。在发送数据的同时接收返回数据。
返回: list[int] - 收到的字(长度与发送的数据相同)

transfer(n_words, data, fill, keep_cs, output_format)

进行带自动补齐或截断的 SPI 传输。数据短于 n_words 时,用填充值补齐;长于 n_words 时截断。
返回: list[int] - 收到的字

write(data, keep_cs)

向 SPI 设备写入数据,并丢弃返回数据。这是只写操作的便捷方法。

get_config()

获取该 Net 的原始配置字典。
返回: dict - 完整的 Net 配置,包含名称、角色、仪器和参数

输出格式

output_format 参数决定数据以何种形式返回。十六进制格式会随字长变化:

示例

读取 SPI Flash 的 JEDEC ID

读取 Flash 存储器

用 keep_cs 进行多段事务

处于 auto 片选模式的 LabJack U3 拒绝 keep_cs=True。在 U3 上,请使用下面的手动片选示例。

在 LabJack U3 上手动控制片选

U3 会在每次传输时把片选拉低,并在结束时释放。要在多次传输之间保持片选,或者驱动高电平有效的片选,请使用一个不带片选的 SPI Net,再用一个 GPIO Net 来控制片选。不带片选的 SPI Net 使用 manual 片选模式。

写入 SPI Flash

16 位字模式

受支持的硬件

多通道 FTDI 适配器

FTDI Net 从 Net 记录的 params.interface 取得通道,接受 A-D0-3。请用 lager nets add --interface 设置它。没有 interface 的 Net 使用通道 A,在单通道的 FT232H 上这也是唯一的选择。 SPI 运行在 FTDI 芯片的 MPSSE 引擎上,而在 FT4232H 上只有通道 A 和 B 带有 MPSSE 引擎。对于 SPI Net,lager nets add 会拒绝 C 和 D。手工改成 C 或 D 的 Net 记录会在该 Net 打开时失败,错误信息会指出该通道。 一块芯片上各类 Net 如何分配通道,请参阅 Nets

LabJack U3

  • 在 U3 上使用 SPI 需要 U3 硬件版本 1.21 或更高。
  • 一次传输最多 50 字节:8 位字长时为 50 个字,16 位时为 25 个字,32 位时为 12 个字。超出的传输会抛出错误。
  • 时钟约在 5.4 kHz 至 71.4 kHz 之间运行,并且绝不会超过 frequency_hz。超出该范围的请求会被钳位,并在脚本的标准错误输出上给出警告。
  • 没有保存 frequency_hz 的 Net 以最高速率运行。
  • cs_active="high" 会抛出错误。在 auto 片选模式下,keep_cs=True 会抛出错误。
  • FIO0-FIO3 不能承载 SPI。使用这些引脚的 Net 会让驱动抛出错误。
引脚顺序,以及如何用其他引脚创建 U3 Net,请参阅 SPI

说明

  • Net 必须配置为 NetType.SPI
  • 所有 SPI 操作都是全双工的;数据在发送的同时被接收
  • write() 执行的也是全双工传输,只是丢弃了收到的数据
  • keep_cs=True 会在多次调用之间保持片选线有效,用于多段事务
  • transfer() 会用填充值补齐过短的数据数组,或把过长的数组截断到 n_words
  • LabJack T7 每次事务最多支持 56 字节,最高速率约 800 kHz。多字节传输在请求速率约 1 kHz 至 800 kHz 之间时,实际以约 1 kHz 运行
  • LabJack U3 每次事务最多支持 50 字节,速率约为 5.4 kHz 至 71.4 kHz
  • Aardvark 采用 GPIO bit-bang 模式;无论 frequency_hz 设为多少,实际速度都受 USB 往返时间限制
  • config() 只对正在运行的脚本生效。lager spi NET config 才会把配置保存到 saved_nets.json
  • 低位在前模式(bit_order="lsb")在 LabJack T7 上通过软件位反转实现