EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 飞凌嵌入式 于 2024-12-7 14:49 编辑 9 y4 a! t+ Q" ]: q* o3 r- g
! k E3 ?" D2 G& G
“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板特别设计了一组SPI引脚【P8】,专为SPI转CAN-FD应用而引出,为用户提供了极大的便利。 + i6 R1 I( V. k; F
MCP2518FD是一款在各行业中都有着广泛应用的CAN-FD控制器芯片,本文就将为大家介绍如何在飞凌嵌入式RK3562J开发板上适配MCP2518FD芯片。
7 k6 a! V4 M) N: t) x3 ~- d, Y1、适配驱动RK3562J的内核中已经具备MCP2518FD的驱动文件,要在配置文件中将驱动配置进内核,在kernel下打开图形化配置界面make menuconfig ARCH=ARM64。 1 J9 Q5 b4 x9 h9 g0 L1 S( H: N- w
(1) 按下 ‘/’ 键进入搜索界面,输入 mcp251 可搜索MCP2518驱动: 上图中的CAN_MCP251XFD就是适配MCP2518FD模块的驱动。 - j; \3 z9 i5 S. T
(2) 选择 2 将其打 * 编译进内核:
! B/ l% i Q- }; n) _) ^7 B% }
(3)选择 save 保存配置到defconfig文件,文件路径: /home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig 0 U- {- V" ~$ E
2、适配设备树(1) 飞凌嵌入式RK3562J开发板已引出一组SPI引脚: (2) 驱动配置完成后要配置的是设备树文件: OK3562-C-common.dtsi
8 _* k$ E& [5 W" i$ W(3) 具体的配置信息如下: - diff --git a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
% Q! H% E( z G; m2 t U7 H - index 158f03d70..671a491bf 100644 U. L* V. |) S6 M% L- Z" A! W+ p
- --- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
# z: l+ C" _) b6 v4 M T$ a2 J1 \/ P - +++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi' o: O3 M: A2 Z& c
- @@ -19,6 +19,12 @@
* V- H1 E2 N9 a5 t - model = "Forlinx OK3562 Board";
9 q) K8 h1 E8 {8 } - compatible = "forlinx,ok3562","rockchip,rk3562";
! T) Y! Z B' Q, E1 w- z, ~/ q1 X - + mcp2518_clk: mcp2518-clk {
$ _" T* |3 ?& u% f9 f& W0 J$ U - + compatible = "fixed-clock";# j+ }6 Y0 u( R4 J3 y2 p
- + #clock-cells = <0>;
1 ~7 T& @. x# ?$ } - + clock-frequency = <40000000>;
1 n& S; h; G3 w# |( e8 o1 ?' M' p - + };
. V- u% J. \7 a0 P% P4 Q/ [ - +5 D/ X# ~7 @$ t" k: n, j
- forlinx-control {
+ ]$ {3 f' n% X' Y1 i& K - status = "disabled";
9 D) o F3 X0 a& R# `- u - disp_type = "mipi"; //mipi or lvds
! n* g1 k( \1 w) }4 @- { - @@ -662,6 +668,13 @@
* U: |' {& R% H; K, C - };
% h7 }6 e- z- B* \2 c e4 w9 y - &pinctrl {
( j* ]- ]; |9 M, ?" H' { - +
& ?& X" a& d8 l; d! v - + mcp2518 {
* K% n: R; A3 G2 G0 O6 V - + mcp2518_irq_pins:mcp2518_irq_pins {
, {+ A( z/ V0 O! T- E - + rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;3 z- H8 x" J$ c8 D& \& ]' D; F4 G0 J
- + };4 C# F4 H7 r& E
- + };
* B9 `1 ?7 D, m7 M. I# a/ Y8 W, L. y - +& g6 u9 F9 K1 S* O
- touch {
. A: m C+ t: R( r1 ` - gt928_lvds_gpio:gt928-lvds-gpio {
; H; ]* Y9 M B5 e* \* L1 A - rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,
7 Z5 y+ H' i5 ^ - @@ -980,13 +993,24 @@
1 R% p- S# O$ X% T& m1 L - &spi2 {
9 C; _. w/ y5 j( m% R* U, w - + pinctrl-names = "default";4 T* |6 Z/ d0 x+ u
- + pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;- g: J- K \1 V& l* T: F' ~
- status = "okay";1 u+ s+ \2 J& }3 U- b
- - spi_dev0: spi@0 {
( G8 y8 F6 V# o9 h# E+ }6 I: c - +/* spi_dev0: spi@0 {, Z5 L0 }& D3 O
- compatible = "rohm,dh2228fv";
+ m1 z' e9 a# n8 n9 [' N& t) w - 2 / 51 k" C; P9 v) }+ r. O- ]
- pl022,com-mode = <1>;
% H4 [# z/ H5 |7 d5 T0 F - spi-max-frequency = <10000000>;6 ? ~0 k) C8 Y h" h
- reg = <0>;
8 R* s1 F4 D+ ^, u2 Q1 I+ e6 u - status = "okay";
1 p0 y+ R2 d7 [# d3 k - + };*/3 m3 J2 C5 ]$ x( p% M( Z: s5 T
- + spi@0{+ ~; H; |. P3 | K
- + compatible = "microchip,mcp2518fd";
4 w2 w, d7 z- K8 x1 R1 Y# j p% G( d! R - + reg = <0>;1 g- Y$ U1 r" S6 k# R
- + clocks = <&mcp2518_clk>;" R3 C' N% S1 m
- + pinctrl-names = "default";
, ?# s- m9 S" d0 [* |/ m* i9 Y/ E - + pinctrl-0 = <&mcp2518_irq_pins>;0 c$ _ l* ?- z" z3 W4 {
- + spi-max-frequency = <20000000>;
3 s- R; C) Q( D( i5 R! ? - + interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>;
" F7 }+ i$ j8 Y+ p0 E/ I z - };+ ^& u V$ m: s/ v( n
- };1 O+ Q% C+ ?2 j1 d) {7 d% I
复制代码 8 x) j6 Y1 o) n" l( G
① mcp2518_clk 是时钟频率节点,要匹配模块实际的晶振频率; ② 模块上有的 INT 脚是模块的中断脚,在适配时需要连接一个可控的GPIO引脚作为终端脚; ③ 在 spi2 节点下添加匹配MCP2518驱动的设备树信息,compatible 信息不能出错,这是匹配驱动的重要属性。 ) g+ ]. o4 }: ?" M% _4 T* C% z& u
3、编译烧写将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了: (1) 在源码目录下单独编译kernel: forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel 在源码目录下的kernel目录下会生成镜像文件 boot.img
, L" K# d1 m- t" P! m, p6 f& G(2) 将镜像文件烧录到开发板,需要用到工具 RKDevTool ,此工具在OK3562的资料包里可以找到: ① 打开烧写工具; ② 用Type-C数据线连接PC和开发板底部的Type-C0接口; ③ 按住开发板的Recovery键不要松开,重启开发板; ④ 注意工具会识别到开发板是否进入烧录状态。 ⑤ 择之前编译好的 boot.img 镜像文件,在boot选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板 ( F" d% } k0 L
4、功能测试在开发板内搜索can节点,使用 ifconfig -a 命令 可以看到生成的can0节点。接下来的功能测试,我们采用OK3562J-C和OK3568-C两块开发板的can0进行数据互发测试。 " @2 U/ ^4 M4 ~5 M* Z0 v
(1) OK3562J-C开发板接收数据: ① 设置can0的波特率 ip link set can0 type can bitrate 500000 ② 打开can0设备,并把can0设置成服务端接收数据 ifconfig can0 up //打开can0设备 candump can0& //can0设备设置成服务端 ③ 配置OK3568-C开发板的can0作为客户端,发送信息给OK3562J-C开发板的can0 ifconfig can0 down ip link set can0 up type can bitrate 500000 ifconfig can0 up cansend can0 123#1122334aabbccd //发送信息 ④ OK3562J-C开发板会收到OK3568发来的消息 (注:上图中出现的报错是MCP2518FD驱动的问题,测试不会影响通信。) 9 R" D" i/ [/ w4 R
(2) OK3562J-C开发板发送数据: ① 设置波特率等操作同上,在配置功能时要使用 cansend 命令发送数据。 ② OK3568-C依照OK3562-C的方法配置成接收数据的服务端。 ifconfig can0 down ip link set can0 up type can bitrate 500000 ifconfig can0 up candump can0& % J* @3 F7 \0 K7 S8 r1 ~. B& `) _
可以看到,两块开发板可以进行正常的数据互发。以上是飞凌嵌入式RK3562J开发板适配和测试MCP2518FD模块的全部过程,希望能够对大家的项目开发有所帮助。 ' U5 W( m* l# N: M, c- H+ o
|