This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM5728的spi问题

Other Parts Discussed in Thread: AM5728

最近遇见一个问题,AM5728的SPI作为主模式,用示波器检测CLK,MISO,MOSI信号都正常,特别是MISO的回读数据在示波器上也正确,但是利用linux内核的spi_write_then_read函数发送命令时,回读数据rxbuf一直是0,有人遇到过这种情况么?

  • 利用spi_write_then_read回读的时候信号都正常吗?

  • 对,我是用示波器同时测试CLK和MISO,信号是有的而且时序也没问题,但是用spi_write_then_read回读时,rxbuf一直是零。

  • 看下管教的pinmux配置,是否有吧receive的enable状态打开?

    SPI的配置部分也一样查一下。

  • 你好,我之前也想过是不是配置的问题,但是在devicetree的配额我感觉应该没啥问题。

    devicetree中pinmux的配置代码如下:

    ...

    touch_pins: pinmux_touch_pins {
            pinctrl-single,pins = <
                0x3A4 (PIN_OUTPUT | MUX_MODE0)            /* SPI1_SCLK    ==> SPI1_SCLK.spi1_sclk */
                0x3A8 (PIN_INPUT | MUX_MODE0)            /* SPI1_MISO    ==> SPI1_D1.spi1_d1 */
                0x3AC (PIN_OUTPUT | MUX_MODE0)            /* SPI1_MOSI    ==> SPI1_D0.spi1_d0 */
                0x3B0 (PIN_OUTPUT | MUX_MODE0)            /* SPI1_CS0        ==> SPI1_CS0.spi1_cs0 */

            >;
        };
    ...

    其中MISO设置为INPUT,spi模式

    spi的部分如下:

    ...

    &mcspi1 {
        status = "okay";
        spi-max-frequency = <200000>;
        spi-tx-bus-width = <1>;
        spi-rx-bus-width = <4>;
        ti,pindir-d0-out-d1-in;
    ...

    其中也设置了 ti,pindir-d0-out-d1-in;

    除了这些,还有别的需要配置的地方么?

    顺便说下,因为我用的基本都是linux自带内核模块和函数,而且MOSI引脚都没什么问题,所以就感觉很奇怪。

  • 问题解决了,将SPI1_SCLK改为INPUT即可,代码如下:

    ouch_pins: pinmux_touch_pins {
            pinctrl-single,pins = <
                0x3A4 (PIN_INPUT | MUX_MODE0)            /* SPI1_SCLK    ==> SPI1_SCLK.spi1_sclk */
                0x3A8 (PIN_INPUT | MUX_MODE0)            /* SPI1_MISO    ==> SPI1_D1.spi1_d1 */
                0x3AC (PIN_OUTPUT | MUX_MODE0)            /* SPI1_MOSI    ==> SPI1_D0.spi1_d0 */
                0x3B0 (PIN_OUTPUT | MUX_MODE0)            /* SPI1_CS0        ==> SPI1_CS0.spi1_cs0 */

            >;
        };

    但是,这是为什么?当SPI引脚设置为MUX_MODE0,即spi模式时,其PIN_INPUT和PIN_OUTPUT理论上是否起作用?

    如果起作用,SPI1_SCLK也应该够是PIN_OUTPUT,而不是PIN_INPUT,出现这种情况的可能原因是什么?