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

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

[复制链接]

该用户从未签到

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

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) 具体的配置信息如下:
  1. 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
  2. index 158f03d70..671a491bf 100644  U. L* V. |) S6 M% L- Z" A! W+ p
  3. --- a/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi
    # z: l+ C" _) b6 v4 M  T$ a2 J1 \/ P
  4. +++ b/arch/arm64/boot/dts/rockchip/OK3562-C-common.dtsi' o: O3 M: A2 Z& c
  5. @@ -19,6 +19,12 @@
    * V- H1 E2 N9 a5 t
  6. model = "Forlinx OK3562 Board";
    9 q) K8 h1 E8 {8 }
  7. compatible = "forlinx,ok3562","rockchip,rk3562";
    ! T) Y! Z  B' Q, E1 w- z, ~/ q1 X
  8. + mcp2518_clk: mcp2518-clk {
    $ _" T* |3 ?& u% f9 f& W0 J$ U
  9. + compatible = "fixed-clock";# j+ }6 Y0 u( R4 J3 y2 p
  10. + #clock-cells = <0>;
    1 ~7 T& @. x# ?$ }
  11. + clock-frequency = <40000000>;
    1 n& S; h; G3 w# |( e8 o1 ?' M' p
  12. + };
    . V- u% J. \7 a0 P% P4 Q/ [
  13. +5 D/ X# ~7 @$ t" k: n, j
  14. forlinx-control {
    + ]$ {3 f' n% X' Y1 i& K
  15. status = "disabled";
    9 D) o  F3 X0 a& R# `- u
  16. disp_type = "mipi"; //mipi or lvds
    ! n* g1 k( \1 w) }4 @- {
  17. @@ -662,6 +668,13 @@
    * U: |' {& R% H; K, C
  18. };
    % h7 }6 e- z- B* \2 c  e4 w9 y
  19. &pinctrl {
    ( j* ]- ]; |9 M, ?" H' {
  20. +
    & ?& X" a& d8 l; d! v
  21. + mcp2518 {
    * K% n: R; A3 G2 G0 O6 V
  22. + mcp2518_irq_pins:mcp2518_irq_pins {
    , {+ A( z/ V0 O! T- E
  23. + rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;3 z- H8 x" J$ c8 D& \& ]' D; F4 G0 J
  24. + };4 C# F4 H7 r& E
  25. + };
    * B9 `1 ?7 D, m7 M. I# a/ Y8 W, L. y
  26. +& g6 u9 F9 K1 S* O
  27. touch {
    . A: m  C+ t: R( r1 `
  28. gt928_lvds_gpio:gt928-lvds-gpio {
    ; H; ]* Y9 M  B5 e* \* L1 A
  29. rockchip,pins = <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>,
    7 Z5 y+ H' i5 ^
  30. @@ -980,13 +993,24 @@
    1 R% p- S# O$ X% T& m1 L
  31. &spi2 {
    9 C; _. w/ y5 j( m% R* U, w
  32. + pinctrl-names = "default";4 T* |6 Z/ d0 x+ u
  33. + pinctrl-0 = <&spi2m0_csn0 &spi2m0_csn1 &spi2m0_pins>;- g: J- K  \1 V& l* T: F' ~
  34. status = "okay";1 u+ s+ \2 J& }3 U- b
  35. - spi_dev0: spi@0 {
    ( G8 y8 F6 V# o9 h# E+ }6 I: c
  36. +/* spi_dev0: spi@0 {, Z5 L0 }& D3 O
  37. compatible = "rohm,dh2228fv";
    + m1 z' e9 a# n8 n9 [' N& t) w
  38. 2 / 51 k" C; P9 v) }+ r. O- ]
  39. pl022,com-mode = <1>;
    % H4 [# z/ H5 |7 d5 T0 F
  40. spi-max-frequency = <10000000>;6 ?  ~0 k) C8 Y  h" h
  41. reg = <0>;
    8 R* s1 F4 D+ ^, u2 Q1 I+ e6 u
  42. status = "okay";
    1 p0 y+ R2 d7 [# d3 k
  43. + };*/3 m3 J2 C5 ]$ x( p% M( Z: s5 T
  44. + spi@0{+ ~; H; |. P3 |  K
  45. + compatible = "microchip,mcp2518fd";
    4 w2 w, d7 z- K8 x1 R1 Y# j  p% G( d! R
  46. + reg = <0>;1 g- Y$ U1 r" S6 k# R
  47. + clocks = <&mcp2518_clk>;" R3 C' N% S1 m
  48. + pinctrl-names = "default";
    , ?# s- m9 S" d0 [* |/ m* i9 Y/ E
  49. + pinctrl-0 = <&mcp2518_irq_pins>;0 c$ _  l* ?- z" z3 W4 {
  50. + spi-max-frequency = <20000000>;
    3 s- R; C) Q( D( i5 R! ?
  51. + interrupts-extended= <&gpio4 RK_PB0 IRQ_TYPE_LEVEL_LOW>;
    " F7 }+ i$ j8 Y+ p0 E/ I  z
  52. };+ ^& u  V$ m: s/ v( n
  53. };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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 17:17 , Processed in 0.203125 second(s), 23 queries , Gzip On.

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

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

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