BB-black开发板[Linux arm-v8]

bb-black添加SocketCAN驱动--Apple的学习笔

2020-05-23  本文已影响0人  applecai

Linux基于pinctrl的LED控制—Apple的学习笔记我先复习了下设备树,然后做了LED控制把整个流程过了一遍。开始添加CAN驱动。其实linux的很多外设驱动都很完备了,都抽象出来了,更不用说CAN这样的标准内设,而板级相关的内容主要在设备树中修改。所以我的思路是正确的,CAN驱动我只是修改了下设备树,然后在kernel中配置编译到镜像后,就ok了,站在巨人的肩膀上,分分钟搞定。将来有空再研究下它的详细代码设计,一定会有收获。本次添加CAN驱动只是为了完成PC+linux开发板+MCU开发板的小系统项目中的一个步骤。

1. 修改设备树

参考Document中的c_can.txt说明。
通过UM及原理图,选择未使用并且通过扩展接口连接出来的引脚dcan1。追加节点


&dcan1 {

pinctrl-names = "default";

pinctrl-0 = <&dcan1_pins>;

status = "okay";

};

添加pinctrl功能脚设置。


dcan1_pins: pinmux_dcan1_pins {

 pinctrl-single,pins = <

 /* uart1_rxd.dcan1_tx */

 AM33XX_IOPAD(0x980, PIN_OUTPUT | MUX_MODE2)

 /* uart1_txd.dcan1_rx */

 AM33XX_IOPAD(0x984, PIN_INPUT | MUX_MODE2)

 >;

};

2. Kernel中配置CAN

参考https://processors.wiki.ti.com/index.php/AM335X_DCAN_Driver_Guide中的Linux Driver Configuration章节

3. 更新dtb和zImage

能正确识别驱动


image.png

4. 检查使用的通道

通道实际是CAN1,通过基地址验证正确。

        dcan1: can@481d0000 {
            compatible = "ti,am3352-d_can";
            ti,hwmods = "d_can1";
            reg = <0x481d0000 0x2000>;
            clocks = <&dcan1_fck>;
            clock-names = "fck";
            syscon-raminit = <&scm_conf 0x644 1>;
            interrupts = <55>;
            status = "disabled";
        };
image.png

5.测试CAN驱动功能通过

参考官网D_CAN的CAN Utilities章节
启动can0

image.png
测试自收发
image.png
ip查看采样点和clock的命令
image.png

7. socketCAN架构

image.png
上一篇下一篇

猜你喜欢

热点阅读