Waveshare를 얻으려면 Banana Pi BPI-M2 Zero에서 작동해야 합니다.

Waveshare를 얻으려면 Banana Pi BPI-M2 Zero에서 작동해야 합니다.

Waveshare는 Raspberry Pi를 위한 훌륭한 CAN HAT을 만듭니다(참조여기), 그러나 지침은 Armbian이 아닌 Raspberry Pi OS에만 적용됩니다. Banana Pi BPI-M2 Zero는 Raspberry Pi와 동일한 핀아웃을 가지고 있지만 Armbian을 실행합니다. Armbian의 오버레이 시스템을 사용하여 Waveshare CAN HAT를 설정하는 방법은 무엇입니까?

답변1

오버레이는 Raspberry Pi OS와 Armbian에서 약간 다르게 작동합니다. 이렇게 하려면 두 가지 작업을 수행해야 합니다. 먼저 SPI 버스 제로를 활성화해야 합니다. 이는 파일을 편집하여 수행할 수 있습니다 /boot/armbianEnv.txt. 파일에 다음 두 줄을 추가합니다.

overlays=spi-spidev
param_spidev_spi_bus=0

overlays=동일한 라인에 추가해야 함 을 나타내는 라인이 이미 있는 경우 spi-spidev모든 시스템 재정의를 동일한 명령에 지정해야 합니다.

다음으로, 기본적으로 다양한 드라이버 매개변수를 사용 중인 보드의 특정 구현에 매핑하는 DTS 파일이 필요합니다. 나는 사용했다이 파일(아래 복사) Waveshare에서 제공하는 특정 보드와 일치하는 것으로 보입니다. 파일 이름은 이어야 합니다 spi-mcp251x.dts. 이 파일은 이 명령을 사용하여 컴파일하고 설치할 수 있으며 armbian-add-overlay spi-mcp251x.dts, /boot/armbianEnv.txt재부팅 후에는 작동하는 CAN 드라이버가 있어야 합니다.

파일의 내용은 spi-mcp251x.dts다음과 같습니다.

/dts-v1/;
/plugin/;

/ {
    compatible = "allwinner,sun4i-a10", "allwinner,sun7i-a20", "allwinner,sun8i-h3", "allwinner,sun50i-a64", "allwinner,sun50i-h5";
    fragment@0 {
        target-path = "/clocks";
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <1>;
            can0_osc_fixed: can0_osc_fixed {
                compatible = "fixed-clock";
                #clock-cells = <0>;
                clock-frequency  = <12000000>;
            };
        };
    };

    fragment@1 {
        target = <&pio>;
        __overlay__ {
            can0_pin_irq: can0_pin_irq {
                pins = "PA2";
                function = "irq";
                bias-pull-up;
            };
        };
    };

    fragment@2 {
        target = <&spi0>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";
            mcp2515 {
                reg = <0>;
                compatible = "microchip,mcp2515";
                pinctrl-names = "default";
                pinctrl-0 = <&can0_pin_irq>;
                spi-max-frequency = <2000000>;
                interrupt-parent = <&pio>;
                interrupts = <0 2 8>; /* PA2 IRQ_TYPE_LEVEL_LOW */
                clocks = <&can0_osc_fixed>;
                status = "okay";
            };
        };
    };
};

관련 정보