linux - spidev 无法控制片选信号

标签 linux linux-kernel spi

我在嵌入式 Linux 设备 (olimex imx233 micro) 上使用内核 3.12.rc4。我的目标是使用 /dev/spidev 能够与另一个 spi 设备通信。

我将 arch/arm/boot/dts/imx23-olinuxino.dts 编辑为:

ssp1: ssp@80034000 {
  #address-cells = <1>;
  #size-cells = <0>;
  compatible = "fsl,imx23-spi";
  pinctrl-names = "default";
  pinctrl-0 = <&spi2_pins_a>;
  clock-frequency = <1000000>;
  status = "okay";

  spidev: spidev@0 {
    compatible = "spidev";
    spi-max-frequency = <1000000>;
    reg = <1>;
  };
};

arch/arm/boot/dts/imx23.dtsi: 有这个配置

spi2_pins_a: spi2@0 {
  reg = <0>;
  fsl,pinmux-ids = <
    0x0182 /* MX23_PAD_GPMI_WRN__SSP2_SCK */
    0x0142 /* MX23_PAD_GPMI_RDY1__SSP2_CMD */
    0x0002 /* MX23_PAD_GPMI_D00__SSP2_DATA0 */
    0x0032 /* MX23_PAD_GPMI_D03__SSP2_DATA3 */
  >;
  fsl,drive-strength = <1>;
  fsl,voltage = <1>;
  fsl,pull-up = <1>;
};

设备绑定(bind)看起来正确。当我编译内核时,我得到了 /dev/spidev1.1。之后我使用 spidev_test.c并通过示波器监控引脚。 SCK 和 MOSI 输出信号正确,但是,片选即使在数据传输期间也设置为逻辑高电平。

有什么办法可以确定为什么spidev在传输过程中不能设置为logic low?似乎需要在内核上传递额外的东西,或者 spidev 上存在无法控制芯片选择的问题。我想知道我是否需要更改内核的 driver/spi 目录下的 spidev.h 或 spidev.c 中的任何内容?或者我该如何解决?

The reference manual对于处理器

最佳答案

我从未使用过设备树,但无论如何我都会尽力帮助您。

内核创 build 备/dev/spidev1.1 ,所以 spidev 连接到 SPI 总线 1片选 1。片选计数从0开始,并且您没有任何其他设备关联到 SPI 总线 1

据我所知reg = <1>告诉 SPI 内核 spidev 连接到片选 1。但也许你的设备连接到片选 0。所以,reg = <0>

关于linux - spidev 无法控制片选信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19417378/

相关文章:

c - PIC16LF1824 SPI 从机接口(interface)

linux - 使用 cuFFT 的多个主机线程的奇怪行为

php - CodeIgniter Route 适用于 CIFS 挂载,但不适用于本地文件

linux - 如何在变量中传递值

linux-kernel - Linux内核中的tasklist_lock在哪里定义?

linux - 如何在 Ubuntu 12.04 中通过确认删除文件

java - 名称为 'Lucene54' 的 org.apache.lucene.codecs.Codec 类型的 SPI 类不存在

C char函数(void)和void函数(void)的区别

c - 在 linux 中运行特定的 c 文件

LINUX LISH.H list_for_each 无限循环