RK3588 Linux SDK配置SPI转MCP2515 CAN驱动

以正点原子RK3588 Linux SDK,在内核开启SPI转MCP2515 CAN驱动为例。
该SDK已经自带MCP251x和mcp251xfd驱动,路径:/kernel/drivers/net/can/spi,我们只需要在内核中启用MCP2515和添加设备树即可。

一:内核启用MCP2515驱动。

打开内核图形化配置界面
在内核源码目录下,执行如下命令可打开menuconfig图形化配置界面。

1.加载配置文件

makeARCH=arm64 rockchip_linux_defconfig

2. 打开图形化配置界面

makeARCH=arm64 menuconfig

3. 选择Networking support选项,并进入

4. 选中CAN bus subsystem support选项,并进入

5. 选中CAN Device Drivers选项,并进入

6. 选中CAN SPI interfaces选项,并进入

8. 选中Microchip MCP251x SPI CANcontrollers选项,并保存。

9.配置完成后执行如下命令保存配置

//在内核源码目录下,执行如下命令保存配置。

makeARCH=arm64 savedefconfig

//替换配置

cpdefconfig arch/arm64/configs/rockchip_linux_defconfig

二:修改设备树

路径:rk3588_linux_sdk/kernel/arch/arm64/boot/dts/rockchip/rk3588-atk-devkit.dtsi

/{/* 添加时钟,以MCP2515物理晶振频率为准 */ clk8m: clk8{compatible="fixed-clock";#clock-cells = <0>;clock-frequency=<8000000>;};};&pinctrl{mcp2515{mcp2515_int_pins_spi0: mcp2515-int-pins-spi0{rockchip,pins=<1RK_PB5 RK_FUNC_GPIO&pcfg_pull_up>;};mcp2515_int_pins_spi4: mcp2515-int-pins-spi04{rockchip,pins=<1RK_PB6 RK_FUNC_GPIO&pcfg_pull_up>;};};};&spi0{status="okay";pinctrl-names="default";pinctrl-0=<&spi0m2_pins&spi0m2_cs0>;#address-cells = <1>;#size-cells = <0>;max-freq=<10000000>;mcp2515@0{status="okay";compatible="microchip,mcp2515";reg=<0>;spi-max-frequency=<10000000>;pinctrl-names="default";pinctrl-0=<&mcp2515_int_pins_spi0>;interrupt-parent=<&gpio1>;interrupts=<RK_PB5 IRQ_TYPE_LEVEL_LOW>;clocks=<&clk8m>;vdd-supply=<&vcc_3v3_s3>;xceiver-supply=<&vcc_3v3_s3>;};};&spi4{status="okay";pinctrl-names="default";pinctrl-0=<&spi4m2_pins&spi4m2_cs0>;#address-cells = <1>;#size-cells = <0>;max-freq=<10000000>;mcp2515@0{status="okay";compatible="microchip,mcp2515";reg=<0>;spi-max-frequency=<10000000>;pinctrl-names="default";pinctrl-0=<&mcp2515_int_pins_spi4>;interrupt-parent=<&gpio1>;interrupts=<RK_PB6 IRQ_TYPE_LEVEL_LOW>;clocks=<&clk8m>;vdd-supply=<&vcc_3v3_s3>;xceiver-supply=<&vcc_3v3_s3>;};};

三:编译内核,烧录镜像。

调用build.sh脚本编译内核

./build.sh kernel

内核编译成功,无错误,无警告。
使用RKDevTool烧录镜像

四:查看 spi设备节点信息。

ls/sys/bus/spi/devices/cat/sys/bus/spi/devices/spi0.0/ueventcat/sys/bus/spi/devices/spi4.0/ueventls-l/sys/bus/spi/devices/spi0.0/driverls-l/sys/bus/spi/devices/spi4.0/driver


可以看到SPI0、SPI4绑定mcp2515驱动正常。

ifconfig-a

我们看到有can0和can1,嵌入式Arm Linux内核开启SPI MCP2515驱动已经顺利完成,关于can调试可参考《Linux免驱使用PCAN /PCAN FD,使用方法以Ubuntu为例》,由于测试的这块MCP2515使用的的8M晶振,所以CAN波特率最大只能到500K,可以更换成16M晶振,支持CAN波特率1M.