【问题标题】:Linux kernel Controller as SPI slaveLinux 内核控制器作为 SPI 从机
【发布时间】:2013-11-20 10:17:05
【问题描述】:

我对 linux 中可用的 SPI 设备感兴趣。 我有一个特定的控制器,它在主从模式下都支持 SPI。 我必须将 SPI 控制器配置为从机模式。

我的问题:Linux 框架是否支持 SPI 从设备? 我将在 SPI 总线上获取异步数据,我必须读取这些数据并对其进行处理,然后发回一个命令。

【问题讨论】:

    标签: linux-kernel linux-device-driver spi


    【解决方案1】:

    从 v4.13-rc1 版本开始,Linux 内核已支持 SPI 从模式。 来自 Linux Kernel 的SPI Documentation

    本文档(和 Linux)支持 SPI 交互的主从端。

    [...]

    “struct spi_device”封装了这两种驱动程序之间的控制器端接口。

    [...]

    /sys/devices/.../CTLR/slave ... 用于(取消)为 SPI 从控制器注册从设备的虚拟文件。

    将 SPI 从机处理程序的驱动程序名称写入此文件,以注册从机设备;写“(null)”会注销从设备。

    从此文件中读取显示从设备的名称(如果未注册,则为“(null)”)。

    /sys/class/spi_slave/spiB ... 符号链接(或实际设备节点)到一个逻辑节点,该节点可以为总线“B”上的 SPI 从控制器保存类相关状态。注册后,此处存在单个 spiB.* 设备,可能与其他 SPI 从设备共享物理 SPI 总线段。

    我没有任何示例 C++/C 代码来支持这个副手。

    【讨论】:

    【解决方案2】:

    不,Linux 不支持作为 SPI 从设备运行。

    来自Overview of Linux kernel SPI support

    “struct spi_device”封装了主控端之间的接口 这两种类型的驱动程序。在撰写本文时,Linux 没有从属端 编程接口。

    【讨论】:

    • 当然,您始终可以映射 SPI 寄存器并为从 SPI 编写代码。因此,可以制作一个作为 SPI 从设备的自定义设备。但是,没有通用的基础设施,所以这项工作并不容易。
    【解决方案3】:

    在 Linux 上实现 SPI 从设备的两个最常见示例是 i.MX28 特定的补丁:

    1. Tony Lin 的补丁可在https://community.nxp.com/thread/325404 获得
    2. Marek Vasut 可在http://www.spinics.net/lists/arm-kernel/msg190860.html

    Ishaqe Ahamed 已在 https://e2e.ti.com/support/embedded/linux/f/354/t/162748 上发布了一些用于 OMAP2 的 SPI 从驱动程序的代码,但尚未发布完整的补丁。

    您也许可以从发布在http://git.yoctoproject.org/cgit/cgit.cgi/meta-extras/plain/recipes-kernel/linux/linux-netbook-2.6.33.2/linux-2.6.34-moorestown-spi-slave-controller-driver-1.1.patch 的英特尔 Moorestown SPI 从控制器芯片驱动程序中获得一些信息。

    请注意,所有这些示例都是几年前完成的,需要移植到您使用的任何较新的内核。这些示例都没有为 SPI 从驱动程序提供跨架构框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 2022-10-20
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多