无法在BeagleBone Green Wireless上配置SPI0

时间:2017-08-10 17:55:47

标签: beagleboneblack spi device-tree

注意:所选答案是解决问题的原始答案,有关详细信息,请参阅下面的其他答案。

我无法在BeagleBone Green Wireless(BBGW)上配置SPI0。我试图在不使用叠加层的情况下实现这一点,只使用纯DeviceTree。

/dev/spidev1.0/dev/spidev1.1在那里,但任何I / O都会返回垃圾。

连接到SCLK的示波器主要显示噪声here are pictures(每个都在不同的时间范围内)。

我的.dts / .dtsi的重要部分:

&am33xx_pinmux {
    bb_spi0_pins: pinmux_bb_spi0_pins {
        pinctrl-single,pins = <
            BONE_P9_22 ( PIN_INPUT_PULLUP | MUX_MODE0 ) // SCLK
            BONE_P9_21 ( PIN_INPUT_PULLUP | MUX_MODE0 ) // MISO
            BONE_P9_18 ( PIN_OUTPUT_PULLUP | MUX_MODE0 ) // MOSI
            BONE_P9_17 ( PIN_OUTPUT_PULLUP | MUX_MODE0 ) // CS0
        >;
    };
};

&spi0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&bb_spi0_pins>;
    #address-cells = <1>;
    #size-cells = <0>;

    channel@0 {
        #address-cells = <1>;
        #size-cells = <0>;
        compatible = "linux,spidev";
        spi-max-frequency = <16000000>;
        reg = <0>;
    };

    channel@1 {
        #address-cells = <1>;
        #size-cells = <0>;
        compatible = "linux,spidev";
        spi-max-frequency = <16000000>;
        reg = <1>;
    };
};

更多信息:

PS。我知道BBGW不是BBB,但BBG / BBGW还没有标签。

更新

在其他内核上验证了该行为是相同的,即:

  • 85年4月4日-的ARMv7-X14
  • 84年4月4日-TI-R120
  • 85年4月4日-bone19

另外,我用跳线将MISO和MOSI(P9上的引脚18和21)连接在一起并运行spidev_test,结果如下:

$ sudo ./spidev_test -v -p "abcdefghijklmnopqrstuvwxyz1234\xde\xad" 
spi mode: 0x0
bits per word: 8
max speed: 500000 Hz (500 KHz)
TX | 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 31 32 33 34 DE AD  | abcdefghijklmnopqrstuvwxyz1234ޭ
RX | 03 0C 0F 30 33 3C 3F C0 C3 CC CF F0 F3 FC FF 00 03 0C 0F 30 33 3C 3F C0 C3 CC 03 0C 0F 30 FC F3  | ...03<?�������.....03<?���...0��

我不能做任何事情,但这让我几乎可以肯定这不是由于时钟线上的电容器,这在本次测试中未被使用。

2 个答案:

答案 0 :(得分:2)

我有同样的问题,我使用adafruit-spi0覆盖,我无法让它工作。我能够在slave spi设备上发送数据并且收到的数据没问题,但是当第二个设备将数据发送回我的BBGW时,我没有得到我发送的值。

这就是我解决这个问题的方法,spi0 clk上有两个电容器100pf它们会导致反射导致双时钟数据,你需要将它们移除。

我的董事会是从看见的工作室找到的。

答案 1 :(得分:1)

简短回答

正如@suadss所回答的那样,取下电容器是正确的答案。

稍微长一点的解释

与所选答案中的内容相反,只有一个电容在时钟线上 - 另一个在SPI0_D0上,或者在这种情况下,MISO(主输入从输出) )即使短路D0D1并完全省略时钟,也会破坏数据。

推理下面那些电容器。

电容器的位置

如果图像不再可用,请说明

两个100pF电容位于电路板边缘,位于其中一个Grove连接器下方,位于microSD卡插槽和划掉的Pb标志之间。其中只有2个在行中,而不是SD卡插槽旁边的3个响应器和Pb标志旁边的3个其他元素。

这是一张照片(删除前):

100pF capacitors to remove

为什么他们在这里

因为完全相同的GPIO可以用于UART,就像在BeagleBone Black上一样:

SPI/UART lines coming out of CPU... SPI/UART lines on GPIO connector P9

那有什么不同呢?这个UART也可以在Grove连接器上使用!因此,为了在使用该连接器和长电缆时滤除一些噪音,他们增加了2个小电容器。可能出现什么问题?

Capacitors on UART lines

我仍然想知道的一件事是,为什么他们没有为该连接器使用免费和未使用的 CPU线路之一(或者甚至是另一个UART,例如UART4UART5) - 无论如何都可以通过DTB进行配置,是的,有自由行:

UART2 available on unconnected CPU lines

原理图截图的来源:官方BBGW schematic