首页 > 技术知识 > 正文

1. 前言

由于海思平台需要接入CAN设备,而3559平台的CAN接口没有驱动支持; 但是标准Linux是支持mcp2515驱动,作为CAN设备接入的

2. 需要修改内容 SPI pinmux复用配置 内核开启mcp2515驱动 dts配置 3. SPI pinmux 复用配置

由于mcp2515驱动加载时,是需要通过spi接口读取硬件状态的,所以必须提前配置。 这里有两种方法: 方法一:uboot里面配置 【这里我采用这种方法,方法如下】 方法二: mcp2515驱动probe函数里面添加pinmux复用配置

(1)修改uboot 参数表

海思3559平台MCP2515 SPI转CAN驱动配置

(2)制作reg_info.bin

有两种方法,一种使用表格直接生成,另一种使用提供工具生成; 由于我这边WPS缺少库,所以只能使用工具生成,如下:

osdrv/tools/pc/uboot_tools目录下 解压 tar -zxvf hiregbin-v5.0.1.tgz 查看readme 修改工具执行权限 chmod 777 hiregbin ./hiregbin ./Hi3559AV100-DMEBLITE_8L_T-LPDDR4_2664M_8GB_32bitx2-A73_1608M.xlsm ./reg_info.bin 生成reg_info.bin (3)生成uboot 将临时文件 reg_info.bin 拷贝到 SDK 中的“osdrv/opensource/uboot/u-boot-2016.11/”目 录下, 并命名为: .reg make CROSS_COMPILE=aarch64-himix100-linux- u-boot-z.bin

烧写uboot即可

4. 内核开启mcp2515驱动

进入menuconfig make ARCH=arm64 menuconfig 步骤如下: 海思3559平台MCP2515 SPI转CAN驱动配置1

海思3559平台MCP2515 SPI转CAN驱动配置2

海思3559平台MCP2515 SPI转CAN驱动配置3

海思3559平台MCP2515 SPI转CAN驱动配置4

海思3559平台MCP2515 SPI转CAN驱动配置5

5. 内核设备树dts配置

修改路径: arch/arm64/boot/dts/hisilicon 硬件连接: MCP2515是挂在SPI1的片选0上的

(1)SPICAN设备配置 &spi_bus1{ status = “okay”; #if 0 spidev@0 { compatible = “rohm,dh2228fv”; reg = <0>; pl022,interface = <0>; pl022,com-mode = <0>; spi-max-frequency = <24750000>; }; #endif #if 1 can0: can@0 { compatible = “microchip,mcp2515”; reg = <0>; clocks = <&clk_16m>; spi-max-frequency = <2000000>; interrupt-parent = <&gpio_chip17>; interrupts = <5 0x2>; reset-gpios = <&gpio_chip17 6 0>; status = “okay”; }; #endif
<
(2) 中断脚和复位脚配置

按照上面,中断脚和复位脚对照硬件,配置好GPIO

中断脚对应: GPIO17-5 复位脚对应: GPIO17-6

(3) 时钟配置

要注意的晶振时钟配置要与MCP2515一致,SPI的最大频率根据MCP2515接收端的承受能力来配置,驱动中会默认设置好传输速率

soc { #address-cells = <1>; #size-cells = <1>; compatible = “simple-bus”; device_type = “soc”; interrupt-parent = <&gic>; ranges = <0x0 0x00000000 0x0 0xffffffff>; clk_3m: clk_3m { compatible = “fixed-clock”; #clock-cells = <0>; clock-frequency = <3000000>; }; //add clk_16m: clk_16m { compatible = “fixed-clock”; #clock-cells = <0>; clock-frequency = <16000000>; };

猜你喜欢