ST7102调屏

最近在调了ST7102的驱动,心得记录一下,一是记忆深刻,另外是分享让大家更快上手
主要步骤其实只有三步:
1.复位时序一定要正确
2.确认水平,垂直前后肩与水平同步消隐
3.确认发送的cmd指令

步骤一:


static void panel_dev_power_on(struct mipi_dsim_lcd_device *dsim_dev, int power)
{
	static int boot_flag  = 0;
	struct panel_dev *panel_st7701s_xiaomi = dev_get_drvdata(panel->dev);
	if (power == 1) {
		//reset
		dev_info(panel->dev, "Panel power on reset\n");
		if (gpio_is_valid(panel_st7701s_xiaomi->rst.gpio)) {
			gpio_direction_output(panel_st7701s_xiaomi->rst.gpio, !panel_st7701s_xiaomi->rst.active_level);
			msleep(50);
			gpio_direction_output(panel_st7701s_xiaomi->rst.gpio, panel_st7701s_xiaomi->rst.active_level);
			msleep(120);
			gpio_direction_output(panel_st7701s_xiaomi->rst.gpio, !panel_st7701s_xiaomi->rst.active_level);
			msleep(120);
			boot_flag = 1;
		}
		//open backlight
		if (gpio_is_valid(panel_st7701s_xiaomi->bl.gpio)) {
			gpio_direction_output(panel_st7701s_xiaomi->bl.gpio, panel_st7701s_xiaomi->bl.active_level);
		}
	} else {
		dev_info(panel->dev, "Panel power on open backlight\n");
		if (gpio_is_valid(panel_st7701s_xiaomi->bl.gpio)) {
			gpio_direction_output(panel_st7701s_xiaomi->bl.gpio, panel_st7701s_xiaomi->bl.active_level);
		}
	}

}

步骤二:

struct fb_videomode jzfb_st7701s_videomode[] = {
	//[0] 4lane 60fps
	{
		.name = "st7701s_xiaomi",
		.refresh = 30,
		.xres = 480,
		.yres = 960,
		.pixclock = KHZ2PICOS(56000),  //60
		.left_margin = 40,
		.right_margin = 80,
		.upper_margin = 10,
		.lower_margin = 215,
		.hsync_len = 2,
		.vsync_len = 2,
		.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
		.vmode = FB_VMODE_NONINTERLACED,
		.flag = 0
	},

	{
		.name = "st7701s_xiaomi",
		.refresh = 30,
		.xres = 480,
		.yres = 960,
		.pixclock = KHZ2PICOS(56000),  //60
		.left_margin = 40,
		.right_margin = 80,
		.upper_margin = 10,
		.lower_margin = 215,
		.hsync_len = 2,
		.vsync_len = 2,
		.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
		.vmode = FB_VMODE_NONINTERLACED,
		.flag = 0
	},

};

步骤三:


