EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 飞凌嵌入式 于 2024-12-7 14:49 编辑
, u3 s9 H3 E; M: e
! o: z" K) ?9 L+ n“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板特别设计了一组SPI引脚【P8】,专为SPI转CAN-FD应用而引出,为用户提供了极大的便利。 ' K7 z1 ]2 M; M! w! R: Q0 j
MCP2518FD是一款在各行业中都有着广泛应用的CAN-FD控制器芯片,本文就将为大家介绍如何在飞凌嵌入式RK3562J开发板上适配MCP2518FD芯片。 ( i N! p' A9 I; b! U. a+ ]
1、适配驱动RK3562J的内核中已经具备MCP2518FD的驱动文件,要在配置文件中将驱动配置进内核,在kernel下打开图形化配置界面make menuconfig ARCH=ARM64。
) d& c: ?( ]; q+ q
(1) 按下 ‘/’ 键进入搜索界面,输入 mcp251 可搜索MCP2518驱动: 上图中的CAN_MCP251XFD就是适配MCP2518FD模块的驱动。 ) T; W7 [5 F0 [
(2) 选择 2 将其打 * 编译进内核: 3 [8 s% t- o. o% e# X$ u$ X! m
(3)选择 save 保存配置到defconfig文件,文件路径: /home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig - b* J$ m" ]' D* m" o
2、适配设备树(1) 飞凌嵌入式RK3562J开发板已引出一组SPI引脚: (2) 驱动配置完成后要配置的是设备树文件: OK3562-C-common.dtsi 6 m) T" ^; k" ^' W3 l
(3) 具体的配置信息如下: - diff --git a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
5 e5 q+ D6 X' ]+ {* p! ?' @1 J- f - index 158f03d70..671a491bf 100644, C/ u/ q. G2 d( k' {- M
- --- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi5 X% G5 M* L+ X; G/ ?
- +++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
7 v% h3 K+ T2 l0 J4 t0 C) S - @@ -19,6 +19,12 @@
$ f+ R$ w6 b2 ^2 R" } - model = "Forlinx OK3562 Board";
( d( q7 M! E/ A - compatible = "forlinx,ok3562","rockchip,rk3562";
1 A1 o' n" ^+ U$ @. v- s" M9 V: P - + mcp2518_clk: mcp2518-clk {
1 m/ F$ U* m4 y - + compatible = "fixed-clock";/ T' G+ n8 X! k3 F; b
- + #clock-cells = <0>;: A6 ~$ K3 _0 z, \9 c! i
- + clock-frequency = <40000000>;
" }5 r# H) o% r" J- D: [2 n - + };
) u6 c3 o6 k, x - +
! t& t! b8 p: u: |3 g - forlinx-control {
f2 B( \; t J3 Z# p1 J' k - status = "disabled";- o7 A" E% D; n; o2 ?
- disp_type = "mipi"; //mipi or lvds
" X7 P* v* I1 _: ]! U6 F+ z - @@ -662,6 +668,13 @@
1 u! Y: d: P7 I9 V4 b8 v y - };
. o" U% s1 V/ C - &pinctrl {# A8 m5 }: Z3 g& T
- +
5 F* C, J7 b+ a+ M U - + mcp2518 {
# h1 q+ d2 O/ v - + mcp2518_irq_pins:mcp2518_irq_pins {
( G x2 _* p7 |8 l; `: m - + rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;$ l% C* I D: J- A
- + };5 g! o- X# {( V: U
- + };
3 ^& p2 W8 P4 V0 ] - +. { K4 S+ a: k- ^' w, s: e
- touch {* m: G1 {+ F, V3 f# |" j
- gt928_lvds_gpio:gt928-lvds-gpio {
' t$ B7 {; I' H - rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,( K2 C2 x2 R0 {' A: X" Q- D
- @@ -980,13 +993,24 @@$ Y+ g% U- f$ D* \' u2 x
- &spi2 {3 \. k, [9 U M- g/ W
- + pinctrl-names = "default";
2 N0 ~7 ~/ ~& r7 \ - + pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;- f' ^: m- m+ b1 Q5 O! v
- status = "okay";
/ u/ j% k/ G, v4 H1 k - - spi_dev0: spi@0 {5 T! M/ J+ p0 k9 I& P2 A5 ^! D
- +/* spi_dev0: spi@0 {; a5 {- `3 C. H8 V/ l7 D
- compatible = "rohm,dh2228fv";
3 z1 f+ U7 a% k+ a5 S - 2 / 5
% X- d+ ^% h- _/ a5 N. U4 V7 C9 z - pl022,com-mode = <1>;# o! w: [& D8 W1 \6 {
- spi-max-frequency = <10000000>;
7 [. j( f, A6 i* ^& p( z: Z3 u - reg = <0>;
! ?& S' r" M1 y j, }0 A% l6 v# h - status = "okay";
3 e" u. o& {9 m1 Y3 f+ {- ~1 E - + };*/* h2 G% s& ]. N: U, I# H! z
- + spi@0{
& `; o6 I9 _8 X' @5 Q' S - + compatible = "microchip,mcp2518fd";
) T) c4 `, c$ Q1 ]+ M - + reg = <0>;' e( ?: q; k- M- {! {% e
- + clocks = <&mcp2518_clk>;6 S- I6 A% C- i4 y
- + pinctrl-names = "default";
* A: p6 o& U" v. F/ W - + pinctrl-0 = <&mcp2518_irq_pins>;
9 Q3 W# g, X0 e: P4 O0 a. K9 U - + spi-max-frequency = <20000000>;
/ W# p, O) c& t- x - + interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>;6 ]. w5 k! t5 |
- };
9 J2 S4 S/ J9 ~ c+ h$ B0 I - };
, J% x, ^* ^) a7 Y
复制代码 2 s4 j/ E! c q9 B
① mcp2518_clk 是时钟频率节点,要匹配模块实际的晶振频率; ② 模块上有的 INT 脚是模块的中断脚,在适配时需要连接一个可控的GPIO引脚作为终端脚; ③ 在 spi2 节点下添加匹配MCP2518驱动的设备树信息,compatible 信息不能出错,这是匹配驱动的重要属性。 3 i5 u: _% M. ]- L' E' V
3、编译烧写将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了: (1) 在源码目录下单独编译kernel: forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel 在源码目录下的kernel目录下会生成镜像文件 boot.img
! F) d0 O/ M3 B7 ~(2) 将镜像文件烧录到开发板,需要用到工具 RKDevTool ,此工具在OK3562的资料包里可以找到: ① 打开烧写工具; ② 用Type-C数据线连接PC和开发板底部的Type-C0接口; ③ 按住开发板的Recovery键不要松开,重启开发板; ④ 注意工具会识别到开发板是否进入烧录状态。 ⑤ 择之前编译好的 boot.img 镜像文件,在boot选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板
}4 ~0 o5 w' G, {4、功能测试在开发板内搜索can节点,使用 ifconfig -a 命令 可以看到生成的can0节点。接下来的功能测试,我们采用OK3562J-C和OK3568-C两块开发板的can0进行数据互发测试。 ) E6 j0 V! ^" f1 ^, r; W8 y
(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驱动的问题,测试不会影响通信。)
: ^: N: e& T; x(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&
' r' B) v# t, }2 P8 ^6 ~, t( B7 {- o可以看到,两块开发板可以进行正常的数据互发。以上是飞凌嵌入式RK3562J开发板适配和测试MCP2518FD模块的全部过程,希望能够对大家的项目开发有所帮助。 ) B3 I8 t, b3 w1 i
|