导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    D1s分别在Tina Linx, Melis修改调试串口实录

    MR Series
    2
    2
    1721
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • aldfaaa
      whycan矿工-小叶 LV 7 最后由 编辑

      背景

      硬件小白画了块D1s板子, 调试串口的接线是:

      针脚 功能复用 丝印
      PE08 UART3_TX TX
      PE09 UART3_RX RX

      调通调试串口=硬件Hello world

      Melis玩法

      首先修改了projects/d1s-nezha/configs/sys_config_nor.fex

      @@ -79,9 +79,9 @@ twi_scl         = port:PH14<2><default><default><default>
       twi_sda         = port:PH15<2><default><default><default>
      
       [uart_para]
      -uart_debug_port = 0
      -uart_debug_tx   = port:PE02<6><1><default><default>
      -uart_debug_rx   = port:PE03<6><1><default><default>
      +uart_debug_port = 3
      +uart_debug_tx   = port:PE08<5><1><default><default>
      +uart_debug_rx   = port:PE09<5><1><default><default>
      
       [jtag_para]
       jtag_enable     = 1
      @@ -210,9 +210,13 @@ twi3_sda         = port:PE07<4><1><default><default>
       ;uart configuration
       ;uart_type ---  2 (2 wire), 4 (4 wire), 8 (8 wire, full function)
       ;----------------------------------------------------------------------------------
      -[uart0]
      -uart_tx         = port:PB08<6><1><default><default>
      -uart_rx         = port:PB09<6><1><default><default>
      +;[uart0]
      +;uart_tx         = port:PB08<6><1><default><default>
      +;uart_rx         = port:PB09<6><1><default><default>
      +
      +[uart3]
      +uart_tx         = port:PE08<5><1><default><default>
      +uart_rx         = port:PE09<5><1><default><default>
      
       ;----------------------------------------------------------------------------------
       ;SPI controller configuration
      @@ -743,7 +747,7 @@ vo_vs         = port:PD21<7><0><default><default>
       ;----------------------------------------------------------------------------------
      
       [tv0]
      -used            = 1
      +used            = 0
      
       dac_src0        = 0
       dac_type0       = 0
      @@ -760,8 +764,8 @@ pwm_pin             = port:PD16<5><default><default><default>
       [pwm1]
       pwm_positive        = port:PD02<3><default><default><default>
      
      -[pwm2]
      -pwm_pin             = port:PE08<4><default><default><default>
      +;[pwm2]
      +;pwm_pin             = port:PE08<4><default><default><default>
      
       [pwm3]
       pwm_positive        = port:PD04<3><default><default><default>
      @@ -837,12 +841,12 @@ pwm_positive        = port:PL10<7><0><default><default>
       ;vinc(x)_sensor_list: use sensor list
       ;--------------------------------------------------------------------------------
       [vind0]
      -vind0_used             = 1
      +vind0_used             = 0
       vind0_clk              = 432000000
       vind0_isp              = 322000000
      
       [vind0/csi0]
      -csi0_used               = 1
      +csi0_used               = 0
       csi0_pck                = port:PE02<2><default><default><default>
       csi0_hsync              = port:PE00<2><default><default><default>
       csi0_vsync              = port:PE01<2><default><default><default>
      @@ -850,8 +854,8 @@ csi0_d0                 = port:PE04<2><default><default><default>
       csi0_d1                 = port:PE05<2><default><default><default>
       csi0_d2                 = port:PE06<2><default><default><default>
       csi0_d3                 = port:PE07<2><default><default><default>
      -csi0_d4                 = port:PE08<2><default><default><default>
      -csi0_d5                 = port:PE09<2><default><default><default>
      +;csi0_d4                 = port:PE08<2><default><default><default>
      +;csi0_d5                 = port:PE09<2><default><default><default>
       csi0_d6                 = port:PE10<2><default><default><default>
       csi0_d7                 = port:PE11<2><default><default><default>
      
      @@ -872,7 +876,7 @@ actuator0_afvdd         = "afvcc-csi"
       actuator0_afvdd_vol     = 2800000
      
       [vind0/sensor0]
      -sensor0_used          = 1
      +sensor0_used          = 0
      

      然后发现编译,打包, 启动发现: PE08有输出了, 但是PE09无法输入Console; 遂探寻探寻UART驱动:
      找一下包含uart关键字的文件, 大致推断其驱动源码(有生成.o的大概率就是有效的源码):

      find . -name "*uart*.c"
      ./ekernel/arch/riscv/csp/csp_uart.c
      ./ekernel/drivers/hal/source/uart/hal_uart.c
      ./ekernel/drivers/hal/test/uart/test_uart.c
      ./ekernel/drivers/hal/test/lpuart/test_lpuart.c
      ./ekernel/drivers/test/test_uart.c
      ./ekernel/drivers/drv/source/serial/uart_drv_dms.c
      ./ekernel/drivers/drv/source/serial/uart_drv.c
      ./ekernel/components/aw/multi_console/uart_console.c
      

      追踪UART针脚功能复用的实现, 并反推高层调用链路:

      ekernel/drivers/hal/source/uart/hal_uart.c: uart_pinctrl_init()
      {
          实现了UART针脚的功能复用
      }
      ekernel/drivers/hal/source/uart/hal_uart.c: hal_uart_init(){
          uart_pinctrl_init(..);
      }
      看看谁调hal_uart_init():
      ./ekernel/drivers/drv/source/serial/uart_drv.c: .initialize=hal_uart_init
      根据D1s的BSP层番号:sun20iw1可知:
      ./ekernel/arch/riscv/sunxi/sun20iw1/init.c: sunxi_driver_uart_init(...)
              {
                  123 #ifdef CONFIG_DRIVER_SERIAL
                  124     char uartname[6];
                  125     void sunxi_driver_uart_init(void);
                  126     sunxi_driver_uart_init();
                  127     sprintf(uartname, "uart%d", CONFIG_CLI_UART_PORT);
                  128     rt_console_set_device(uartname);
                  129 #endif
              }
      

      原来还有一个CONFIG_CLI_UART_PORT值给到软件层面的console进行交互!
      再搜CONFIG_CLI_UART_PORT发现: grep -irn "CONFIG_CLI_UART_PORT" .
      .config就有具体的值.
      于是: make menuconfig, 按'/'搜CONFIG_CLI_UART_PORT, 就可以合规的修改串口:
      62821a47-65a9-43a4-8cc3-68114408e932-image.png

      重新编译, 打包, 烧录, 调试串口一切正常.

      Tina LInux玩法

      修改device/config/chips/d1s/configs/nezha/sys_config.fex:

      [uart_para]
      uart_debug_port = 3
      uart_debug_tx   = port:PE08<5><1><default><default>
      uart_debug_rx   = port:PE09<5><1><default><default>
      

      PS: 了解到sys_config.fex会经过转化成二进制文件, 在设备启动时会加载到boot0, 作为参数列表.

      配置linux下的设备树的: device/config/chips/d1s/configs/nezha/board.dts

      /* 修改 */
      uart3_pins_a: uart3_pins@0 {  /* For EVB1 board */
              pins = "PE8", "PE9";
              function = "uart3";
              /* muxsel = <5>; */
              drive-strength = <10>;
              bias-pull-up;
      };
      
      uart3_pins_b: uart3_pins@1 {  /* For EVB1 board */
              pins = "PE8", "PE9";
              function = "gpio_in";
      };
      ...
      &uart3 {
              pinctrl-names = "default", "sleep";
              pinctrl-0 = <&uart3_pins_a>;
              pinctrl-1 = <&uart3_pins_b>;
              status = "okay";
      };
      

      编译, 烧录, 启动发现: 串口没输出; 通过adb确认系统启动成功且PE8, PE9针脚功能配置正确(通过查看寄存器)

      遂思考u-boot的bootargs是否没有配置正确, 发现./lichee/linux-5.4/arch/riscv/boot/dts/sunxi/sun20iw1p1.dtsi里有bootargs踪迹, 遂修改:
      f018ac7a-7e35-4489-9f71-b7a5ec3a2939-image.png

      504287d7-d671-4baa-89ef-7215554cb972-image.png

      编译, 烧录, 启动发现: 只有boot0程序(./lichee/brandy-2.0/spl/nboot/main/boot0_main.c)有输出, 且支持输入验证, 但kernel仍旧没有内容输出.

      思考: 除了"uart"关键字还有"ttyS"关键字也指代串口, 所以在常用的配置目录下搜了一下

      grep -rn "ttyS" ./device/config/chips/d1s
      ./device/config/chips/d1s/configs/default/env_burn.cfg:5:console=ttyS0,115200
      ./device/config/chips/d1s/configs/default/env.cfg:5:console=ttyS0,115200
      ./device/config/chips/d1s/configs/nezha/env.cfg:5:console=ttyS0,115200
      Binary file ./device/config/chips/d1s/bin/u-boot-sun20iw1p1.bin matches
      

      遂修改: ./device/config/chips/d1s/configs/nezha/env.cfg;
      启动系统是有输出!!!完毕撒花:
      b5470778-729f-4ba4-a620-89e8e66eabc3-37a8f1a7fe9cd1d7523365ca8ba3933.png

      1 条回复 最后回复 回复 引用 分享 1
      • Q
        qqqlb LV 6 最后由 编辑

        大佬,我想问问,kernel阶段串口有输出,但是boot0和uboot阶段没输出,这是哪里没配置好呢

        1 条回复 最后回复 回复 引用 分享 0
        • Referenced by  aldfaaa aldfaaa 
        • 1 / 1
        • First post
          Last post

        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

        行为准则 | 用户协议 | 隐私权政策