RK3568平台支持CAN低速波特率

RK3568平台CAN低速波特率调试

RK3568 CAN 波特率调试.

版本 日期 作者 内容 状态
1.0.0 2024-05-13 BePractiall 创建文档: 创建文件 未发布

查看时钟树

cat /d/clk/clk_summary

console:/ # cat /d/clk/clk_summary                                             
                                 enable  prepare  protect                                duty
   clock                          count    count    count        rate   accuracy phase  cycle
---------------------------------------------------------------------------------------------
 hym8563-clkout                       0        0        0       32768          0     0  50000
 rk808-clkout2                        0        0        0       32768          0     0  50000
 rk808-clkout1                        0        0        0       32768          0     0  50000
 clk_scmi_ddr                         0        0        0   324000000          0     0  50000
 clk_scmi_npu                         0        1        0   600000000          0     0  50000
 clk_scmi_gpu                         0        2        0   198000000          0     0  50000
 clk_scmi_cpu                         0        0        0  1992000000          0     0  50000
 xin32k                               0        0        0       32768          0     0  50000
 xin24m                              24       28        0    24000000          0     0  50000
    clk_cpu_boost                     0        0        0    24000000          0     0  50000
    clk_optc_arb                      1        1        0    24000000          0     0  50000
    clk_timer5                        0        0        0    24000000          0     0  50000
    clk_timer4                        0        0        0    24000000          0     0  50000
    clk_timer3                        0        0        0    24000000          0     0  50000
    clk_timer2                        0        0        0    24000000          0     0  50000
    clk_timer1                        0        0        0    24000000          0     0  50000
    clk_timer0                        1        1        0    24000000          0     0  50000
    dbclk_gpio                        0        0        0    24000000          0     0  50000
       dbclk_gpio4                    0        0        0    24000000          0     0  50000
       dbclk_gpio3                    0        0        0    24000000          0     0  50000
       dbclk_gpio2                    0        0        0    24000000          0     0  50000
       dbclk_gpio1                    0        0        0    24000000          0     0  50000
    clk_pwm3_capture                  0        0        0    24000000          0     0  50000
    clk_pwm3                          0        1        0    24000000          0     0  50000
    clk_pwm2_capture                  0        0        0    24000000          0     0  50000
    clk_pwm2                          0        1        0    24000000          0     0  50000
    ......

导出时钟树

adb shell cat d/clk/clk_summary > timeTree.txt

PS E:\CRT-9200-RK3568> adb shell cat d/clk/clk_summary > timeTree.txt
adb server version (40) doesn't match this client (41); killing...
* daemon started successfully

CAN时钟结构

                                 enable  prepare  protect                                duty
   clock                          count    count    count        rate   accuracy phase  cycle
---------------------------------------------------------------------------------------------
 xin24m                              24       28        0    24000000          0     0  50000
    pll_cpll                          1        1        0  1000000000          0     0  50000
       cpll                           4        5        0  1000000000          0     0  50000
          clk_can2                    0        0        0   200000000          0     0  50000
          clk_can1                    0        0        0   100000000          0     0  50000
          clk_can0                    0        0        0   100000000          0     0  50000
          aclk_vop_pre                1        2        0   500000000          0     0  50000
             aclk_vop                 1        3        0   500000000          0     0  50000
          clk_isp                     0        0        0   500000000          0     0  50000
          clk_gpu_src                 0        1        0   166666667          0     0  50000
             clk_gpu_pvtpll           0        0        0   166666667          0     0  50000
             clk_gpu_pvtm_core        0        0        0   166666667          0     0  50000
             clk_gpu_pre_mux          0        3        0   166666667          0     0  50000
                clk_gpu               0        2        0   166666667          0     0  50000
                pclk_gpu_pre          0        1        0    33333334          0     0  50000
                   pclk_gpu_pvtm       0        0        0    33333334          0     0  50000
                aclk_gpu_pre          0        1        0    83333334          0     0  50000

根据时钟树的结构, CAN模块的时钟源是来自于CPLL,CPLL是由xin24m锁相环进行倍频得到的。查看RK3568手册得知,CAN模块的时钟分频范围为1~32。
在这里插入图片描述

CAN波特率配置

查看CAN0的接口信息:ip -details link show can0

console:/ # ip link set can0 type can bitrate 500000
console:/ # ip -details link show can0
3: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN mode DEFAULT group default qlen 10
    link/can  promiscuity 244976221 
    can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0 
          bitrate 500000 sample-point 0.850 
          tq 100 prop-seg 8 phase-seg1 8 phase-seg2 3 sjw 1
          rockchip_can: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..128 brp-inc 2
          clock 100000000numtxqueues 245000385 numrxqueues 244951991 gso_max_size 244996151 gso_max_segs 244957373 

