2

elinux.orgでは、デバイス ツリーのピンの方向を変更し、次の行を追加することで、D0 を出力に、D1 を SPI1 の入力にできると記載されています。

ti,pindir-d0-out-d1-in = <1>;

同じ方法を適用しようとしましたが、SPI0 を使用しましたが、うまくいかないようです。干渉している他の問題がある可能性のあるプロトタイプ PCB で作業しています。

同じ方法が SPI0 で機能し、それぞれの D0 と D1 を交換することを誰かが確認/否定できますか?

ありがとう!

4

3 に答える 3

2

SPI0でテストしましたが、動作しています

たとえば、am33xx.dtsi を変更しました (カーネル 3.8 以降では dts オーバーレイはサポートされていません)。

 spi0: spi@48030000 {
        compatible = "ti,omap4-mcspi";
        #address-cells = <1>;
        #size-cells = <0>;
        reg = <0x48030000 0x400>;
        interrupts = <65>;
        ti,spi-num-cs = <2>;
        ti,hwmods = "spi0";
        //added to swap d0 and d1 in spi0
        ti,pindir-d0-out-d1-in = <1>;
        dmas = <&edma 16
            &edma 17
            &edma 18
            &edma 19>;
        dma-names = "tx0", "rx0", "tx1", "rx1";
        status = "disabled";
    };
于 2015-04-19T12:53:14.813 に答える
0

この方法を spidev_test ループバック プログラムでテストしたところ、変更されていないファームウェアと同じ結果が得られました。SPI には他にも解決しなければならない問題があると思います。

「反転」BB-SPIDEV0-00A0.dts のソースは次のとおりです。

/*
 * Copyright (C) 2013 CircuitCo
 *
 * Virtual cape for SPI0 on connector pins P9.22 P9.21 P9.18 P9.17
 *
 * 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-SPI0";
    version = "00A0";

    /* state the resources this cape uses */
    exclusive-use =
        /* the pin header uses */
        "P9.17",    /* spi0_cs0 */
        "P9.18",    /* spi0_d1 */
        "P9.21",    /* spi0_d0 */
        "P9.22",    /* spi0_sclk */
        /* the hardware ip uses */
        "spi0";

    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            /* default state has all gpios released and mode set to uart1 */
            bb_spi0_pins: pinmux_bb_spi0_pins {
                pinctrl-single,pins = <
                    0x150 0x30  /* spi0_sclk.spi0_sclk, INPUT_PULLUP | MODE0 */
                    0x154 0x10  /* spi0_d0.spi0_d0, OUTPUT_PULLUP | MODE0 */
                    0x158 0x30  /* spi0_d1.spi0_d1, INPUT_PULLUP | MODE0 */
                    0x15c 0x10  /* spi0_cs0.spi0_cs0, OUTPUT_PULLUP | MODE0 */
                >;
            };
        };
    };

    fragment@1 {
        target = <&spi0>;   /* spi0 is numbered correctly */
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;

            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&bb_spi0_pins>;
            ti,pindir-d0-out-d1-in = <1>;


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

                compatible = "spidev";

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


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

                compatible = "spidev";

                reg = <1>;
                spi-max-frequency = <16000000>;
            };
        };
    };
};
于 2014-08-20T15:47:24.420 に答える
-2

参照しているドキュメントでは、SPI1 D0 と D1 ピンのスワップについてのみ説明しています。

私の知る限り、ピン スワップは SPI0 では使用できず、SPI1 でのみ使用できます。

于 2014-10-04T07:19:30.643 に答える