EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板特别设计了一组SPI引脚【P8】,专为SPI转CAN-FD应用而引出,为用户提供了极大的便利。
9 O' z# J* y' r/ ?" CMCP2518FD是一款在各行业中都有着广泛应用的CAN-FD控制器芯片,本文就将为大家介绍如何在飞凌嵌入式RK3562J开发板上适配MCP2518FD芯片。
$ o: S5 s" N* m. z(建议您在手机、平板或电脑的浅色模式下阅读本文)
, F5 M" e8 V. z5 \: A* p `% p2 S1适配驱动 RK3562J的内核中已经具备MCP2518FD的驱动文件,要在配置文件中将驱动配置进内核,在kernel下打开图形化配置界面make menuconfig ARCH=ARM64。
) m, c( x9 |( h+ Z8 E% [6 t% ^- Y Y(1) 按下 ‘/’ 键进入搜索界面,输入 mcp251 可搜索MCP2518驱动:
6 C3 j( k3 q5 K![]() & [ P$ I" b. l3 j8 K; h3 G& H. h' H
上图中的CAN_MCP251XFD就是适配MCP2518FD模块的驱动。 % P7 H+ J2 q0 }
(2) 选择 2 将其打 * 编译进内核: $ H6 t) l; H8 o7 g! [$ W
/ ?7 `% I5 ?% c+ [( D![]()
( j" C% e7 s" M' X6 }( ` g! D6 ^(3)选择 save 保存配置到defconfig文件,文件路径: /home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig 2适配设备树 (1) 飞凌嵌入式RK3562J开发板已引出一组SPI引脚: 6 W8 M. E* r7 w% Y9 x7 P7 Q
- h# K8 }# w' q% O6 i* \! `3 }
![]()
' e' l9 o* m$ c9 u8 `(2) 驱动配置完成后要配置的是设备树文件: OK3562-C-common.dtsi / h3 F/ J) \! P) Y' ~
(3) 具体的配置信息如下: diff --git a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsiindex 158f03d70..671a491bf 100644--- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi+++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi@@ -19,6 +19,12 @@model = "Forlinx OK3562 Board";compatible = "forlinx,ok3562","rockchip,rk3562";+ mcp2518_clk: mcp2518-clk {+ compatible = "fixed-clock";+ #clock-cells = <0>;+ clock-frequency = <40000000>;+ };+forlinx-control {status = "disabled";disp_type = "mipi"; //mipi or lvds@@ -662,6 +668,13 @@};&pinctrl {++ mcp2518 {+ mcp2518_irq_pins:mcp2518_irq_pins {+ rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;+ };+ };+touch {gt928_lvds_gpio:gt928-lvds-gpio {rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,@@ -980,13 +993,24 @@&spi2 {+ pinctrl-names = "default";+ pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;status = "okay";- spi_dev0: spi@0 {+/* spi_dev0: spi@0 {compatible = "rohm,dh2228fv";2 / 5pl022,com-mode = <1>;spi-max-frequency = <10000000>;reg = <0>;status = "okay";+ };*/+ spi@0{+ compatible = "microchip,mcp2518fd";+ reg = <0>;+ clocks = <&mcp2518_clk>;+ pinctrl-names = "default";+ pinctrl-0 = <&mcp2518_irq_pins>;+ spi-max-frequency = <20000000>;+ interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>; };};
( R1 t8 \; y e6 n: U5 I" B7 J3 u5 C, s w+ ]: {
① mcp2518_clk 是时钟频率节点,要匹配模块实际的晶振频率; ② 模块上有的 INT 脚是模块的中断脚,在适配时需要连接一个可控的GPIO引脚作为终端脚; ③ 在 spi2 节点下添加匹配MCP2518驱动的设备树信息,compatible 信息不能出错,这是匹配驱动的重要属性。 ) s* ^% V2 @% ~+ H% ^% I
3编译烧写 将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了: 9 z" J" ^; W* P
(1) 在源码目录下单独编译kernel:
& k: @3 v4 d8 q1 j( l9 ~' W+ T' H0 u: J# i
forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel 在源码目录下的kernel目录下会生成镜像文件 boot.img , X6 D; E9 Y$ n. _8 x I3 S
(2) 将镜像文件烧录到开发板,需要用到工具 RKDevTool ,此工具在OK3562的资料包里可以找到: ① 打开烧写工具; ② 用Type-C数据线连接PC和开发板底部的Type-C0接口; ③ 按住开发板的Recovery键不要松开,重启开发板; ④ 注意工具会识别到开发板是否进入烧录状态。
p6 c. `& w* |! V$ r8 I4 [8 N2 r1 h J/ D7 o5 A
![]() ! r* _" S0 ]% }5 Y8 ]7 M: J% n8 i
⑤ 择之前编译好的 boot.img 镜像文件,在boot选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板
# z- I/ D9 M8 D( k. M4 i% s4功能测试 在开发板内搜索can节点,使用 ifconfig -a 命令
+ B& \- f- N8 S# ^/ T
) D+ A0 J" [8 F$ v( t![]()
1 {) O. ^. y' q可以看到生成的can0节点。接下来的功能测试,我们采用OK3562J-C和OK3568-C两块开发板的can0进行数据互发测试。 / q1 C' y" Z1 J b0 M' o
(1) OK3562J-C开发板接收数据: ① 设置can0的波特率
+ T6 e: X- c* F, M
" h5 w0 n3 y$ {% a) m0 R- U7 ? V2 |
ip link set can0 type can bitrate 500000 + P* J: ]" [& ^) |6 C
② 打开can0设备,并把can0设置成服务端接收数据 - 7 W2 a& s6 d; Q' W! |: ~8 p- [
$ m- C, q2 v. c2 U2 v, `
ifconfig can0 up //打开can0设备 candump can0& //can0设备设置成服务端
& F) D$ L6 p" ?6 J/ _4 g
+ E: U$ r+ n1 x6 a# n Y* W5 _% }* w6 h1 ]7 V% \4 |, y
![]() I* l4 D/ c( C6 L. e4 A7 _+ Q
③ 配置OK3568-C开发板的can0作为客户端,发送信息给OK3562J-C开发板的can0
0 {& E6 R1 d& A8 r* Jifconfig can0 down ip link set can0 up type can bitrate 500000 ifconfig can0 up cansend can0 123#1122334aabbccd //发送信息4 }6 q/ S% i3 n% U$ U
3 J* z6 D y; t# ]# C
0 j2 p! Z1 V+ |! n1 N# n$ Q![]() 4 J/ O" K& D5 {2 v! O+ Q8 _
④ OK3562J-C开发板会收到OK3568发来的消息 ( I" _; ]0 w8 g! d
: X' S+ u. Z' \# Q' ~9 R$ b- U
![]() % Z7 p+ ]7 G/ |) ?" ~. K
(注:上图中出现的报错是MCP2518FD驱动的问题,测试不会影响通信。) ' ^- H- ]6 @7 x" \# N
(2) OK3562J-C开发板发送数据: ① 设置波特率等操作同上,在配置功能时要使用 cansend 命令发送数据。
; p' O6 l( u, ]/ b) { a! x. O/ p1 ~( `9 c
![]()
添加图片注释,不超过 140 字(可选)
6 _0 V7 G ^# u- n" Y; ?9 u7 {
% i% c+ a; f" c* q. q② OK3568-C依照OK3562-C的方法配置成接收数据的服务端。
5 G# f' z q. N8 Q# X/ K
" N& `# H4 P) J9 y% s9 D4 q- 9 W, r. D) ]7 U- J9 |& _9 |6 h
- / c! r$ h1 O6 S5 U. Z% j
8 J6 F: a8 M$ [" x6 A
ifconfig can0 down
7 q/ _ [9 g3 A* u. w- c- {" R! T
![]()
$ ^) s9 G+ y6 s4 H. n可以看到,两块开发板可以进行正常的数据互发。以上是飞凌嵌入式RK3562J开发板适配和测试MCP2518FD模块的全部过程,希望能够对大家的项目开发有所帮助。 # y+ {4 X. C( X/ ^8 x( A
|