根据CAN0的接口信息"rockchip_can: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..128 brp-inc 2"可知,tseg1的范围为1~ 16,tseg2的范围为1~ 8,brp的范围为1~128且是偶数。根据RK3568手册得知,CAN波特率的计算公式为:rate = can_clk / (brp * (tseg1 + tseg2 + 1)),其中tseg1 = prop-seg+phase-seg1; tseg2 = phase-seg2; brp = can_clk*tq/10^9
在这里插入图片描述

配置波特率为10kbps

console:/ # ip link set can0 type can bitrate 10000                            
[R T N1E9T3L.I4N1K5 9a7n6s]w errockcshi:p _Mcaatnh  faer5g7u0m0e0n0t out of domain of func
.can can0: bitrate error 42949672.9% too high

当前CAN_CLK为1

<think>嗯,用户想修改RK3568根文件系统中的串口波特率。我需要先回忆一下相关的知识。首先,串口波特率的设置通常涉及内核和设备树配置,可能还跟根文件系统中的服务有关。根据引用中的信息,设备树里需要设置寄存器地址,比如reg属性,这可能和GPIO或串口控制相关。用户之前提到过修改设备树后需要重新编译内核,比如使用./make.sh等命令。这可能意味着修改设备树是调整硬件参数的重要步骤,包括串口波特率。另外,引用3提到“给定波特率”,可能是指某个配置文件中的设置。根文件系统中可能有初始化脚本或服务配置文件,比如systemd的服务或者inittab,这些地方也可能设置波特率。用户的问题是关于rootfs的修改,所以可能需要查看根文件系统中的相关配置文件。比如,在Linux系统中,串口终端设置可能在/etc/inittab或/etc/securetty中,或者使用systemd的serial-getty服务。例如,修改/etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service文件中的波特率参数。 此外,内核启动参数也可能影响串口控制台,比如在bootargs中添加console=ttyS0,115200这样的参数,这里115200就是波特率。不过bootargs通常是在U-Boot中设置,属于内核启动参数的一部分,可能需要在编译内核时或者修改bootloader配置时调整。不过用户的问题特别提到根文件系统(rootfs),所以可能更关注用户空间的配置,而不是内核或设备树。需要确认在根文件系统中是否有服务或脚本控制串口的波特率。比如,使用stty命令在启动脚本中设置,或者修改getty服务的配置。另外,设备树中的串口节点可能有关于波特率的配置,比如在设备树的某个节点中设置clock-frequency或其他相关属性。例如,查看设备树中serial节点的配置,是否有波特率相关的参数,可能需要修改设备树源文件(dts),然后重新编译设备树,并更新到板子上。总结一下,可能的步骤是:1.检查设备树中的串口节点配置,调整波特率参数,重新编译设备树和内核;2.检查根文件系统中的服务配置文件,如systemd或inittab,修改对应的波特率设置;3.检查内核启动参数中的console设置,确保波特率一致。需要参考用户提供的引用,特别是引用1中的设备树修改和编译步骤,以及引用3提到的波特率设置。用户可能需要先修改设备树中的相关寄存器配置,然后重新编译内核,同时在根文件系统中调整对应的服务配置,确保两端一致。</think>根据RK3568平台特性,修改串口波特率的配置需要结合设备树和内核参数调整,具体步骤如下: ### 一、设备树配置 1. **定位串口节点** 在设备树文件`rk3568.dtsi`中找到目标串口节点(如`uart2`),其定义格式为: ```dts &uart2 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart2m0_xfer>; }; ``` 该节点默认使用硬件预设波特率(通常为$115200$) 2. **添加波特率参数** 在串口节点中添加`assigned-clocks`和`assigned-clock-rates`属性来指定波特率: ```dts &uart2 { status = "okay"; assigned-clocks = <&cru CLK_UART2>; assigned-clock-rates = <1500000>; //对应波特率计算公式 pinctrl-names = "default"; pinctrl-0 = <&uart2m0_xfer>; }; ``` 波特率计算需满足$baud = \frac{clock\_rate}{divisor}$,其中$divisor$需为整数[^1] ### 二、内核参数调整 1. **修改bootargs** 在U-Boot环境变量中设置内核控制台参数: ```bash setenv bootargs console=ttyS2,1500000n8 root=/dev/mmcblk1p5 rw rootwait ``` 其中`ttyS2`对应uart2,`1500000n8`表示波特率$1500000$,无校验位,8数据位 2. **同步根文件系统** 在根文件系统中检查`/etc/inittab`或`systemd`服务配置: ```bash # systemd服务文件示例 /etc/systemd/system/serial-getty@ttyS2.service ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 1500000 %I $TERM ``` ### 三、验证步骤 1. 重新编译内核和设备树: ```bash ./make.sh && ../device/rockchip/common/mk-fitimage.sh kernel/boot.img device/rockchip/rk356x/boot.its ``` 2. 烧录后通过`stty -F /dev/ttyS2`命令查看当前波特率 3. 使用示波器或逻辑分析仪验证实际波形频率是否符合$T = \frac{1}{baud\_rate}$[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值