rtos下新增屏幕驱动 在mircopython镜像初始化显示屏幕 屏幕发光但是没有画面

Viewed 78

问题描述


rtos下新增屏幕驱动 在mircopython镜像初始化显示屏幕 屏幕发光但是没有画面

---------官方给出的初始化序列代码------------

//lcm init code///////// /////////////

WriteCommand(0x11);

//WriteCommand(0x21);
//WriteCommand(0x36);SPI_WriteData(0x00);
Delay(200);

WriteCommand(0xff);
SPI_WriteData(0x77);
SPI_WriteData(0x01);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x10);

WriteCommand(0xC0);
SPI_WriteData(0xE9);
SPI_WriteData(0x03);

WriteCommand(0xC1);
SPI_WriteData(0x11);//0a
SPI_WriteData(0x02);

WriteCommand(0xC2);
SPI_WriteData(0x31);
SPI_WriteData(0x08);

WriteCommand(0xB0);
SPI_WriteData (0x00);
SPI_WriteData (0x06);
SPI_WriteData (0x11);
SPI_WriteData (0x12);
SPI_WriteData (0x18);
SPI_WriteData (0x0A);
SPI_WriteData (0x0A);
SPI_WriteData (0x09);
SPI_WriteData (0x09);
SPI_WriteData (0x1D);
SPI_WriteData (0x09);
SPI_WriteData (0x14);
SPI_WriteData (0x10);
SPI_WriteData (0x0E);
SPI_WriteData (0x11);
SPI_WriteData (0x19);

WriteCommand(0xB1);
SPI_WriteData (0x00);
SPI_WriteData (0x06);
SPI_WriteData (0x11);
SPI_WriteData (0x11);
SPI_WriteData (0x15);
SPI_WriteData (0x09);
SPI_WriteData (0x0B);
SPI_WriteData (0x09);
SPI_WriteData (0x09);
SPI_WriteData (0x23);
SPI_WriteData (0x09);
SPI_WriteData (0x17);
SPI_WriteData (0x14);
SPI_WriteData (0x18);
SPI_WriteData (0x1E);
SPI_WriteData (0x19);

WriteCommand(0xff);
SPI_WriteData(0x77);
SPI_WriteData(0x01);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x11);

WriteCommand(0xB0);
SPI_WriteData(0x4D);
//-------------------------------------------Vcom Setting----------------
WriteCommand(0xB1);
SPI_WriteData(0x3A);
//-----------------------------------------End Vcom Setting--------------

WriteCommand(0xB2);
SPI_WriteData(0x07);

WriteCommand(0xB3);
SPI_WriteData(0x80);

WriteCommand(0xB5);
SPI_WriteData(0x47);

WriteCommand(0xB7);
SPI_WriteData(0x8A);

WriteCommand(0xB8);
SPI_WriteData(0x21);

WriteCommand(0xC1);
SPI_WriteData(0x78);

WriteCommand(0xC2);
SPI_WriteData(0x78);

WriteCommand(0xD0);
SPI_WriteData(0x88);
//---------------------------------End Power Control Registers Initial --
Delay(100);
//---------------------------------------------GIP Setting---------------

WriteCommand(0xe0);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x02);

WriteCommand(0xe1);
SPI_WriteData(0x08);
SPI_WriteData(0x00);
SPI_WriteData(0x0A);
SPI_WriteData(0x00);
SPI_WriteData(0x07);
SPI_WriteData(0x00);
SPI_WriteData(0x09);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x33);
SPI_WriteData(0x33);

WriteCommand(0xe2);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);

WriteCommand(0xe3);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x33);
SPI_WriteData(0x33);

WriteCommand(0xe4);
SPI_WriteData(0x44);
SPI_WriteData(0x44);

WriteCommand(0xe5);
SPI_WriteData(0x0E);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);
SPI_WriteData(0x10);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);
SPI_WriteData(0x0A);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);
SPI_WriteData(0x0C);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);

WriteCommand(0xe6);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x33);
SPI_WriteData(0x33);

WriteCommand(0xe7);
SPI_WriteData(0x44);
SPI_WriteData(0x44);

