2026 / 07 / 21
瑞萨RZ/G2L uboot串口多波特率支持介绍

本文主要介绍基于瑞萨64位MPU RZ/G2L,讨论uboot下非常规波特率115200的支持方法,用于解决客户对uboot下特殊波特率的需求,供客户参考。

部分客户在MPU的uboot调试过程中,希望能支持常见的115200波特率之外的其他波特率,有串口接收终端方面的原因,终端希望使用比较低的波特率,或者是希望使用比较高的波特率输出信息更快。还有比较普遍的原因,就是部分客户希望做一个简单的加密功能,因为使用其他非常见波特率的话,如果终端还是设定常见的115200波特率,MPU启动时的uboot打印信息就会在终端上面显示乱码,从而实现一种加密目的。

有以下两种方式可以达到这种目的(均以9600新波特率为例,串口终端软件是Tera Term)

方式一:在uboot的配置文件里面设定默认波特率

RZ/G2L的uboot配置文件是u-boot-source/configs/smarc-rzg2l_defconfig。

如果不修改这个配置文件,编译出来的uboot镜像里面会使用默认的波特率115200,这个默认值是在u-boot-source/drivers/serial/Kconfig里面设定的,如下所示:



如果想修改成其他波特率,可以在上述defconfig文件里面添加一行:CONFIG_BAUDRATE=9600

如下添加到该文件尾部即可:



(uboot源码需要已经支持新波特率9600,后面有说明)

然后,重新编译一遍uboot,即可得到修改了初始默认波特率的uboot镜像文件。

注意:uboot发生了变化时,需要重新编译一遍Trusted firmware,以生产正确的BL2镜像。

实际测试过程中,很可能会遇到一个现象:烧写了新的Trusted firmware和uboot,重启板子之后,发现uboot还是使用的之前的波特率115200,终端设定9600波特率反而显示乱码,设定115200波特率才正常。

这是因为修改之前,uboot里面使用了115200波特率,而且将这个波特率保存到了uboot环境变量baudrate,而uboot启动之后,会首先加载环境变量区域的所有环境变量,然后根据环境变量115200波特率来设定当前使用波特率,代码里面设定的是默认波特率,只有在环境变量区域无效或者没有执行过saveenv命令的情况下,才会被用到。这种情况下,可以参考下述方式2)来切换到希望使用的波特率。

方式二:在uboot启动之后,使用uboot命令修改默认波特率

在某些情况下,可能不希望或者不能修改uboot的配置文件来修改默认波特率,这时可以在线修改成需要的波特率。(uboot源码需要已经支持新波特率9600,后面有说明)

从115200切换到9600波特率:



Uboot下运行setenv baudrate 9600命令之后,会提示切换串口终端软件波特率到9600bps,然后按Enter键。这时打开终端软件的Setup -> Serial port…,可以在弹出对话框中选择9600波特率,然后点击New Setting按键,就会关闭对话框切换至终端显示界面,波特率已经切换到了9600bps:



然后,安装提示要求,按一次Enter按键,即可切换成功波特率,不会显示乱码:



此后,终端界面就会使用9600bps波特率,如果启动Linux kernel,会显示乱码,因为Linux kernel波特率默认115200,需要两边波特率保持一致。

下面讨论一下uboot源码层面波特率支持问题。默认情况下,uboot源码仅仅支持配置115200bps波特率,现在需要支持新的其他波特率,所有源码层面也要配合修改,否则上面的两种波特率切换方法都不成功。还是以新增9600波特率为例加以说明,如果客户需要支持其他波特率,可以找对口FAE寻求帮助,瑞萨会提供对应补丁给客户。

1️⃣首先修改一个数组,添加新波特率
    文件:

u-boot-source/ include/configs/smarc-rzg2l.h
#define CONFIG_SYS_BAUDRATE_TABLE { 115200,9600}


2️⃣添加新波特率对于寄存器配置代码
    文件:

u-boot-source/drivers/serial/serial_sh.c

    函数:

sh_serial_setbrg_generic():
+  uint8_t semr;
+  uint16_t scr;
+   if (port->clk_mode == EXT_CLK) {
     unsignedshort dl = DL_VALUE(baudrate, clk);
     sci_out(port, DL, dl);
     /* Need wait: Clock * 1/dl * 1/16 */
     udelay((1000000 * dl * 16 / clk) * 1000 + 1);
   } else {
+    scr = sci_in(port, SCSCR);
+    semr = sci_in(port, SCSEMR);
+
+    sci_out(port, SCSCR, 0);
+
+    sci_out(port, SCSEMR, 0);
+    if(9600 == baudrate)
+      sci_out(port, SCBRR, 163);
+    elseif(115200 == baudrate)
+      sci_out(port, SCBRR, 15);
+
+    sci_out(port, SCSEMR, 0x30);
+    if(9600 == baudrate)
+      sci_out(port, MDDR, 129);
+    elseif(115200 == baudrate)
+      sci_out(port, MDDR, 151);
+
+    udelay(100);
+
+    sci_out(port, SCSEMR, semr);
+    sci_out(port, SCSCR, scr);
+  }



如需了解更详细的使用方法请参考如下链接:
RZ/G2L Evaluation Board Kit Quick Start Guide
RZ产品WIKI网站

文件下载
隐私条款

一、接受条款 使用者(也称"您")在访问或使用本网站及其服务时,即已经表示同意并不加修改地接受本《用户协议》、本网站的《隐私声明》、《法律声明》以及其关或相链接的网页和网站的条件和条款的规定。我们强烈建议:在您阅读和接受本《用户协议》时,也应阅读并接受本《用户协议》中所提到《隐私声明》、《法律声明》及其相关或相链接网页或网站所包含的资料,因为《隐私声明》、《法律声明》及其它相关网页或网站可能包含对您适用的进一步规定。(请注意:点击划有底线的词句即可链接到上述《隐私声明》、《法律声明》及其它相关或相链接的网页和网站。

 

二、使用者的资格要求 在本网站中"使用者"指的是浏览、阅读、使用本网站信息或服务的任何个人或组织。本网站的服务仅适用于根据相关法律的规定具有签订有约束力的合同的个人或组织并仅由其使用。本网站的服务不向18周岁以下的个人使用者提供,也不向临时被本网站中止或取消使用者资格的使用者提供。如果使用者不符合本条规定,请停止使用本网站或本网站的服务。

样品
申请

应用
资源

微信