最近遇见一个问题,AM5728的SPI作为主模式,用示波器检测CLK,MISO,MOSI信号都正常,特别是MISO的回读数据在示波器上也正确,但是利用linux内核的spi_write_then_read函数发送命令时,回读数据rxbuf一直是0,有人遇到过这种情况么?
yongqing wang:
利用spi_write_then_read回读的时候信号都正常吗?
user5075745:
回复 yongqing wang:
对,我是用示波器同时测试CLK和MISO,信号是有的而且时序也没问题,但是用spi_write_then_read回读时,rxbuf一直是零。
Steven Liu1:
看下管教的pinmux配置,是否有吧receive的enable状态打开?
SPI的配置部分也一样查一下。
user5075745:
回复 Steven Liu1:
你好,我之前也想过是不是配置的问题,但是在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引脚都没什么问题,所以就感觉很奇怪。