WriteCommand(0xe8);
SPI_WriteData(0x0D);
SPI_WriteData(0x60);
SPI_WriteData(0xA0);
SPI_WriteData(0xA0);
SPI_WriteData(0x0F);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);
SPI_WriteData(0x09);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);
SPI_WriteData(0x0B);
SPI_WriteData(0x60);
SPI_WriteData(0xAf);
SPI_WriteData(0xAf);

WriteCommand(0xeb);
SPI_WriteData(0x02);
SPI_WriteData(0x01);
SPI_WriteData(0xE4);
SPI_WriteData(0xE4);
SPI_WriteData(0x44);
SPI_WriteData(0x00);
SPI_WriteData(0x40);

WriteCommand(0xec);
SPI_WriteData(0x02);
SPI_WriteData(0x01);

WriteCommand(0xed);
SPI_WriteData(0xAB);
SPI_WriteData(0x89);
SPI_WriteData(0x76);
SPI_WriteData(0x54);
SPI_WriteData(0x01);
SPI_WriteData(0xFF);
SPI_WriteData(0xFF);
SPI_WriteData(0xFF);
SPI_WriteData(0xFF);
SPI_WriteData(0xFF);
SPI_WriteData(0xFF);
SPI_WriteData(0x10);
SPI_WriteData(0x45);
SPI_WriteData(0x67);
SPI_WriteData(0x98);
SPI_WriteData(0xBA);
//---------------------------------------------End GIP
//------------------------------ Power Control Registers Initial End-----

Delay(10);
WriteCommand(0xFF);
SPI_WriteData(0x77);
SPI_WriteData(0x01);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteData(0x00);

WriteCommand(0x29);

//WriteCommand(0x2c);

//------------------------------------------------------------------------------------------
Delay_ms(200);

----------根据官方文档编写的rtos初始化序列代码-------
/* Copyright (c) 2026, Canaan Bright Sight Co., Ltd
*

  • Redistribution and use in source and binary forms, with or without
  • modification, are permitted provided that the following conditions are met:
    1. Redistributions of source code must retain the above copyright
  • notice, this list of conditions and the following disclaimer.
    1. Redistributions in binary form must reproduce the above copyright
  • notice, this list of conditions and the following disclaimer in the
  • documentation and/or other materials provided with the distribution.
  • THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  • CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  • INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  • MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  • DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
  • CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  • SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  • BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  • SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  • INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  • WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  • NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  • OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    */
    #include "rtthread.h"

#include "connector_panel.h"

#include "k_autoconf_comm.h"

