MCP2518这个芯片包含can以及canfd功能,相比于mcp2517芯片来说,新增了ECC校验功能,保障了传输过程的稳定性。 说明:OKMX93开发板内核源码中已经包含了2518的驱动,直接修改设备树及驱动配置即可。 驱动路径:OKMX93-linux-sdk/OKMX93-linux-kernel/drivers/net/can/spi/mcp251xfd-core.c 1添加驱动配置 Make menuconfig打开图形配置界面,搜索“MCP251XFD” 将这一行选成编译成模块: (M) Microchip MCP251xFD SPI CAN controllers |
2修改设备树 forlinx@ubuntu:~/OKMX93-linux-sdk/OKMX93-linux-kernel/$ vi arch/arm64/boot/dts/freescale/\ OK-MX93-C.dts |
3添加时钟节点: [……] / { clk20M: oscillator-0 { compatible = "fixed-clock"; #clock-cells = <0>; clock-frequency = <20000000>; }; [……] |
4 新增lpspi3节点,在此节点下增加mcp2518节点: [……] &lpspi3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_lpspi3>; pinctrl-1 = <&pinctrl_lpspi3>; cs-gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; status = "okay"; spican:can@0 { compatible = "microchip,mcp2518fd"; reg = <0>; clocks = <&clk20M>; //使用刚刚写的时钟 spi-max-frequency = <10000000>; //spi最大频率设置,此处为1MHz interrupts-extended = <&gpio2 16 IRQ_TYPE_LEVEL_LOW>;//中断引脚配置,中断引脚是GPIO2_IO16 /*interrupt-parent = <&gpio2>; interrupts = <16 IRQ_TYPE_LEVEL_LOW>;*/ /*vdd-supply = <&vdc_5v>; xceiver-supply = <&vdc_5v>;*/ /*status = "okay";*/ }; }; [……] |
5添加中断引脚配置: [……] pinctrl_inte:mcp2518fdrp{ fsl,pins = < MX93_PAD_GPIO_IO16__GPIO2_IO16 0x31e >; };[……] |
6编译源码并烧写。 7开机验证 在开发板上SPI3接口处接上2518转接板,启动开发板。 查看驱动是否成功挂载: root@ok-mx93:~# lsmod Module Size Used by can_raw 20480 1 can 28672 1 can_raw vvcam_video 32768 0 moal 716800 1 mlan 499712 1 moal cdc_acm 32768 0 xr_usb_serial_common 45056 0 vvcam_isp 69632 1 vvcam_dwe 20480 1 imx8_media_dev 20480 0 basler_camera_driver 16384 0 crct10dif_ce 16384 1 edt_ft5x06 24576 0 basler_camera_driver_vvcam 16384 0 goodix 24576 0 mcp251xfd 24576 0 flexcan 32768 0 can_dev 36864 2 mcp251x,flexcan |
8查看是否生成节点: root@ok-mx93:~# ifconfig can2 can2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:16 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:10 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:32 [……] |
|