static struct dsi_cmd_packet st7701s_xiaomi_cmd_list[] = {


//{0x99, 50, 0x00, {0x00}},  //sleep 5ms

{0x05, 0x10, 0x00 },
{0x05, 0x28, 0x00 },

{0x29, 0x04, 0x00, { 0x99, 0x71, 0x02, 0xa2, } },
{0x29, 0x04, 0x00, { 0x99, 0x71, 0x02, 0xa3, } },
{0x29, 0x04, 0x00, { 0x99, 0x71, 0x02, 0xa4, } },

{0x39, 0x02, 0x00, { 0x78, 0x21, } },
{0x39, 0x02, 0x00, { 0x79, 0xCF, } },
//2lane
//{0x39, 0x02, 0x00, { 0xA4, 0x31, } },

{0x39, 0x08, 0x00, { 0xB0, 0x22, 0x57, 0x1E, 0x61, 0x2F, 0x57, 0x61, } },

{0x39, 0x03, 0x00, { 0xB7, 0x64, 0x64, } },

{0x39, 0x03, 0x00, { 0xBF, 0x6e, 0x6e, } },
{0x29, 0x26, 0x00, { 0xC8, 0x00, 0x00, 0x13, 0x23, 0x3E, 0x00, 0x6A, 0x03, 0xB0, 0x06, 0x11, 0x0F, 0x07, 0x85, 0x03, 0x21, 0xD5, 0x01, 0x18, 0x00, 0x22, 0x56, 0x0F, 0x98, 0x0A, 0x32, 0xF8, 0x0D, 0x48, 0x0F, 0xF3, 0x80, 0x0F, 0xAC, 0xC1, 0x03, 0xC4, } },

{0x29, 0x26, 0x00, { 0xC9, 0x00, 0x00, 0x13, 0x23, 0x3E, 0x00, 0x6A, 0x03, 0xB0, 0x06, 0x11, 0x0F, 0x07, 0x85, 0x03, 0x21, 0xD5, 0x01, 0x18, 0x00, 0x22, 0x56, 0x0F, 0x98, 0x0A, 0x32, 0xF8, 0x0D, 0x48, 0x0F, 0xF3, 0x80, 0x0F, 0xAC, 0xC1, 0x03, 0xC4, } },

{0x39, 0x07, 0x00, { 0xD7, 0x10, 0x0C, 0x77, 0x19, 0xE0, 0xE0, } },
{0x39, 0x21, 0x00, { 0xA3, 0x40, 0x03, 0x80, 0xCF, 0x44, 0x00, 0x00, 0x00, 0x00, 0x04, 0x6F, 0x6F, 0x00, 0x1A, 0x00, 0x45, 0x05, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x02, 0x20, 0x52, 0x00, 0x05, 0x00, 0x00, 0xFF, } },
{0x39, 0x2D, 0x00, { 0xA6, 0x02, 0x00, 0x24, 0x55, 0x35, 0x00, 0x38, 0x00, 0x5E, 0x5E, 0x00, 0x24, 0x55,0x36, 0x00, 0x37, 0x00, 0x5E, 0x5E, 0x02, 0xAC, 0x51, 0x3A, 0x00, 0x00, 0x00, 0x5E, 0x5E, 0x00, 0xAC, 0x11, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x5E, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, } },

{0x39, 0x31, 0x00, { 0xA7, 0x19, 0x19, 0x00, 0x64, 0x40, 0x07, 0x16, 0x40, 0x00, 0x04, 0x03, 0x5E, 0x5E, 0x00, 0x64, 0x40, 0x25, 0x34, 0x00, 0x00, 0x02, 0x01, 0x5E, 0x5E, 0x00, 0x64, 0x40, 0x4B, 0x5A, 0x00, 0x00, 0x02, 0x01, 0x5E, 0x5E, 0x00, 0x24, 0x40, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x5E, 0x00, 0x44, } },

{0x39, 0x26, 0x00, { 0xAC, 0x08, 0x0A, 0x11, 0x00, 0x13, 0x03, 0x1B,0x18, 0x06, 0x1A, 0x19, 0x1B, 0x1B,0x1B, 0x18, 0x1B, 0x09,0x0B, 0x10, 0x02, 0x12, 0x01, 0x1B, 0x18, 0x06, 0x1A, 0x19, 0x1B, 0x1B, 0x1B, 0x18, 0x1B, 0xFF, 0x67, 0xFF, 0x67, 0x00, } },
{0x39, 0x08, 0x00, { 0xAD, 0xCC, 0x40, 0x46, 0x11, 0x04, 0x6F, 0x6F, } },
{0x39, 0x0F, 0x00, { 0xE8, 0x30, 0x07, 0x00, 0x7A, 0x7A, 0x9C, 0x00, 0xE2, 0x04, 0x00, 0x00, 0x00, 0x00, 0xEF, } },
{0x29, 0x03, 0x00, { 0x75, 0x03, 0x04, } },
{0x39, 0x22, 0x00, { 0xE7, 0x8B, 0x3C, 0x00, 0x0C, 0xF0, 0x5D, 0x00, 0x5D, 0x00, 0x5D, 0x00, 0x5D, 0x00, 0xFF, 0x00, 0x08, 0x7B, 0x00, 0x00, 0xC8, 0x6A, 0x5A, 0x08, 0x1A, 0x3C, 0x00, 0x91, 0x01, 0xCC, 0x01, 0x7F, 0xF0, 0x22, } },
{0x39, 0x0A, 0x00, { 0xE9, 0x4C, 0x7F, 0x08, 0x07, 0x1A, 0x7A, 0x22, 0x1A, 0x33, } },

{0x05, 0x11, 0x00 }, 	//Sleep out
{0x99, 120, 0x00, {0x00}},		//delay 250ms

{0x05, 0x29, 0x00 },  	// Display On

{0x29, 0x02, 0x00, { 0x35, 0x00, } },
//{0x39, 0x02, 0x00, { 0xB5, 0x85, } },

};

lcd ic厂提供的txt步骤:


#=== Power Off
power.off all

#=== Power-On Sequence
mipi.host.reset
delay 100

#=== output mode
#mipi.mode dual LR
mipi.mode 2ch

mipi.lane.enable
delay 100

#=== Setdata rate
#(burst)(nonburst)(nonburst-pulse)

mipi.dsi 4 500 burst #MDL
delay 100

mipi.video 960 480 60 10 215 40 40 2 2   #TP 3ms

#mipi.video 960 480 91 10 375 40 40 2 2  #TP 3ms

