0

我很难让第二个芯片选择在 Beaglebone Black 上工作。

我将 /lib/firmware 中给出的 .dts 用于我的发行版(Angstrom,内核 3.8.13):

/*
 * Copyright (C) 2013 CircuitCo
 *
 * Virtual cape for SPI1 on connector pins P9.29 P9.31 P9.30 P9.28
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";

    /* identification */
    part-number = "BB-SPI1-01";
    version = "00A0";

    /* state the resources this cape uses */
    exclusive-use =
        /* the pin header uses */
        "P9.31",    /* spi1_sclk */
        "P9.29",    /* spi1_d0 */
        "P9.30",    /* spi1_d1 */
        "P9.28",    /* spi1_cs0 */
            "P9.42",    /* spi1_cs1 */
        /* the hardware ip uses */
        "spi1";

    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            /* default state has all gpios released and mode set to uart1 */
            bb_spi1_pins: pinmux_bb_spi1_pins {
                pinctrl-single,pins = <
                    0x190 0x13  /* mcasp0_aclkx.spi1_sclk,  OUTPUT_PULLUP | MODE3 */
                    0x194 0x33  /* mcasp0_fsx.spi1_d0,      INPUT_PULLUP | MODE3 */
                    0x198 0x13  /* mcasp0_axr0.spi1_d1,     OUTPUT_PULLUP | MODE3 */
                    0x19c 0x13  /* mcasp0_ahclkr.spi1_cs0,      OUTPUT_PULLUP | MODE3 */
                    0x164 0x12  /* eCAP0_in_PWM0_out.spi1_cs1   OUTPUT_PULLUP | MODE2 */
                >;
            };
        };
    };

    fragment@1 {
        target = <&spi1>;   /* spi1 is numbered correctly */
        __overlay__ {
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&bb_spi1_pins>;

            #address-cells = <1>;
            #size-cells = <0>;

                    cs-gpios         = <&gpio4 17 0>, <&gpio1 7 0>;
            spi1_0{
                #address-cells = <1>;
                #size-cells = <0>;

                compatible = "spidev";

                reg = <0>;
                spi-max-frequency = <16000000>;
            };


            spi1_1{
                #address-cells = <1>;
                #size-cells = <0>;

                compatible = "spidev";

                reg = <1>;
                spi-max-frequency = <16000000>;
            };
        };
    };
};

我用 dtc 编译它并用 uEnv.txt 激活它:

capemgr.enable_partno=BB-SPI1-01

(HDMI 和 HDMIN capes 都被禁用)

我有 /dev/ 中显示的两个 SPI 设备:

/dev/spidev2.0  /dev/spidev2.1

并且引脚由 spi 接口使用,如下所示:

    root@beaglebone:~# cat $PINS | grep spi1
pin 89 (44e10964): 481a0000.spi (GPIO UNCLAIMED) function pinmux_bb_spi1_pins group pinmux_bb_spi1_pins
pin 100 (44e10990): 481a0000.spi (GPIO UNCLAIMED) function pinmux_bb_spi1_pins group pinmux_bb_spi1_pins
pin 101 (44e10994): 481a0000.spi (GPIO UNCLAIMED) function pinmux_bb_spi1_pins group pinmux_bb_spi1_pins
pin 102 (44e10998): 481a0000.spi (GPIO UNCLAIMED) function pinmux_bb_spi1_pins group pinmux_bb_spi1_pins
pin 103 (44e1099c): 481a0000.spi (GPIO UNCLAIMED) function pinmux_bb_spi1_pins group pinmux_bb_spi1_pins

而且模式很好:

pin 89 (44e10964) 00000012 pinctrl-single
pin 100 (44e10990) 00000013 pinctrl-single 
pin 101 (44e10994) 00000033 pinctrl-single 
pin 102 (44e10998) 00000013 pinctrl-single 
pin 103 (44e1099c) 00000013 pinctrl-single 

我在 C 中成功使用了一个程序,它使用第一个 spidev(spidev2.0)和第一个芯片选择,但是当我使用 spidev2.1(MOSI、MISO 和 CLK 正在工作)时,引脚 42 上没有任何内容。

有任何想法吗 ?

提前致谢

4

1 回答 1

1

好吧,我自己找到了答案:

引脚 42 很特殊,因为它连接到两个 I/O。因此,为了使用其中一个 I/O,您必须将另一个作为输入。

来源:Beaglebone 黑色系统参考手册http://www.digikey.com/web%20export/supplier%20content/ti_296/mkt/boards/BBB_SRM.pdf?redirected=1第 71 页。

但是现在我还有一个非常奇怪的问题......我在这里发布了:SPIDEV、设备树和 .dtbo 名称与 Beaglebone Black 的问题

于 2014-06-10T10:36:10.900 回答