Other Parts Discussed in Thread: AM3352
工具/软件:Linux
大家好。
我使用了 SDK 04.00.04 (linux-4.9.28+gitAUTOINC+e43d1050-geed43d1050)。
当我使用 SPI0连接一个作为 SPI 从器件的芯片时、我发现 SPI0_CS 信号始终保持低电平。
我知道 OMAP2_mcspi_set_enable 函数会启用 SPI 通道、从而设置 OMAP2_MCSPI_CHCCTRL0寄存器的位0。 和 用于 设置 OMAP2_MCSPI_CHCONF0寄存器的 mcspi_WRITE_CHconf0函数。 OMAP2_MCSPI_CHCONF0的位20可以将 SPI0_CS 控制为低电平或高电平。
我在 mcspi_write_chconf0函数中添加 printk 以打印 OMAP2_MCSPI_CHCONF0寄存器、我发现在 Linux 运行后、OMAP2_MCSPI_CHCONF0寄存器的位20 (FORCE)为1 (ePol=1)、即 SPI0_CS 保持低电平。
但是、 当 SPI0不访问从器件时、我需要 SPI0_CS 保持在高电平、当访问从器件时、我需要变为低电平。 我认为这是正确的逻辑、但当我在 SDK 04.00.00.04中使用 SPI 驱动程序时、我无法获得该结果。
我想知道如何获得我想要的结果? SPI 驱动程序中是否存在任何错误?
以下是我关于 SPI 的 DTS:
spi0_pins:pinmux_spi0_pins{
pinctrl-single、pins =<
AM33XX_IOPAD (0x950、PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_SCLK.spi0_SCLK *
AM33XX_IOPAD (0x954、PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_d0.spi0_d0 *
AM33XX_IOPAD (0x958、PIN_INPUT_PULLUP | MUX_MODE0)/* spi0_D1.spi0_D1 *
AM33XX_IOPAD (0x95C、PIN_OUTPUT 上拉| MUX_MODE0)/* spi0_cs0.spi0_cs0 *
/*SPI0_IRQ*/
AM33XX_IOPAD (0x97C、PIN_INPUT_PULLUP | MUX_MODE7)/* uart1_rtsn.GPIO0_13 *
/*SPI0_RST*/
AM33XX_IOPAD (0x964、PIN_OUTPUT_PULLUP | MUX_MODE7)/* ecap0_in_pwm0_OUT.GPIO0_7 *
>;
};
spi0{(&S)
pinctrl-names ="default";
pinctrl-0 =<&spi0_PINs>;
状态="正常";
wk2166@0{
兼容="wk2xxxspi";
SPI-max-frequency =<1000000>;
reg =<0>;
IRQ-GPIO =<&GPIO0 13 GPIO_ACTIVE_LOW_>;
RST-GPIO =<&GPIO0 7 GPIO_ACTIVE_LOW_>;
};
};