static int tk050f90h6_init(const struct panel_desc* desc)
{

/* clang-format off */
const k_u8 init_sequence[] = {
    // cmd type, delay, data length, data0 ... dataN
    // From TL050FWV22-H1438A_ST7701s_2LMIPI_V0.txt
    0x15, 200, 2, 0x11, 0x00,            // Cmd=0x11(SleepOut), delay=200ms
    0x39, 0, 6, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x10,  // Cmd=0xFF(BankSelect), params=[0x77,0x01,0x00,0x00,0x10] -> bank 10
    0x39, 0, 3, 0xC0, 0xE9, 0x03,       // Cmd=0xC0, params=[0xE9,0x03]
    0x39, 0, 3, 0xC1, 0x11, 0x02,       // Cmd=0xC1, params=[0x11,0x02]
    0x39, 0, 3, 0xC2, 0x31, 0x08,       // Cmd=0xC2, params=[0x31,0x08]
    0x39, 0, 17, 0xB0, 0x00, 0x06, 0x11, 0x12, 0x18, 0x0A, 0x0A, 0x09, 0x09, 0x1D, 0x09, 0x14, 0x10, 0x0E, 0x11, 0x19,  // Cmd=0xB0, 16 params
    0x39, 0, 17, 0xB1, 0x00, 0x06, 0x11, 0x11, 0x15, 0x09, 0x0B, 0x09, 0x09, 0x23, 0x09, 0x17, 0x14, 0x18, 0x1E, 0x19,  // Cmd=0xB1, 16 params
    0x39, 0, 6, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x11,  // Cmd=0xFF(BankSelect), params=[0x77,0x01,0x00,0x00,0x11] -> bank 11
    0x15, 0, 2, 0xB0, 0x4D,              // Cmd=0xB0, params=[0x4D]
    0x15, 0, 2, 0xB1, 0x3A,              // Cmd=0xB1(VCOM), params=[0x3A]
    0x15, 0, 2, 0xB2, 0x07,              // Cmd=0xB2, params=[0x07]
    0x15, 0, 2, 0xB3, 0x80,              // Cmd=0xB3, params=[0x80]
    0x15, 0, 2, 0xB5, 0x47,              // Cmd=0xB5, params=[0x47]
    0x15, 0, 2, 0xB7, 0x8A,              // Cmd=0xB7, params=[0x8A]
    0x15, 0, 2, 0xB8, 0x21,              // Cmd=0xB8, params=[0x21]
    0x15, 0, 2, 0xC1, 0x78,              // Cmd=0xC1, params=[0x78]
    0x15, 0, 2, 0xC2, 0x78,              // Cmd=0xC2, params=[0x78]
    0x15, 100, 2, 0xD0, 0x88,            // Cmd=0xD0, params=[0x88], delay=100ms
    0x39, 0, 4, 0xE0, 0x00, 0x00, 0x02,  // Cmd=0xE0, params=[0x00,0x00,0x02], delay=10ms
    0x39, 0, 12, 0xE1, 0x08, 0x00, 0x0A, 0x00, 0x07, 0x00, 0x09, 0x00, 0x00, 0x33, 0x33, // Cmd=0xE1, 11 params
    0x39, 0, 14, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Cmd=0xE2, 13 params
    0x39, 0, 5, 0xE3, 0x00, 0x00, 0x33, 0x33, // Cmd=0xE3, 4 params
    0x39, 0, 3, 0xE4, 0x44, 0x44,         // Cmd=0xE4, params=[0x44,0x44]
    0x39, 0, 17, 0xE5, 0x0E, 0x60, 0xAF, 0xAF, 0x10, 0x60, 0xAF, 0xAF, 0x0A, 0x60, 0xAF, 0xAF, 0x0C, 0x60, 0xAF, 0xAF, // Cmd=0xE5, 16 params
    0x39, 0, 5, 0xE6, 0x00, 0x00, 0x33, 0x33, // Cmd=0xE6, 4 params
    0x39, 0, 3, 0xE7, 0x44, 0x44,         // Cmd=0xE7, params=[0x44,0x44]
    0x39, 0, 17, 0xE8, 0x0D, 0x60, 0xA0, 0xA0, 0x0F, 0x60, 0xAF, 0xAF, 0x09, 0x60, 0xAF, 0xAF, 0x0B, 0x60, 0xAF, 0xAF, // Cmd=0xE8, 16 params
    0x39, 0, 8, 0xEB, 0x02, 0x01, 0xE4, 0xE4, 0x44, 0x00, 0x40, // Cmd=0xEB, 7 params
    0x39, 0, 3, 0xEC, 0x02, 0x01,         // Cmd=0xEC, params=[0x02,0x01]
    0x39, 10, 17, 0xED, 0xAB, 0x89, 0x76, 0x54, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0x45, 0x67, 0x98, 0xBA, // Cmd=0xED, 16 params
    0x39, 0, 6, 0xFF, 0x77, 0x01, 0x00, 0x00, 0x00,  // Cmd=0xFF(BankSelect), params=[0x77,0x01,0x00,0x00,0x00] -> bank 00
    0x15, 200, 2, 0x29, 0x00,            // Cmd=0x29(DisplayOn), delay=200ms
};
/* clang-format on */

return dsi_send_cmd_sequence(desc, init_sequence, sizeof(init_sequence), 0);

}

static int tk050f90h6_power_off(const struct panel_desc* desc)
{
(void)desc;

return 0;

}

/* ========== Panel Operations ========== */
static const struct panel_ops tk050f90h6_ops = {
.reset = panel_generic_reset,
.init = tk050f90h6_init,
.power_off = tk050f90h6_power_off,
.read_chip_id = NULL, // ST7701S does not support DCS reads
};

/* ========== Panel Descriptors ========== */

