CANBUS Pinmux DTS Driver
PinMux
PinMux Tool:http://www.ti.com/tool/pinmuxtool
可以獲得以下DTS Pinctrl,另外兩個是board文件,也可以用此方式設定
mydcan1_pins_default: mydcan1_pins_default {
pinctrl-single,pins = <
0x16c ( PIN_INPUT_PULLUP | MUX_MODE2 ) /* (E17) uart0_rtsn.dcan1_rx */
0x168 ( PIN_OUTPUT_PULLUP | MUX_MODE2 ) /* (E18) uart0_ctsn.dcan1_tx */
>;
};
|
DeviceTree
在uart3_pins_default 後加上 mydcan1 , pin 沒有被調動不會生效的
uart3_pins_default: pinmux_uart3_pins_default {
pinctrl-single,pins = <
0x168 (PIN_INPUT_PULLUP | MUX_MODE1) /* uart0_ctsn.uart4_rxd */
0x16c (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* uart0_rtsn.uart4_txd */
>;
};
mydcan1_pins_default: mydcan1_pins_default {
pinctrl-single,pins = <
0x16c ( PIN_INPUT_PULLUP | MUX_MODE2 ) /* (E17) uart0_rtsn.dcan1_rx */
0x168 ( PIN_OUTPUT_PULLUP | MUX_MODE2 ) /* (E18) uart0_ctsn.dcan1_tx */
>;
};
|
將&uart3 註解掉,並新增 &dcan1
/*
&uart3 {
pinctrl-names = "default";
pinctrl-0 = <&uart3_pins_default>;
status = "okay";
};
*/
&dcan1 {
pinctrl-names = "default";
pinctrl-0 = <&mydcan1_pins_default>;
status = "okay";
};
|
compatible 是 am3352-d_can
dcan1: can@481d0000 {
compatible = "ti,am3352-d_can";
ti,hwmods = "d_can1";
clocks = <&dcan1_fck>;
clock-names = "fck";
reg = <0x481d0000 0x2000>;
syscon-raminit = <&am33xx_control_module 0x644 1>;
interrupts = <55>;
status = "disabled";
};
|
Make dtb
export PATH= your toolchain
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x-boneblack.dtb
|
Kernel and Driver
Make menuconfig
選取Networking support

選取 CAN Bus subsystem support

選取下列三項,Gateway 應該可以不用

選取CAN Device driver 後如下選取

選取 Bosch C_CAN/D_CAN device > Generic Platform Bus based C_CAN/D_CAN driver

make
檢查
檢查 pinmux 是否正確
cd /sys/kernel/debug/pinctrl/44e10800.pinmux
cat pinmux.-pins
pin 90 (44e10968.0): 481d0000.can (GPIO UNCLAIMED) function mydcan1_pins_default group mydcan1_pins_default
pin 91 (44e1096c.0): 481d0000.can (GPIO UNCLAIMED) function mydcan1_pins_default group mydcan1_pins_default
cat pins
pin 90 (44e10968.0) 00000012 pinctrl-single
pin 91 (44e1096c.0) 00000032 pinctrl-single
|
可以知道pinmux 有沒有正確作用
檢查CAN裝置
ip link set can0 up type can bitrate 125000
ifconfig
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING 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:71
|
因為要分析Canbus driver 架構
之前用過buildroot ,這次用 yocto 好了
預計
yocto > network driver > canbus driver