找回密码
 注册
关于网站域名变更的通知
查看: 242|回复: 1
打印 上一主题 下一主题

【RK3562J开发笔记】MCP2518FD外部CAN-FD控制器的调试方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
 楼主| 发表于 2024-12-7 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 飞凌嵌入式 于 2024-12-7 14:49 编辑 $ |/ ?8 e  o; s% A# v

3 j6 f/ H* b7 j: B' b( H
“SPI转CAN-FD”是嵌入式开发领域的常用方法,它极大地促进了不同通信接口之间的无缝连接,并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动,从而原生支持这一功能。该开发板特别设计了一组SPI引脚【P8】,专为SPI转CAN-FD应用而引出,为用户提供了极大的便利。

2 c% `2 P2 m% q! }- Y! \$ C
MCP2518FD是一款在各行业中都有着广泛应用的CAN-FD控制器芯片,本文就将为大家介绍如何在飞凌嵌入式RK3562J开发板上适配MCP2518FD芯片。
* C7 S) g4 Z6 x. {
1、适配驱动
RK3562J的内核中已经具备MCP2518FD的驱动文件,要在配置文件中将驱动配置进内核,在kernel下打开图形化配置界面make menuconfig ARCH=ARM64。

2 Q. K4 F1 I/ c' P3 X# Q1 [
(1) 按下 ‘/’ 键进入搜索界面,输入 mcp251 可搜索MCP2518驱动:
上图中的CAN_MCP251XFD就是适配MCP2518FD模块的驱动。
; O5 m$ e; O) ]! ~
(2) 选择 2 将其打 * 编译进内核:

* l; r$ n- P, m6 Q
(3)选择 save 保存配置到defconfig文件,文件路径:
/home/forlinx/3562/OK3562-linuxsource/kernel/arch/arm64/configs/OK3562_Linux_defconfig
, L) G. H5 D# l. b  ?% {
2、适配设备树
(1) 飞凌嵌入式RK3562J开发板已引出一组SPI引脚:
(2) 驱动配置完成后要配置的是设备树文件:
OK3562-C-common.dtsi

8 p; E. F/ y# {; J1 A
(3) 具体的配置信息如下:
  1. diff --git a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi" b* q0 L5 l; ]: W; J
  2. index 158f03d70..671a491bf 100644' X, Q2 {" H  t0 Z" ~, b8 k
  3. --- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi$ P/ j- s3 j, m" E8 ~9 e
  4. +++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi7 ~1 N2 G7 k7 T
  5. @@ -19,6 +19,12 @@5 s" w* M: z% U9 z+ [# p
  6. model = "Forlinx OK3562 Board";. n; W: ]0 u+ Z5 P$ w7 {3 o9 Z
  7. compatible = "forlinx,ok3562","rockchip,rk3562";: _/ g% d: N, \  Y
  8. + mcp2518_clk: mcp2518-clk {% t8 y9 z, R; ^2 S( I2 ^
  9. + compatible = "fixed-clock";# s+ l6 U5 h) V. Y' p4 w" D
  10. + #clock-cells = <0>;
    - P9 V, c5 S  M- B2 b" V3 t: e8 |% z
  11. + clock-frequency = <40000000>;
    * R4 C! v) k2 C7 t8 C
  12. + };
    - Z- J; k/ Q9 j
  13. +" t6 w6 A9 _( U3 s
  14. forlinx-control {2 j' G: [$ h1 f: F$ S/ m
  15. status = "disabled";3 W. y8 d( ^+ ?7 B: E
  16. disp_type = "mipi"; //mipi or lvds5 ?. z# Q1 W% k. ?; h
  17. @@ -662,6 +668,13 @@4 P# g7 |, \+ Y# o+ r
  18. };
    , t; n$ D  u4 T6 U3 g! r/ k) L$ i
  19. &pinctrl {0 \( C7 R) R$ a! k
  20. +( {# h& ~. H! D! U" z& B
  21. + mcp2518 {5 O: L- {$ `3 W2 [" X
  22. + mcp2518_irq_pins:mcp2518_irq_pins {0 y4 V8 Q, q+ D( J% [# O
  23. + rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;0 G8 U$ s3 K, I5 c5 {
  24. + };' N1 ^" k: ?# x: {/ U  o6 q
  25. + };
    : }4 g# P! ^3 u
  26. +0 M" v1 V5 N4 ], U
  27. touch {& C# E! C+ r' X; p/ @
  28. gt928_lvds_gpio:gt928-lvds-gpio {
    , `- Y* W6 `. Q" S. @: v( `
  29. rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,2 {5 n  e% ^8 T
  30. @@ -980,13 +993,24 @@; ~& x. G3 N1 K
  31. &spi2 {
    ! M2 R% E( B) `# h
  32. + pinctrl-names = "default";# p0 |9 W/ y8 x$ B8 y8 f" W% U
  33. + pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;  T: K7 A* w; I( j! l7 r. }
  34. status = "okay";  F! [. [6 E; |2 ]4 X: r
  35. - spi_dev0: spi@0 {  x) f5 |* v3 V. P1 U9 b& G! p
  36. +/* spi_dev0: spi@0 {
    1 @+ j; g9 p2 X" B: U
  37. compatible = "rohm,dh2228fv";" W. ^- B/ L, ^3 b3 q
  38. 2 / 5, K5 c1 M0 Z/ {) Y; _+ K, I9 X
  39. pl022,com-mode = <1>;
    0 \0 L: Q0 T9 h& z" e' g
  40. spi-max-frequency = <10000000>;! B) h' K) N( `! e6 [
  41. reg = <0>;
      @+ Y8 c  U( y5 |+ z7 N
  42. status = "okay";
    , i! P+ ^6 c4 M7 T  a- F5 B
  43. + };*/  O7 |8 j7 R$ P4 w
  44. + spi@0{
    0 o' Y" L) R9 [2 O1 b
  45. + compatible = "microchip,mcp2518fd";
    ! s9 H- J  M- u. V
  46. + reg = <0>;& o, ?3 y; P4 l* u# x
  47. + clocks = <&mcp2518_clk>;* G/ p- K4 h" }2 ]+ c! F- ]
  48. + pinctrl-names = "default";& F: D. i, @0 T; C1 x0 ?, ^8 D
  49. + pinctrl-0 = <&mcp2518_irq_pins>;8 |- N  G! ^/ @, s. ]$ ^
  50. + spi-max-frequency = <20000000>;* e$ _* F: k8 t! l
  51. + interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>;9 p, ~2 ^/ s" H
  52. };
    5 l2 G3 s4 K& D% r# _% _
  53. };7 O2 A0 m  y0 ]2 [( G; p. u
复制代码
& R# U2 |; W7 ~- I7 [
① mcp2518_clk 是时钟频率节点,要匹配模块实际的晶振频率;
② 模块上有的 INT 脚是模块的中断脚,在适配时需要连接一个可控的GPIO引脚作为终端脚;
③ 在 spi2 节点下添加匹配MCP2518驱动的设备树信息,compatible 信息不能出错,这是匹配驱动的重要属性。
8 B6 s4 {/ C" i1 d; ]0 {% m. ^
3、编译烧写
将以上的驱动和设备树配置好后,编译内核烧写进开发板就可以测试了:
(1) 在源码目录下单独编译kernel:
forlinx@ubuntu:~/3562/OK3562-linux-source$ ./build.sh kernel
在源码目录下的kernel目录下会生成镜像文件 boot.img

1 E9 E! Q( `6 M' q" h( K) Y
(2) 将镜像文件烧录到开发板,需要用到工具 RKDevTool ,此工具在OK3562的资料包里可以找到:
① 打开烧写工具;
② 用Type-C数据线连接PC和开发板底部的Type-C0接口;
③ 按住开发板的Recovery键不要松开,重启开发板;
④ 注意工具会识别到开发板是否进入烧录状态。
⑤ 择之前编译好的 boot.img 镜像文件,在boot选项前面打勾,点击执行进行烧写,烧写完成会自动重启开发板

0 L+ Y3 j$ l7 z; l' P
4、功能测试
在开发板内搜索can节点,使用 ifconfig -a 命令
可以看到生成的can0节点。接下来的功能测试,我们采用OK3562J-C和OK3568-C两块开发板的can0进行数据互发测试。

/ G9 N8 |, N- n
(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/ ?: S* n4 |8 z9 v
(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&

0 e% t+ p8 W$ _  ^; v6 J0 y
可以看到,两块开发板可以进行正常的数据互发。以上是飞凌嵌入式RK3562J开发板适配和测试MCP2518FD模块的全部过程,希望能够对大家的项目开发有所帮助。

* U1 N. \* P5 J

该用户从未签到

2#
发表于 2024-12-11 10:36 | 只看该作者
开发板例子程序吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 18:52 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表