CAN 使用 CAN 简介 CAN(Controller Area Network)总线,å³æŽ§åˆ¶å™¨å±€åŸŸç½‘总线,是一ç§æœ‰æ•ˆæ”¯æŒåˆ† 布å¼æŽ§åˆ¶æˆ–实时控制的串行通信网络。CAN总线是一ç§åœ¨æ±½è½¦ä¸Šå¹¿æ³›é‡‡ç”¨çš„总线 å议,被设计作为汽车环境ä¸çš„微控制器通讯。 如果想了解更多的内容å¯ä»¥å‚ 考 CAN应用报告 硬件连接 CAN模å—之间接线:CAN_H接CAN_H,CAN_L接CAN_L。 DTS 节点é…ç½® 公共é…ç½® kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588s.dtsi can0: can@fea50000 { compatible = "rockchip,can-2.0"; reg = <0x0 0xfea50000 0x0 0x1000>; interrupts = <GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru CLK_CAN0>, <&cru PCLK_CAN0>; clock-names = "baudclk", "apb_pclk"; resets = <&cru SRST_CAN0>, <&cru SRST_P_CAN0>; reset-names = "can", "can-apb"; pinctrl-names = "default"; pinctrl-0 = <&can0m0_pins>; tx-fifo-depth = <1>; rx-fifo-depth = <6>; status = "disabled"; }; can1: can@fea60000 { compatible = "rockchip,can-2.0"; reg = <0x0 0xfea60000 0x0 0x1000>; interrupts = <GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru CLK_CAN1>, <&cru PCLK_CAN1>; clock-names = "baudclk", "apb_pclk"; resets = <&cru SRST_CAN1>, <&cru SRST_P_CAN1>; reset-names = "can", "can-apb"; pinctrl-names = "default"; pinctrl-0 = <&can1m0_pins>; tx-fifo-depth = <1>; rx-fifo-depth = <6>; status = "disabled"; }; can2: can@fea70000 { compatible = "rockchip,can-2.0"; reg = <0x0 0xfea70000 0x0 0x1000>; interrupts = <GIC_SPI 343 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cru CLK_CAN2>, <&cru PCLK_CAN2>; clock-names = "baudclk", "apb_pclk"; resets = <&cru SRST_CAN2>, <&cru SRST_P_CAN2>; reset-names = "can", "can-apb"; pinctrl-names = "default"; pinctrl-0 = <&can2m0_pins>; tx-fifo-depth = <1>; rx-fifo-depth = <6>; status = "disabled"; }; æ¿çº§é…ç½® arch/arm64/boot/dts/rockchip/rk3588-firefly-aio-3588q.dtsi &can1 { status = "okay"; assigned-clocks = <&cru CLK_CAN1>; assigned-clock-rates = <200000000>; pinctrl-names = "default"; pinctrl-0 = <&can1m1_pins>; }; ç”±äºŽç³»ç»Ÿæ ¹æ®ä¸Šè¿°dts节点创建的CAN设备åªæœ‰ä¸€ä¸ªï¼Œè€Œç¬¬ä¸€ä¸ªåˆ›å»ºçš„设备为CAN0 通信测试 CAN 通信测试 使用 candump å’Œ cansend 工具进行收å‘报文测试å³å¯ï¼Œå°†å·¥å…·push到 /system/bin/目录下执行。工具包å«åœ¨SDKä¸,也å¯ä»¥åœ¨ 官方 或者 github 下载。 #在收å‘端关é—can0设备 ip link set can0 down #在收å‘端设置比特率为250Kbps ip link set can0 type can bitrate 250000 #在收å‘端打开can0设备 ip link set can0 up #在接收端执行candump,阻塞ç‰å¾…报文 candump can0 #在å‘é€ç«¯æ‰§è¡Œcansend,å‘é€æŠ¥æ–‡ cansend can0 123#1122334455667788 更多指令 1〠ip link set canX down //å…³é—can设备; 2〠ip link set canX up  //å¼€å¯can设备; 3〠ip -details link show canX //显示can设备详细信æ¯ï¼› 4〠candump canX //接收can总线å‘æ¥æ•°æ®ï¼› 5〠ifconfig canX down //å…³é—can设备,以便é…ç½®; 6〠ip link set canX up type can bitrate 250000 //设置can波特率 7〠conconfig canX bitrate + 波特率; 8〠canconfig canX start //å¯åŠ¨can设备; 9〠canconfig canX ctrlmode loopback on //回环测试; 10ã€canconfig canX restart // é‡å¯can设备; 11ã€canconfig canX stop //åœæ¢can设备; 12ã€canecho canX //查看can设备总线状æ€ï¼› 13ã€cansend canX --identifier=ID+æ•°æ® //å‘é€æ•°æ®ï¼› 14ã€candump canX --filter=ID:mask //使用滤波器接收ID匹é…çš„æ•°æ® FAQS 总结调试过程ä¸é‡åˆ°çš„å‡ ä¸ªé—®é¢˜åŠè§£å†³æ–¹æ³•ï¼š 报文å‘é€åŽå¾ˆä¹…æ‰æŽ¥æ”¶åˆ°ï¼Œæˆ–者接收ä¸åˆ°ã€‚ 检查总线 CAN_H å’Œ CAN_L, æœé‚¦çº¿æ˜¯å¦æ¾åŠ¨æˆ–者接å。 CAN时钟频率é…ç½® CAN 如果CAN的比特率1M建议修改CAN时钟到300M, ä¿¡å·æ›´ç¨³å®šã€‚低于1M比特率的, æ—¶ 钟设置200Må°±å¯ä»¥ã€‚