RK3399 驱动开发 _ 05 - Android系统中debug串口输出乱码及波特率设置

文章目录

  • 前言
  • 一、串口输出乱码及其原因
  • 二、串口波特率修改
    • 1. uboot 修改
    • 2. 内核中设备树dts修改
    • 3. 重新编译并烧录
  • 三、串口输出测试
  • 总结


前言

在RK3399平台开发过程中,串口debug是一种不错的调试手段。但很多时候串口在打印过程中会出现正常输出一段时间后,莫名出现打印乱码情况。本文旨在解决设备启动后,串口正常打印一段时间后出现乱码的问题。

系统:Android8.1
内核 : Kernel 4.4.167

一、串口输出乱码及其原因

串口正常打印一段时间后出现乱码的问题,猜测可能是由于数据太多导致的乱码,初步尝试将波特率从150000改为115200 。

二、串口波特率修改

修改串口波特率时需要修改以下两部分:uboot和设备树dts 。

1. uboot 修改

在 : u-boot/configs/rk3399_defconfig 文件中 :
将:
CONFIG_SYS_EXTRA_OPTIONS="RKCHIP_RK3399,PRODUCT_MID,NORMAL_WORLD,SECOND_LEVEL_BOOTLOADER,BAUDRATE=150000"
CONFIG_ARM=y
CONFIG_ROCKCHIP_ARCH64=y
CONFIG_PLAT_RK33XX=y
修改为
CONFIG_SYS_EXTRA_OPTIONS="RKCHIP_RK3399,PRODUCT_MID,NORMAL_WORLD,SECOND_LEVEL_BOOTLOADER,BAUDRATE=115200"
CONFIG_ARM=y
CONFIG_ROCKCHIP_ARCH64=y
CONFIG_PLAT_RK33XX=y

2. 内核中设备树dts修改

在 : kernel/arch/arm64/boot/dts/rockchip/ 路径中查找 :
$ grep -r "rockchip,baudrate" -n
找到所在设备树rk3399-android.dtsi :
将:
	fiq_debugger: fiq-debugger {
		compatible = "rockchip,fiq-debugger";
		rockchip,serial-id = <2>;
		rockchip,wake-irq = <0>;
		rockchip,irq-mode-enable = <0>;  /* If enable uart uses irq instead of fiq */
		rockchip,baudrate = <1500000>;  /* Only 115200 and 1500000 */
		pinctrl-names = "default";
		pinctrl-0 = <&uart2c_xfer>;
		interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH 0>;
	};
修改为 :
	fiq_debugger: fiq-debugger {
		compatible = "rockchip,fiq-debugger";
		rockchip,serial-id = <2>;
		rockchip,wake-irq = <0>;
		rockchip,irq-mode-enable = <0>;  /* If enable uart uses irq instead of fiq */
		rockchip,baudrate = <115200>;  /* Only 115200 and 1500000 */
		pinctrl-names = "default";
		pinctrl-0 = <&uart2c_xfer>;
		interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH 0>;
	};

3. 重新编译并烧录

重新编译u-boot 和内核并烧录生效。

三、串口输出测试

将波特率改为115200后,串口输出恢复正常。


总结

  1. 当调试串口输出异常时,可通过适当降低串口波特率来解决。
  2. rk3399 只支持115200 和 1500000的波特率。
  3. u-boot中波特率和内核dts中波特率要保持一致。

你可能感兴趣的:(驱动开发,android)