static const struct panel_desc tk050f90h6_480x854_panel_desc = {
.name = "tk050f90h6_480x854",
.connector_type = TK050F90H6_480_854_DSI_V1,
.bus_type = PANEL_BUS_DSI,

.timing = {
    .pclk_khz = 49500,
    .hactive = 480,
    .hsync_len = 10,
    .hback_porch = 20,
    .hfront_porch = 150,
    .vactive = 854,
    .vsync_len = 10,
    .vback_porch = 20,
    .vfront_porch = 316,
 },

.bg_color = PANEL_BG_COLOR_BLACK,

.gpio = {
    .reset_pin = CONFIG_MPP_DSI_LCD_RESET_PIN,
    .backlight_pin = CONFIG_MPP_DSI_LCD_BACKLIGHT_PIN,
    .reset_delay_ms = 10,
    .backlight_delay_ms = 200,
    .reset_active_low = K_TRUE,
    .backlight_active_low = K_FALSE,
},

.bus.dsi = {
    .lanes = K_DSI_2LANE,
    .cmd_mode = K_DSI_CMD_LP_MODE,
    .video_mode = K_DSI_VIDEO_BURST_MODE,
    .vc_id = 0,
},

.bus_ops = &dsi_bus_ops,
.ops = &tk050f90h6_ops,

};

/* ========== Driver Registration ========== */

static const struct panel_desc* tk050f90h6_panel_variants[] = {
&tk050f90h6_480x854_panel_desc,
NULL,
};

struct panel_drv mipi_tk050f90h6_drv = {
.connector_name = "tk050f90h6",
.panel_variants = tk050f90h6_panel_variants,
.active_panel = &tk050f90h6_480x854_panel_desc,
};

硬件板卡


01

6 Answers

用这个试试看

import time, os, urandom, sys

from media.display import *
from media.media import *

DISPLAY_WIDTH = ALIGN_UP(480, 16)
DISPLAY_HEIGHT = 854

def display_test():
    print("display test")

    # create image for drawing
    img = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.ARGB8888)

    # use lcd as display output
    Display.init(Display.ST7701, width = DISPLAY_WIDTH, height = DISPLAY_HEIGHT, to_ide = True)

    try:
        while True:
            img.clear()
            for i in range(10):
                x = (urandom.getrandbits(11) % img.width())
                y = (urandom.getrandbits(11) % img.height())
                r = (urandom.getrandbits(8))
                g = (urandom.getrandbits(8))
                b = (urandom.getrandbits(8))
                size = (urandom.getrandbits(30) % 64) + 32
                # If the first argument is a scaler then this method expects
                # to see x, y, and text. Otherwise, it expects a (x,y,text) tuple.
                # Character and string rotation can be done at 0, 90, 180, 270, and etc. degrees.
                img.draw_string_advanced(x,y,size, "Hello World!,你好世界!!!", color = (r, g, b),)

            # draw result to screen
            Display.show_image(img)

            time.sleep(1)
            os.exitpoint()
    except KeyboardInterrupt as e:
        print("user stop: ", e)
    except BaseException as e:
        import sys
        sys.print_exception(e)

    # deinit display
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)

if __name__ == "__main__":
    os.exitpoint(os.EXITPOINT_ENABLE)
    display_test()

我将运行视频发到了你的邮箱

大概是什么问题 会是硬件连接问题吗 还是厂家给的时序或者参数不对

是这个代码的运行效果嘛?

这是st7701s 不是st7701 可以通过list命令查看到添加的屏幕 运行示例可以点亮 但是没有 画面 应该往哪方面排查呢

这2个是一样的。

这个屏幕确认是mipi的吗?有没有可能是其他接口的?

image.png

看不到图片

方便添加一下联系方式吗,好像发不出来

发邮件吧。邮箱: salesAI@canaan-creative.com

微信图片_20260506143450_73_211.png

上边的看到了,这个看着没有拍全,在IDE里边显示是什么样的

我补充了

image.png
image.png

原有的480x854的不能显示嘛?

目前是480*854 如果置换宽高就直接花屏了

代码怎么写的?

from media.display import *
from media.media import *
import os, time, image
from machine import Pin

Display.init(Display.TK050F90H6, width=480, height=854, to_ide=True)

初始化媒体管理器

MediaManager.init()

img = image.Image(480, 854, image.RGB888)
img.clear()
img.draw_string_advanced(0, 0, 32, "你好1111111111111111111", color=(255, 0, 0))

Display.show_image(img)

try:
while True:
time.sleep(1)
os.exitpoint()
except KeyboardInterrupt as e:
print("用户停止:", e)
except BaseException as e:
print(f"异常:{e}")

Display.deinit()
MediaManager.deinit()