【问题标题】:spidev to read eeprom idspidev 读取 eeprom id
【发布时间】:2018-05-27 15:48:20
【问题描述】:

操作系统:Linux 我正在用户空间中编写一个 spidev 应用程序来读取 EEPROM id。我的设备树条目如下:

spi0: spi@ffda4000 {
    compatible = "snps,dw-apb-ssi";
    #address-cells = <1>;
    #size-cells = <0>;
    reg = <0xffda4000 0x100>;
    interrupt-parent = <&intc>;
    interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
    num-cs = <2>;
    cs-gpios = <&porta 7 GPIO_ACTIVE_HIGH>, <&porta 0 GPIO_ACTIVE_HIGH>;
    bus-num = <0>;
    tx-dma-channel = <&pdma 16>;
    rx-dma-channel = <&pdma 17>;
    clocks = <&spi_m_clk>;
    status = "disabled";
};

然后:

&spi0 {
    status = "okay";
    m25p10_spi@0 {
        compatible = "m25p10";
        reg = <0>;  /* chip select */
        spi-max-frequency = <20000000>;
        /* m25p,fast-read; */
        enable-dma = <0>;
    };
    spidev@0 {
        compatible = "rohm,dh2228fv";
        reg = <0>;  /* chip select */
        spi-max-frequency = <20000000>;
        enable-dma = <0>;
    };
};

想法是让 spidev 与 m25p10 位于同一节点,这样当用户空间应用程序打开“/dev/spidev0.0”的句柄时,它实际上是在与 m25p10 交谈。但是我无法启动linux。这种方法有什么问题吗?

【问题讨论】:

  • 我让它启动。它说的错误代码是:dw_spi_mmio ffda4000.spi:chipselect 0 already in use 那么我怎样才能让spidev与m25p10芯片对话呢?
  • "那我怎样才能让 spidev 与 m25p10 芯片对话呢?" -- 删除其中一个重复节点,即 m25p10_spi@0 节点。
  • @sawdust 我从 WinCE 来到 Linux 世界,所以我可能不理解 spidev 的这个想法!所以我可以在我的代码中使用 m25p10 驱动程序或 spidev 吗?如果我删除 m25p10_spi@0,我会破坏其他内核实用程序正在使用的现有代码。我想加入 spidev,以便用户空间应用程序可以与 m25p10 设备通信。这似乎是一个无效的场景,是真的吗?
  • 正确使用设备树的方法是不同的地址。使用 spidev@
  • @Devidas 等等,spidev@1 可以与 m25p10@0 通话吗?请记住,我想要 spidev 的唯一原因是能够与 m25p10 交谈!

标签: linux-device-driver embedded-linux spi device-tree


【解决方案1】:

这行不通。一种设备 - DT 中的一种定义。

另外,为什么需要spidev 设备?您已经拥有m25p10_spi,它应该显示为 MTD 设备(类似于/dev/mtd0),并且从用户空间访问它应该没有问题。

更新:

看起来 OP 想保留 MTD 并通过 RDID 命令读取设备唯一 ID,当前 m25p10 驱动程序不支持。

我可能错了,但对我来说,最简单的解决方案是扩展驱动程序以使用 RDID 数据创建 sysfs 条目,在探测期间读取。

一些有价值的资源:

【讨论】:

  • 感谢您的回复。是的,我可以打开“/dev/mtd0”,但我无法使用 mtd 接口读取设备 ID。我想让用户空间应用程序读取并验证 eeprom id (RDID)。现在我明白了;我可以使用 m25p10 或 spidev。由于我无法删除 m25p10;我必须找到一种方法让 usersapce 应用程序读取 spi 寄存器 (RDID)。有什么想法吗?
  • 快速查看最新的 m25p10 驱动程序后,似乎不支持此功能。您可能希望将驱动程序扩展为,例如,在成功探测时创建 sysfs 条目。我看到在那个阶段读取了 RDID,因此您可以将其存储以供 sysfs 读取。
  • 我倾向于同一个方向但不想这样做:-) 我是来自 WinCE 的 linux 设备驱动程序(嵌入式)的新手。你会推荐一些好的书籍/材料来成为 linux 设备驱动程序的专家吗?请。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多