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

free-jdx 2020-08-26 14:15:06 5038
1. 前言

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

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

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

(1)修改uboot 参数表

(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
步骤如下:

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>;
                };
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 4 2 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区