【发布时间】: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