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
ip查看采样点和clock的命令
image.png