#===== Power setting VIO VDD VCC
power.on 5v 12v
delay 100
power.level 1.8 2.8
power.on vio vdd
delay 100
#power.vspn.level 5.5 -5.5
#power.on vsp vsn
#delay 100
#----------------------------------------------------------
#-- Set GPIO pin
#--    1. Direction register value: 0=input  1=output
#--    2. Pin Info.
#--             GPIO1 : Reset pin
#####--        GPIO2 : IOVCC pin
#--             GPIO3 : AVDD pin EN
#--        GPIO4 : AVEE pin EN
#--             GPIO Others : Not used
#----------------------------------------------------------
#=== Set Link Level
gpio.Level 1.8
gpio.output.enable

#===== Setting GPIO
gpio.write 0x00
gpio.dir   0x7F

#===== Init. GPIO : GPIO1(RESX):high->low->high
gpio.write 0x0F
delay 100
gpio.write 0x0E
delay 100
gpio.write 0x0F
delay 100

#=== HS Clock Disable
mipi.clock.disable
delay 20
mipi.video.disable
delay 20
mipi.write 0x05 0x10
mipi.write 0x05 0x28
#------------- KEY -----------------
mipi.write 0x29 0x99 0x71 0x02 0xa2
mipi.write 0x29 0x99 0x71 0x02 0xa3
mipi.write 0x29 0x99 0x71 0x02 0xa4
#-----------------------------------
mipi.write 0x39 0x78 0x21
mipi.write 0x39 0x79 0xCF
#------Power------------------------
#VGH_VGL
mipi.write 0x39 0xB0 0x22 0x57 0x1E 0x61 0x2F 0x57 0x61
#Source
mipi.write 0x39 0xB7 0x64 0x64
#VCOM
mipi.write 0x39 0xBF 0x6e 0x6e
#------Gamma------------------------
mipi.write 0x29 0xC8 0x00 0x00 0x13 0x23 0x3E 0x00 0x6A 0x03 0xB0 0x06 0x11 0x0F 0x07 0x85 0x03 0x21 0xD5 0x01 0x18 0x00 0x22 0x56 0x0F 0x98 0x0A 0x32 0xF8 0x0D 0x48 0x0F 0xF3 0x80 0x0F 0xAC 0xC1 0x03 0xC4
mipi.write 0x29 0xC9 0x00 0x00 0x13 0x23 0x3E 0x00 0x6A 0x03 0xB0 0x06 0x11 0x0F 0x07 0x85 0x03 0x21 0xD5 0x01 0x18 0x00 0x22 0x56 0x0F 0x98 0x0A 0x32 0xF8 0x0D 0x48 0x0F 0xF3 0x80 0x0F 0xAC 0xC1 0x03 0xC4
#TDDI_ATG_Tool_v1.1.2
#------GIP--------------------------
mipi.write 0x39 0xD7 0x10 0x0C 0x77 0x19 0xE0 0xE0

mipi.write 0x39 0xA3 0x40 0x03 0x80 0xCF 0x44 0x00 0x00 0x00 0x00 0x04 0x6F 0x6F 0x00 0x1A 0x00 0x45 0x05 0x00 0x00 0x00 0x00 0x46 0x00 0x00 0x02 0x20 0x52 0x00 0x05 0x00 0x00 0xFF

mipi.write 0x39 0xA6 0x02 0x00 0x24 0x55 0x35 0x00 0x38 0x00 0x5E 0x5E 0x00 0x24 0x55 0x36 0x00 0x37 0x00 0x5E 0x5E 0x02 0xAC 0x51 0x3A 0x00 0x00 0x00 0x5E 0x5E 0x00 0xAC 0x11 0x00 0x00 0x00 0x00 0x5E 0x5E 0x00 0x00 0x06 0x00 0x00 0x00 0x00

mipi.write 0x39 0xA7 0x19 0x19 0x00 0x64 0x40 0x07 0x16 0x40 0x00 0x04 0x03 0x5E 0x5E 0x00 0x64 0x40 0x25 0x34 0x00 0x00 0x02 0x01 0x5E 0x5E 0x00 0x64 0x40 0x4B 0x5A 0x00 0x00 0x02 0x01 0x5E 0x5E 0x00 0x24 0x40 0x69 0x78 0x00 0x00 0x00 0x00 0x5E 0x5E 0x00 0x44

mipi.write 0x39 0xAC 0x08 0x0A 0x11 0x00 0x13 0x03 0x1B 0x18 0x06 0x1A 0x19 0x1B 0x1B 0x1B 0x18 0x1B 0x09 0x0B 0x10 0x02 0x12 0x01 0x1B 0x18 0x06 0x1A 0x19 0x1B 0x1B 0x1B 0x18 0x1B 0xFF 0x67 0xFF 0x67 0x00

mipi.write 0x39 0xAD 0xCC 0x40 0x46 0x11 0x04 0x6F 0x6F

