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