El proceso y trasplante de uboot-lcd de 7862

Al arrancar, primero realice la inicialización a nivel de placa (U-boot/arch/arm/lib/board.c), y ahora ejecute board_init_f() en flash, divida una parte de Mermory para ejecutar U-BOOT y utilícelo fuera la memoria de rango designada no se puede operar durante U-boot. Al mismo tiempo, se reserva espacio para malloc() arena, código U-Boot, datos y bss, pantalla VFD, pantalla LCD, tabla TLB, PRam, logBuffer, etc.

A continuación, vaya a board_init_r() en RAM, establezca la selección de chips, inicialice el puerto serie, inicialice NAND, MMC, flash y luego vaya a do_cboot (NULL, 0, 1, NULL); // ingrese la función de inicio y luego llame

  • board_boot_mode_regist(boot_mode_array)
  • Luego vaya a boot_mode_array para seleccionar el modo, arranque en el modo normal: uis7862s_1h10_normal_mode();
  • vlx_nand_boot
  • drv_lcd_init realiza una inicialización normal en lcd
  •  lcd_init llama a lcd_ctrl_init para completar la inicialización de la pantalla lcd, por otro lado, a través de lcd_clear() para completar el color de fondo y el color de frente de la salida de control, y descomprimir el LOGOTIPO y colocarlo en el búfer
  •  lcd_ctrl_init inicializar lcd
    • sprdfb_probe proporciona la entrada del controlador específico de LCD
    • sprd_panel_probe sondea el valor read_id de cada pantalla en forma de matriz, es decir, lee el valor de id en el registro de pantalla MIPI y devuelve 0 si la lectura es exitosa, es decir, encuentra el controlador de pantalla, luego lo inicializa y continúa sondeando si no lo encuentra, hasta que encuentra o finalmente falla al encontrar un controlador que establecerá una pantalla de carga predeterminada.
  • lcd_splash(LOGO_PART) 刷logotipo
  • set_backlight(backlight_set) retroiluminación brillante

portabilidad uboot:

  • Primero, vaya al directorio bsp/bootloader/u-boot/drivers/video/sprd/lcd/ para copiar un controlador de pantalla LCD previamente trasplantado: lcd_xxx_video.c.
    • Modifique el comando de inicialización init_data[] en lcd_xxx_video.c 
    • Modifique el nombre del controlador LCD panel_driver xxx_mipi_driver
    • Modificar el valor del valor proch y la resolución.
    • Ejemplo: pixel_clk=(ancho+hfp+hbp+hsync)*(alto+vfp+vbp+vsync)*fps, phy_freq= (pixe_lclk * 24 * 1.2)/lane_num
    • Modifique la función read_id, si es la identificación de lectura correcta, devolverá 0, lo que indica que se encuentra la pantalla
    • Modifique el parámetro .lcd_name = "lcd_xxx_mipi_fhd", para que el kernel pueda encontrar el controlador dtsi de la pantalla
  • Agregar macro LCD, bsp/bootloader/u-boot/include/configs/uis7862s_1h10.h, agregar #define CONFIG_LCD_xxx_MIPI_FHD
  • bsp/bootloader/u-boot/drivers/video/sprd/lcd/Makefile Agregar reglas de compilación lcd_xxx_video.c a Makefile: obj-$(CONFIG_LCD_xxx_MIPI_FHD) += lcd_xxx_video.o
  • bsp/bootloader/u-boot/drivers/video/sprd/lcd/panel_cfg.h, nueva identificación del controlador:
    extern struct panel_driver xxx_mipi_driver;
    
    #ifdef CONFIG_LCD_xxx_MIPI_FHD
        {
            .lcd_id = 0x1111,//这个id通过lcd_id_to_kernel 传给kernel
            .drv = &xxx_mipi_driver,
        }

La portabilidad del kernel es relativamente simple

  • Copie el controlador de pantalla dtsi anterior en el directorio arch/arm64/boot/dts/sprd/lcd/

  • Modifique el nombre lcd_xxx_mipi_fhd, modifique los comandos de proceso, resolución, pixel_clk, phy_freq e inicialización de uboot al archivo dtsi actual

  • El dtsi de este controlador es como un archivo .h, y el nombre del archivo se agrega al archivo dtsi de la plataforma modificada.

Después de completar el trasplante, verifique si la pantalla se ilumina. Si la pantalla no se enciende, verifique:

  • Compruebe si el read_id leído en el registro es correcto.

  • Compruebe si el comando de inicialización init_data está escrito correctamente.

  • Compruebe si el valor proch, phy_freq y pixel_clk son correctos.

valor de venta:

  • HFP: Porche trasero horizontal: el ciclo de reloj de píxeles que se insertará cuando cada fila o columna de datos de píxeles comience a generarse.

  • HBP: borde de ataque horizontal: el reloj de píxeles entre el final de cada fila o columna de píxeles y el pulso de salida del reloj de la fila LCD.

  • HSYNC: ancho de pulso de sincronización de línea (horizontal)

  • VFP: borde de ataque vertical: el número de líneas no válidas antes del final de la salida de datos de este marco y el comienzo del siguiente ciclo de sincronización vertical.

  • VBP: Porche trasero vertical: número de líneas no válidas al comienzo del cuadro después del período de sincronización vertical.

  • VSYNC: ancho de pulso de sincronización vertical

Supongo que te gusta

Origin blog.csdn.net/weixin_42432281/article/details/114537268
Recomendado
Clasificación