Beagleboneblack 无法在BeagleBone Green Wireless上配置SPI0

Beagleboneblack 无法在BeagleBone Green Wireless上配置SPI0,beagleboneblack,spi,device-tree,Beagleboneblack,Spi,Device Tree,注意:所选答案是解决问题的原始答案,有关更多详细信息,请参阅下面的附加答案。 我无法在我的BeagleBone Green Wireless(BBGW)上配置SPI0。我试图在不使用覆盖的情况下实现这一点,只使用纯DeviceTree /dev/spidev1.0和/dev/spidev1.1都存在,但任何I/O都会返回垃圾 连接到SCLK的示波器主要显示噪声(每个都在不同的时间刻度) my.dts/.dtsi的重要部分: &am33xx_pinmux { bb_spi0_pi

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

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

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

连接到SCLK的示波器主要显示噪声(每个都在不同的时间刻度)


my.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>;
    };
};

我无法从中得出任何结论,但我几乎可以肯定这不是因为时钟线上的电容器造成的,这在本测试中是未使用的。

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

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

我的董事会是从seeed studio订购的。

简短回答 如@suadss所述,拆除电容器是正确答案


稍长的解释 与所选答案中的内容相反,只有一个电容器位于时钟线上-另一个位于
SPI0\u D0
或在本例中为
MISO
(主输入-从输出)线上,因此即使在短接
D0
D1
并完全忽略时钟时,也会损坏数据

下面这些电容器背后的推理


电容器位置 如果图像不再可用,说明

两个100PF电容器位于板的边缘,位于一个凹槽连接器的中间,位于微卡槽和交叉的PB符号之间。这一行中只有2个,而SD卡插槽旁边有3个电阻,Pb标志旁边有3个其他元素

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


他们为什么在这里 因为完全相同的GPIO可用于
UART
,就像在BeagleBone Black上一样:

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

我仍然想知道的一件事是,为什么他们没有为该连接器使用一条空闲和未使用的CPU线路(或者甚至是另一条UART,例如
UART4
UART5
)-所有这些线路都可以通过
DTB
进行配置,是的,有空闲线路:



原理图截图来源:官方

如问题所述,我几乎没有任何时钟信号(当然也没有可用的信号),所以我猜这是一个更基本的问题。然而,当我有机会接触电路板时,我会确保检查这些电容器(很可能是明天)。我已经深入研究了原理图,在这种情况下,这些电容器中的一个在时钟线上,而另一个在
SPI0\u D0
线上aka
MISO
。移除这两个模块解决了spidev_测试中的RX/TX不匹配问题-我还没有用外部模块对其进行测试,但看起来很有希望。与外部芯片通信(所述DWM1000)似乎有效-我将通过在其中两个模块之间进行通信确认后,立即选择此答案作为正确答案。我选择了您的答案,但也添加了我的答案,并提供了更详细的解释。
$ 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��