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

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

[复制链接]

该用户从未签到

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

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) 具体的配置信息如下:
  1. 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
  2. index 158f03d70..671a491bf 100644, C/ u/ q. G2 d( k' {- M
  3. --- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi5 X% G5 M* L+ X; G/ ?
  4. +++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
    7 v% h3 K+ T2 l0 J4 t0 C) S
  5. @@ -19,6 +19,12 @@
    $ f+ R$ w6 b2 ^2 R" }
  6. model = "Forlinx OK3562 Board";
    ( d( q7 M! E/ A
  7. compatible = "forlinx,ok3562","rockchip,rk3562";
    1 A1 o' n" ^+ U$ @. v- s" M9 V: P
  8. + mcp2518_clk: mcp2518-clk {
    1 m/ F$ U* m4 y
  9. + compatible = "fixed-clock";/ T' G+ n8 X! k3 F; b
  10. + #clock-cells = <0>;: A6 ~$ K3 _0 z, \9 c! i
  11. + clock-frequency = <40000000>;
    " }5 r# H) o% r" J- D: [2 n
  12. + };
    ) u6 c3 o6 k, x
  13. +
    ! t& t! b8 p: u: |3 g
  14. forlinx-control {
      f2 B( \; t  J3 Z# p1 J' k
  15. status = "disabled";- o7 A" E% D; n; o2 ?
  16. disp_type = "mipi"; //mipi or lvds
    " X7 P* v* I1 _: ]! U6 F+ z
  17. @@ -662,6 +668,13 @@
    1 u! Y: d: P7 I9 V4 b8 v  y
  18. };
    . o" U% s1 V/ C
  19. &pinctrl {# A8 m5 }: Z3 g& T
  20. +
    5 F* C, J7 b+ a+ M  U
  21. + mcp2518 {
    # h1 q+ d2 O/ v
  22. + mcp2518_irq_pins:mcp2518_irq_pins {
    ( G  x2 _* p7 |8 l; `: m
  23. + rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;$ l% C* I  D: J- A
  24. + };5 g! o- X# {( V: U
  25. + };
    3 ^& p2 W8 P4 V0 ]
  26. +. {  K4 S+ a: k- ^' w, s: e
  27. touch {* m: G1 {+ F, V3 f# |" j
  28. gt928_lvds_gpio:gt928-lvds-gpio {
    ' t$ B7 {; I' H
  29. rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,( K2 C2 x2 R0 {' A: X" Q- D
  30. @@ -980,13 +993,24 @@$ Y+ g% U- f$ D* \' u2 x
  31. &spi2 {3 \. k, [9 U  M- g/ W
  32. + pinctrl-names = "default";
    2 N0 ~7 ~/ ~& r7 \
  33. + pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;- f' ^: m- m+ b1 Q5 O! v
  34. status = "okay";
    / u/ j% k/ G, v4 H1 k
  35. - spi_dev0: spi@0 {5 T! M/ J+ p0 k9 I& P2 A5 ^! D
  36. +/* spi_dev0: spi@0 {; a5 {- `3 C. H8 V/ l7 D
  37. compatible = "rohm,dh2228fv";
    3 z1 f+ U7 a% k+ a5 S
  38. 2 / 5
    % X- d+ ^% h- _/ a5 N. U4 V7 C9 z
  39. pl022,com-mode = <1>;# o! w: [& D8 W1 \6 {
  40. spi-max-frequency = <10000000>;
    7 [. j( f, A6 i* ^& p( z: Z3 u
  41. reg = <0>;
    ! ?& S' r" M1 y  j, }0 A% l6 v# h
  42. status = "okay";
    3 e" u. o& {9 m1 Y3 f+ {- ~1 E
  43. + };*/* h2 G% s& ]. N: U, I# H! z
  44. + spi@0{
    & `; o6 I9 _8 X' @5 Q' S
  45. + compatible = "microchip,mcp2518fd";
    ) T) c4 `, c$ Q1 ]+ M
  46. + reg = <0>;' e( ?: q; k- M- {! {% e
  47. + clocks = <&mcp2518_clk>;6 S- I6 A% C- i4 y
  48. + pinctrl-names = "default";
    * A: p6 o& U" v. F/ W
  49. + pinctrl-0 = <&mcp2518_irq_pins>;
    9 Q3 W# g, X0 e: P4 O0 a. K9 U
  50. + spi-max-frequency = <20000000>;
    / W# p, O) c& t- x
  51. + interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>;6 ]. w5 k! t5 |
  52. };
    9 J2 S4 S/ J9 ~  c+ h$ B0 I
  53. };
    , 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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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