让 Waveshare CAN HAT 在 Banana Pi BPI-M2 Zero 上工作

让 Waveshare CAN HAT 在 Banana Pi BPI-M2 Zero 上工作

Waveshare 为 Raspberry Pi 制作了一个很棒的 CAN HAT(请参阅这里),但该说明仅适用于 Raspberry Pi OS,不适用于 Armbian。 Banana Pi BPI-M2 Zero 具有与 Raspberry Pi 相同的引脚布局,但运行 Armbian。如何使用 Armbian 的覆盖系统设置 Waveshare CAN HAT?

答案1

覆盖在 Armbian 上的工作方式与 Raspberry Pi OS 上的工作方式略有不同。为此,您需要做两件事。首先,您需要启用 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";
            };
        };
    };
};

相关内容