spidev 无法控制片选信号

Posted

技术标签:

【中文标题】spidev 无法控制片选信号【英文标题】:spidev cannot control the chip select signal 【发布时间】:2013-10-25 09:23:56 【问题描述】:

我在嵌入式 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>;
;

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

有什么方法可以确定为什么spidev在传输过程中不能设置为逻辑低?似乎需要在内核上传递其他内容,或者 spidev 上存在无法控制芯片选择的问题。我想知道是否需要更改内核驱动程序/spi 目录中的 spidev.h 或 spidev.c 上的任何内容?或者我该如何解决?

The reference manual 用于处理器

【问题讨论】:

您确定不是硬件问题吗?尝试将引脚设置为 GPIO 并确保它发生变化 【参考方案1】:

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

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

据我所知reg = &lt;1&gt; 告诉 SPI 内核 spidev 连接到芯片选择 1,但也许您的设备连接到芯片选择 0。所以,reg = &lt;0&gt;

【讨论】:

它并没有解决我的问题,但与其浪费100分,不如给别人:) 谢谢 ;) 你有没有检查过你的芯片选择上的任何东西都没有移动?

以上是关于spidev 无法控制片选信号的主要内容,如果未能解决你的问题,请参考以下文章

Python驱动树莓派SPI接口

SX1302官方开源代码无法在NUC980主控芯片中使用SPI片选脚

信号量无法阻止 Win32 控制台应用程序中的线程

12.FSMC

微机课设:用汇编语言编写一个信号发生器,要求产生正弦波、梯形波、阶梯波、方波

u-boot移植---代码修改---支持DM9000网卡