mipi.write 0x39 0xE8 0x30 0x07 0x00 0x7A 0x7A 0x9C 0x00 0xE2 0x04 0x00 0x00 0x00 0x00 0xEF

mipi.write 0x29 0x75 0x03 0x04
                     #1   2    3    4    5    6    7    8    9    10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44
mipi.write 0x39 0xE7 0x8B 0x3C 0x00 0x0C 0xF0 0x5D 0x00 0x5D 0x00 0x5D 0x00 0x5D 0x00 0xFF 0x00 0x08 0x7B 0x00 0x00 0xC8 0x6A 0x5A 0x08 0x1A 0x3C 0x00 0x91 0x01 0xCC 0x01 0x7F 0xF0 0x22

mipi.write 0x39 0xE9 0x4C 0x7F 0x08 0x07 0x1A 0x7A 0x22 0x1A 0x33

#-----------------------------------
#------------- Lock KEY -----------------
#mipi.write 0x29 0x99 0x71 0x02 0x00
#-----------------------------------
mipi.write 0x05 0x11
delay 120
mipi.write 0x05 0x29

mipi.write 0x29 0x35 0x00

#mipi.write 0x39 0xB5 0x85  #BIST MODE

mipi.clock.Enable
delay 20


mipi.video.Enable
delay 20

image.fill 255 255 255

### ST7102 规格书、特性、参数及与其他型号的对比分析 #### 1. ST7102 的规格书与特性 ST7102 是一款专为中小尺寸 TFT-LCD 面板设计的控制器,具有以下主要特性: - 支持 QVGA (320x240) 和 WQVGA (480x272) 分辨率的显示[^6]。 - 提供 RGB 并行接口和 MCU 接口,便于与各种微控制器连接[^6]。 - 内置 Gamma 校正功能,确保色彩还原准确[^6]。 - 支持多种显示模式,包括正常显示、反向显示和部分显示模式[^6]。 #### 2. ST7102 的关键参数 以下是 ST7102 的一些关键参数: - **工作电压**:支持 2.7V 至 3.3V 的电源电压[^6]。 - **帧率**:支持高达 60Hz 的刷新率[^6]。 - **接口速度**:RGB 接口支持高达 16MHz 的时钟频率[^6]。 - **功耗**:在典型条件下,功耗约为 50mW[^6]。 #### 3. ST7102 与其他型号的对比分析 ##### 3.1 ST7102ST7701S 的对比 - **分辨率支持**:ST7701S 支持更高分辨率的显示(如 WQXGA),而 ST7102 仅支持 QVGA 和 WQVGA 级别的分辨率[^6]。 - **接口类型**:ST7701S 提供更丰富的接口选项(如 MIPI DSI 和 SPI),而 ST7102 主要支持 RGB 并行接口和 MCU 接口[^6]。 - **应用场景**:ST7701S 更适合高性能应用,如平板电脑;ST7102 则适用于低成本的小型显示,如手持设备[^6]。 ##### 3.2 ST7102ST7789 的对比 - **驱动能力**:ST7789 能够驱动更大的显示(如 HD 分辨率 480x800),而 ST7102 的驱动能力较弱,仅限于 QVGA 和 WQVGA 显示[^7]。 - **封装形式**:ST7789 通常采用 LQFP 或 CSP 封装,而 ST7102 多采用 QFN 封装[^7]。 - **功耗**:ST7102 在低功耗模式下的表现优于 ST7789,更适合电池供电设备[^7]。 ##### 3.3 ST7102ST7735 的对比 - **分辨率支持**:ST7735 支持更高的分辨率(如 128x160 或 128x128),而 ST7102 主要针对 QVGA 和 WQVGA 分辨率[^8]。 - **初始化复杂度**:ST7735 的初始化命令序列相对简单,而 ST7102 的初始化需要更多的配置步骤[^8]。 - **成本**:ST7102 的成本略高于 ST7735,但其性能和功能也更为强大[^8]。 #### 4. 示例代码:通过 STM32 驱动 ST7102 以下是一个基于 STM32 的示例代码,用于初始化 ST7102: ```c void ST7102_Init(SPI_HandleTypeDef *hspi) { uint8_t cmd, data; void SendCommand(uint8_t command) { HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi, &command, 1, HAL_MAX_DELAY); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); } void SendData(uint8_t *data, uint16_t size) { HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi, data, size, HAL_MAX_DELAY); HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET); } SendCommand(0x01); // 软件复位 HAL_Delay(120); SendCommand(0x11); // 出睡眠模式 HAL_Delay(120); SendCommand(0x3A); // 设置颜色格式 data = 0x05; // 16-bit 颜色 SendData(&data, 1); SendCommand(0x29); // 显示开启 } ``` ####
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值