EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板特别设计了一组SPI引脚【P8】,专为SPI转CAN-FD应用而引出,为用户提供了极大的便利。
& p8 b& U# l) J9 N- qMCP2518FD是一款在各行业中都有着广泛应用的CAN-FD控制器芯片,本文就将为大家介绍如何在飞凌嵌入式RK3562J开发板上适配MCP2518FD芯片。 7 R6 N6 d6 ?) ~" Z9 f) e
(建议您在手机、平板或电脑的浅色模式下阅读本文) 3 k0 b2 D; I* a7 S
1适配驱动 RK3562J的内核中已经具备MCP2518FD的驱动文件,要在配置文件中将驱动配置进内核,在kernel下打开图形化配置界面make menuconfig ARCH=ARM64。
- Z6 Z! p; ]+ f" E" P2 q(1) 按下 ‘/’ 键进入搜索界面,输入 mcp251 可搜索MCP2518驱动:
, @& k8 E2 U8 t8 N' ?+ G![]()
* t+ v, B* t2 B上图中的CAN_MCP251XFD就是适配MCP2518FD模块的驱动。
( ]6 l) t4 @- ~( w(2) 选择 2 将其打 * 编译进内核: ) y: T) n* f0 I$ T5 z' u) d
6 ~) J0 r1 K( K' ^0 y
![]()
( P0 G5 k# U: ^/ J; p; g(3)选择 save 保存配置到defconfig文件,文件路径: /home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig 2适配设备树 (1) 飞凌嵌入式RK3562J开发板已引出一组SPI引脚: / _- n" U8 z2 z q
$ b4 J* ~0 Z3 ?& p![]()
. ?& c/ b9 }3 T3 j( y9 }(2) 驱动配置完成后要配置的是设备树文件: OK3562-C-common.dtsi
; }5 Q T$ C! F! O A3 T(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>; };};
0 L1 b# L5 p! H6 c% `9 w
/ p I, K) S8 Y9 h7 D6 L
① mcp2518_clk 是时钟频率节点,要匹配模块实际的晶振频率; ② 模块上有的 INT 脚是模块的中断脚,在适配时需要连接一个可控的GPIO引脚作为终端脚; ③ 在 spi2 节点下添加匹配MCP2518驱动的设备树信息,compatible 信息不能出错,这是匹配驱动的重要属性。
# k% J, t G' y/ v3编译烧写 将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了: 5 s9 ~: w" b$ x9 I4 T7 d
(1) 在源码目录下单独编译kernel: - & n2 U6 X8 X, w7 G2 S: C0 D4 ]
! c$ \/ M3 ~2 v+ }
forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel 在源码目录下的kernel目录下会生成镜像文件 boot.img
D3 K5 a: I: U(2) 将镜像文件烧录到开发板,需要用到工具 RKDevTool ,此工具在OK3562的资料包里可以找到: ① 打开烧写工具; ② 用Type-C数据线连接PC和开发板底部的Type-C0接口; ③ 按住开发板的Recovery键不要松开,重启开发板; ④ 注意工具会识别到开发板是否进入烧录状态。 ) j# u, i' ?* M! J0 T
5 r4 a$ T; a( n% Z/ f![]() 5 V8 Q. Q5 E- z8 e0 m
⑤ 择之前编译好的 boot.img 镜像文件,在boot选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板
, v0 s' K5 U' x1 O2 N, L8 N, u n4功能测试 在开发板内搜索can节点,使用 ifconfig -a 命令 u* @6 R4 t3 a! ^2 M
: l2 X/ O' v0 Y/ c( b![]() # _ i+ ^5 R2 m1 P+ |$ h
可以看到生成的can0节点。接下来的功能测试,我们采用OK3562J-C和OK3568-C两块开发板的can0进行数据互发测试。 ) ?5 h" ~; }+ w; K: ^* {/ U
(1) OK3562J-C开发板接收数据: ① 设置can0的波特率
/ y4 Z6 E# P; j3 X6 v: h9 n% M- q/ ~$ w9 ]
ip link set can0 type can bitrate 500000 * T7 O% K# f; @7 J, N, d. V
② 打开can0设备,并把can0设置成服务端接收数据 ; x3 G$ J2 i! c$ P! C
ifconfig can0 up //打开can0设备 candump can0& //can0设备设置成服务端# r. ]( c1 W9 Z+ P& [
; B6 D* k. d% v4 L5 O$ K) N3 x9 {2 |' q& F
![]() 8 M; x. K& `% x" u+ @$ Q
③ 配置OK3568-C开发板的can0作为客户端,发送信息给OK3562J-C开发板的can0 ' u, E& a8 E' q e( _
ifconfig can0 down ip link set can0 up type can bitrate 500000 ifconfig can0 up cansend can0 123#1122334aabbccd //发送信息
# A+ A3 d6 {+ \) x1 A- S8 z
9 E" x. K& A0 i$ f, c# l1 P
$ J# ^# s) s2 a- v" i& D2 b
% v6 D6 O6 F: x![]() ) `, t( Z, U) b
④ OK3562J-C开发板会收到OK3568发来的消息
( p" g4 J+ G, f. q# t) B5 h9 T. t2 b( a! A2 p. s
![]()
! E: C+ J0 M& h7 M2 J(注:上图中出现的报错是MCP2518FD驱动的问题,测试不会影响通信。) - f& c0 s; z+ F2 v: o
(2) OK3562J-C开发板发送数据: ① 设置波特率等操作同上,在配置功能时要使用 cansend 命令发送数据。 |2 ?/ I1 @; }! q- | o% D/ @
( J( s# u6 }2 T. H J5 O. @
![]()
添加图片注释,不超过 140 字(可选)
6 f$ W9 k+ m4 d. p2 G! b" E3 {, _' a7 Y6 i0 h( A4 S
② OK3568-C依照OK3562-C的方法配置成接收数据的服务端。
% P% Q7 g# Z6 e$ b* E+ k/ P' v
+ |6 s2 f4 |7 N* T- " t2 x. \6 Y' l. w! q7 f% o) p! b% S; i
- $ u2 P8 j( |4 r2 v* r: d
$ u x: A9 E+ O8 g$ l$ q _
ifconfig can0 down & t! [' \# i1 W( Q1 l2 j
, Y$ t/ S% R( k. A F3 C* u6 u
![]()
, s" F$ s" ]6 D: A可以看到,两块开发板可以进行正常的数据互发。以上是飞凌嵌入式RK3562J开发板适配和测试MCP2518FD模块的全部过程,希望能够对大家的项目开发有所帮助。
) N" X6 {% c* n* E |