1. 点屏示例(MIPI)
本章节主要介绍点亮MIPI VIDEO CPHY 6LANE接口的模组,显示 SD 卡.BMP 图片、程序代码产生的画面,按键上翻 下翻 切换画面、 ON/OFF 开关显示。
主要内容: - 1 硬件初始化
2 初始化IO口,设置IO口电压。
3 LCD 参数设置。包括接口模式,分辨率,RGB 时序(Video mode)
4 加载画面。调用 SD 卡.BMP (必须是 24 位 bmp),和代码产生规则画面。
5 写初始化代码。
6 实现 按键“上翻”、“下翻”切换画面,ON/OFF 开关显示
注意
while 循环里需要放置10ms的延时,来维持系统的正常运行。
1.1. 硬件初始化
初始化K2000板载各种外设,电源板,背光板,信号板。
############硬件初始化###############
bsp_info = SHARP_Bsp_Init()
SHARP_user.Power_Flag = bsp_info.Power_Flag
1.2. 初始化IO口,设置IO口电压
设置IO口电压
SHARP_IOVOL_Set(SHARP_user.Power_Flag,1.8)
初始化IO口
REST = LCD_RST__IO_3
TP_RST = LCD_TP_RST
def IO_Configuration():
user_io = str_user_io()
user_io.IO_PIN = LCD_TXS_OE|REST|TP_RST
user_io.IO_Mode = OUTPUT_DIR
SHARP_UserIO_Conf(user_io)
SHARP_UserIO_BitSet(LCD_TXS_OE) #使能转换IC
def LCD_RST_1():
SHARP_UserIO_BitSet(REST)
SHARP_UserIO_BitSet(TP_RST)
def LCD_RST_0():
SHARP_UserIO_BitReset(REST)
SHARP_UserIO_BitReset(TP_RST)
1.3. LCD 屏幕参数设置
点屏前需要对屏幕参数设置,通过配置
mipi_panel_par点屏参数类对象,并通过SHARP_Display_Mipi_Init方法生效。点屏参数类 具体有以下几个参数:
pclk:屏幕pclk时钟 单位:Mhz,支持小数
h_active:水平同步信号的的有效像素
h_pulse_width:水平同步信号的脉冲宽度
h_front_porch: 水平同步信号的前沿
h_back_porch: 水平同步信号的前沿
v_active: 垂直同步信号的有效像素
v_pulse_width: 垂直同步信号的脉冲宽度
v_front_porch: 垂直同步信号的前沿
v_back_porch: 垂直同步信号的后沿
bit_mode: 数据位数
MiPi_18_BIT = 0 # 18 Bit
MiPi_24_BIT = 1 # 24 Bit
MiPi_30_BIT = 2 # 30 Bit
pclk_edge: pclk锁存边缘
MiPi_FALLING_EDGE = 0 # 下降沿锁存数据
MiPi_RISING_EDGE = 1 # 上升沿锁存数据
h_active_edge: 水平同步信号的有效电平
MiPi_LOW_ACTIVE = 0 # 低电平有效
MiPi_HIGH_ACTIVE = 1 # 高电平有效
v_active_edge: 垂直同步信号的有效电平
MiPi_LOW_ACTIVE = 0 # 低电平有效
MiPi_HIGH_ACTIVE = 1 # 高电平有效
de_active_edge: de脉冲有效电平
MiPi_LOW_ACTIVE = 0 # 低电平有效
MiPi_HIGH_ACTIVE = 1 # 高电平有效
HS_Mbps: High speed 传输速率
LP_Mbps: LOW Power 传输速率
Burst: 突发还是非突发
NONBURST_SYNC_PULSES = 0 # 非突发模式 sync pulses
NONBURST_SYNC_EVENTS = 1 # 非突发模式 sync events
BURST_MODE = 2 # 突发模式
CmdOrVideo: 数据包传输模式
VIDEO = 0 # Video模式
COMMAND = 1 # Command模式
V2C = 2 # V2C模式
TypeLane: DPHY或者CPHY类型 与 Lane数
D_PHY_1LANE = 0x11
D_PHY_2LANE = 0x12
D_PHY_3LANE = 0x13
D_PHY_4LANE = 0x14
D_PHY_8LANE = 0x18
C_PHY_1LANE = 0x21
C_PHY_2LANE = 0x22
C_PHY_3LANE = 0x23
C_PHY_6LANE = 0x26
PortDir: Port 口
AB_Port = 0
BA_Port = 1
Burst_AllLP: 突发模式下空闲进LP使能
更多详情可参考 MIPI点屏模块
def parameter_settings():
MiPi_struct = mipi_panel_par()
''' 点屏参数配置 '''
MiPi_struct.autoPanelFre = 120 # 屏幕刷新率 ,此值设置之后,pclk设置无效
MiPi_struct.pclk = 400 # PCLK时钟
MiPi_struct.HS_Mbps = 1200 # MIPI传输速率
MiPi_struct.Burst = BURST_MODE # 突发还是非突发
MiPi_struct.CmdOrVideo = VIDEO # Video还是Command模式
MiPi_struct.TypeLane = C_PHY_6LANE # DPHY或者CPHY类型与Lane数
MiPi_struct.h_active = 1600 # 水平的有效像素
MiPi_struct.h_back_porch = 50 # 水平的后沿
MiPi_struct.h_front_porch = 50 # 水平的前沿
MiPi_struct.h_pulse_width = 12 # 水平的脉冲
MiPi_struct.v_active = 2560 # 垂直的有效像素
MiPi_struct.v_back_porch = 237 # 垂直的后沿
MiPi_struct.v_front_porch = 26 # 垂直的前沿
MiPi_struct.v_pulse_width = 4 # 垂直的脉冲
MiPi_struct.bit_mode = MiPi_24_BIT # 数据位数
MiPi_struct.pclk_edge = MiPi_FALLING_EDGE # pclk锁存边缘
MiPi_struct.h_active_edge = MiPi_LOW_ACTIVE # h脉冲有效电平
MiPi_struct.v_active_edge = MiPi_LOW_ACTIVE # v脉冲有效电平
MiPi_struct.de_active_edge = MiPi_HIGH_ACTIVE # de脉冲有效电平
SHARP_Display_Mipi_Init(MiPi_struct.autoPanelFre, MiPi_struct)
1.4. 加载画面
K2000的画面,需要开机先预加载。
1.方法
SHARP_GPU_LoadFrame(frame)用于声明要开始加载画面了,其参数指定了加载的画面为第几张画面。2.加载的画面数据可来自 SD 卡图片或程序代码产生的画面。
加载来自 SD 卡的图像,可以为.bmp 格式的图片或经过转换的二进制(.BIN)文件。使用的方法为
SHARP_SDCard_BMP(file_name)和SHARP_SDCard_BIN(file_name),这两个方法位于 通用上位机 模块中若要加载程序代码编写的画面,在 通用上位机 模块中 我们有提供了一些程序代码编写的规则画面.
3.类对象 SHARP_user 里 列表 rame_hold_ms 表示切换画面时画面显示的时间,单位 ms。
4.类对象 SHARP_user 里 变量 auto_switch_mode 表示画面模式, 0--手动 1--自动
注意
目前K2000还不支持预加载用户自行编写的画面,相信在不远的将来能实现这个功能。
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(255, 255, 255) # 白
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Block4(0x7F007F, 0x007F00, 0x7F007F, 0x007F00) # Flicker
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/P2.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/P3.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/P4.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/6_beauty.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
1.5. 写初始化代码
写初始化代码使用的是方法
SHARP_MIPI_WR(mp_tuple),参数 mp_tuple为元组不定长数据,格式: mipi_data = ((0x29,0x11),(0x29,0x29))。
mipi_data = (
(0x39, 0xFF, 0x20),
(0x39, 0xFB, 0x01),
(0x39, 0x58, 0x60),
(0x39, 0xFF, 0xE0),
(0x39, 0xFB, 0x01),
# VCOM Driving Ability
(0x39, 0x14, 0x60),
(0x39, 0x16, 0xC0),
# Forcing OSC2 enable
(0x39, 0x4F, 0x02),
# /
# CMD3,PageB
(0x39, 0xFF, 0xF0),
(0x39, 0xFB, 0x01),
# slave osc workaround
(0x39, 0x3A, 0x08),
# /
# CMD3,PageC
(0x39, 0xFF, 0xD0),
(0x39, 0xFB, 0x01),
(0x39, 0x1C, 0x88),
(0x39, 0x1D, 0x08),
# /
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Only Write Slave
(0x39, 0xB9, 0x05),
# CMD2,Page0
(0x39, 0xFF, 0x20),
(0x39, 0xFB, 0x01),
(0x39, 0x18, 0x40),
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Write Master & Slave
(0x39, 0xB9, 0x02),
(0x39, 0x35, 0x00),
(0x39, 0xBB, 0x13),
# VBP+VFP=241+26=267
(0x39, 0x3B, 0x03, 0xF1, 0x1A, 0x04, 0x04),
)
for i in mipi_data:
SHARP_MIPI_WR(i)
1.6. 上下电控制
设置液晶模组所需的电源电压、背光电流,上下电顺序等。体现在 Display_ON_Trad() 和 Display_OFF()两个函数。
设置电源电压
- 设置某VDD通道电压使用的方法为
SHARP_POWER_SetVDD(group, ch, v)
group:选中板子。类对象 SHARP_user里的变量 Power_Flag 为默认已接上的板子。ch:通道号, =1 代表VDD1v:要输出的电压值,单位V,精度 0.1V更多电源功能函数使用可参考 电源板功能
输出图像信号
输出MIPI图像信号使用的方法为
SHARP_UserMipi_ON(index = None)
def Display_ON_Trad():
SHARP_DEBUG("Display_ON ...\n")
############### 设置各路电压上限 ################
SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,1,300)
SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,4,200)
SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,5,200)
############### 设置电压 ################
ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 1.8)
if ret !=0:
print(' VDD%d NG'%(1))
SHARP_Delay_ms(20)
ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 4,5.5)
if ret !=0:
print(' VDD%d NG'%(4))
SHARP_Delay_ms(10)
ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 5,-5.5)
if ret !=0:
print(' VDD%d NG'%(5))
SHARP_Delay_ms(20)
############### 上电时序 ################
LCD_RST_1()
SHARP_Delay_ms(50)
LCD_RST_0()
SHARP_Delay_ms(50)
LCD_RST_1()
SHARP_Delay_ms(50)
# 切换画面
SwitchFrame(SHARP_user.frame)
# 开启信号源发送
SHARP_UserMipi_ON()
SHARP_SSD28_LP()
############### 写初始化代码 ################
MIPI_Init_Short()
# MIPI_Init()
SHARP_Delay_ms(120)
SHARP_MIPI_WR((0x39, 0x11))
SHARP_Delay_ms(150)
SHARP_MIPI_WR((0x39, 0x29))
SHARP_MIPI_WR((0x39, 0xFF, 0x20))
SHARP_MIPI_WR((0x39, 0xFB, 0x01))
SHARP_Delay_ms(50)
SHARP_MIPI_WR((0x39, 0x37, 0x01))
SHARP_Delay_ms(20)
SHARP_MIPI_WR((0x39, 0x37, 0x00))
SHARP_SSD28_EnterConfigMode()
SHARP_Delay_ms(100)
############### 设置背光电流 ################
SHARP_LED_SetI(SHARP_user.Power_Flag,1, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,2, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,3, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,4, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,5, 24)
SHARP_Set_blHorL(SHARP_user.Power_Flag,1)
############### 打开背光 ################
#ret--电源板通信标准位 Error_info--错误信息 -1:电源板通信失败 -49: 断路 -17: 阳极短地 -33: 阳极短高 -65: 阴极短地
ret,Error_info = SHARP_LED_ON(SHARP_user.Power_Flag,1)
for i in range(4): #适用一拖四 Error_info[0] 1号机 Error_info[0] 1号机
if Error_info[i]<0:
print('LED_ON %d NG Error = %d'%(i,Error_info[i]))
SHARP_user.display_on = 1
SHARP_DEBUG("Display_ON END\n")
def Display_OFF():
SHARP_user.display_on = 0
SHARP_user.frame = 0
SHARP_DEBUG("Display_OFF ...\n")
res=SHARP_LED_OFF(SHARP_user.Power_Flag)
SHARP_DEBUG("LED_OFF res=%d\r\n"%res)
SHARP_MIPI_WR((0x39, 0XFF, 0X10))
SHARP_MIPI_WR((0x05, 0x28))
SHARP_Delay_ms(20)
SHARP_MIPI_WR((0x05, 0x10))
SHARP_Delay_ms(120)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 5, 0)
SHARP_Delay_ms(70)
LCD_RST_0()
SHARP_Delay_ms(15)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 4, 0)
SHARP_Delay_ms(10)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 0)
SHARP_Delay_ms(20)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 0)
SHARP_Delay_ms(10)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 3, 0)
SHARP_Delay_ms(10)
SHARP_UserMipi_OFF()
SHARP_DEBUG("Display_OFF END\n")
1.7. 按键控制程序
按键需要实时回读,实时处理.因此需要放在while循环里执行。
#按键读
while True:
SHARP_Delay_ms(10)
key_str = SHARP_read_key_lift(500)
if key_str.find('key_onoff_lift') != -1:
if SHARP_user.display_on == 0 :
print('KEY_ON')
# 上电时序
Display_ON_Trad()
SHARP_user.display_on = 1
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
else :
print('KEY_OFF')
# 下电时序
Display_OFF()
elif key_str.find('key_down_lift') != -1:
if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
print('KEY_DOWN')
SHARP_user.frame += 1
if SHARP_user.frame >= SHARP_user.frame_num :
SHARP_user.frame = 0
# print('frame = %d' %( SHARP_user.frame))
SwitchFrame(SHARP_user.frame)
elif key_str.find('key_up_lift') != -1:
print('KEY_UP')
if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
print('KEY_UP')
if SHARP_user.frame == 0 :
SHARP_user.frame = SHARP_user.frame_num - 1
else :
SHARP_user.frame -= 1
SwitchFrame(SHARP_user.frame)
elif key_str.find('key_enter_lift') != -1:
print('KEY_enter')
elif key_str.find('key_add_lift') != -1:
print('KEY5_add')
SHARP_user.auto_switch_mode = 1
elif key_str.find('key_sub_lift') != -1:
print('KEY6_sub')
SHARP_user.auto_switch_mode = 0
elif key_str.find('key_spare_lift') != -1:
print('key_spare_lift')
if SHARP_user.auto_switch_mode == 1 and SHARP_user.display_on == 1 :
if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
if SHARP_user.frame < (SHARP_user.frame_num - 1) :
SHARP_user.frame += 1
else :
SHARP_user.frame = 0
SwitchFrame(SHARP_user.frame)
1.8. 整体点屏示例
from mp_img import *
from mp_gpu import *
from mp_user import *
from mp_power import *
from mp_display_mipi import *
from mp_bsp_init import *
REST = LCD_RST__IO_3
TP_RST = LCD_TP_RST
class User_Fun():
Power_Flag = 0
Backlight_Flag = 0,
frame = 0
frame_num = 0
display_on = 0
auto_switch_mode = 0 # 画面模式 =0 手动 =1 自动
frame_hold_ms = [] # 画面保持时间 ,在LoadFrame() 函数中赋值
def IO_Configuration():
user_io = str_user_io()
user_io.IO_PIN = LCD_TXS_OE|REST|TP_RST
user_io.IO_Mode = OUTPUT_DIR
SHARP_UserIO_Conf(user_io)
SHARP_UserIO_BitSet(LCD_TXS_OE) #使能转换IC
def LCD_RST_1():
SHARP_UserIO_BitSet(REST)
SHARP_UserIO_BitSet(TP_RST)
def LCD_RST_0():
SHARP_UserIO_BitReset(REST)
SHARP_UserIO_BitReset(TP_RST)
def parameter_settings():
MiPi_struct = mipi_panel_par()
''' 点屏参数配置 '''
MiPi_struct.autoPanelFre = 120 # 屏幕刷新率 ,此值设置之后,pclk设置无效
MiPi_struct.pclk = 400 # PCLK时钟
MiPi_struct.HS_Mbps = 1200 # MIPI传输速率
MiPi_struct.Burst = BURST_MODE # 突发还是非突发
MiPi_struct.CmdOrVideo = VIDEO # Video还是Command模式
MiPi_struct.TypeLane = C_PHY_6LANE # DPHY或者CPHY类型与Lane数
MiPi_struct.h_active = 1600 # 水平的有效像素
MiPi_struct.h_back_porch = 50 # 水平的后沿
MiPi_struct.h_front_porch = 50 # 水平的前沿
MiPi_struct.h_pulse_width = 12 # 水平的脉冲
MiPi_struct.v_active = 2560 # 垂直的有效像素
MiPi_struct.v_back_porch = 237 # 垂直的后沿
MiPi_struct.v_front_porch = 26 # 垂直的前沿
MiPi_struct.v_pulse_width = 4 # 垂直的脉冲
MiPi_struct.bit_mode = MiPi_24_BIT # 数据位数
MiPi_struct.pclk_edge = MiPi_FALLING_EDGE # pclk锁存边缘
MiPi_struct.h_active_edge = MiPi_LOW_ACTIVE # h脉冲有效电平
MiPi_struct.v_active_edge = MiPi_LOW_ACTIVE # v脉冲有效电平
MiPi_struct.de_active_edge = MiPi_HIGH_ACTIVE # de脉冲有效电平
SHARP_Display_Mipi_Init(MiPi_struct.autoPanelFre, MiPi_struct)
# 加载图片
def LoadFrame():
SHARP_DEBUG("Load image..")
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(255, 255, 255) # 白
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Block4(0x7F007F, 0x007F00, 0x7F007F, 0x007F00) # Flicker
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/P2.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/P3.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/P4.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_SDCard_BMP('/sdcard/6_beauty.bmp')
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(127, 127, 127) # 灰
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(0, 0, 0) # 黑
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(255, 0, 0) # 红
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(0, 255, 0) # 绿
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Full(0, 0, 255) # 蓝
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Gray256_V() # 灰阶
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Checker(9,12)
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Box()
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
SHARP_GPU_LoadFrame(SHARP_user.frame_num)
SHARP_Img_Gray256_H()
SHARP_user.frame_hold_ms.append(1000)
SHARP_user.frame_num += 1
DEBUG(" OK\n")
def SwitchFrame(frame):
# 切图之前
# FrameBefor(frame)
SHARP_SSD28_DisplayFrame(frame) # 切图
# 切图之后
# FrameAfter(frame)
def run():
############硬件初始化###############
bsp_info = Sky_Bsp_Init()
SHARP_user.Power_Flag = bsp_info.Power_Flag
SHARP_IOVOL_Set(SHARP_user.Power_Flag,1.8)
############显示工程名###############
project_name='MIPI_VIDEO_CPHY_6LANE_DEMO'
SHARP_box_ui_Project_Name_Page3(project_name)
IO_Configuration()
############屏幕参数配置 ################
parameter_settings()
############ 加载图片 ################
LoadFrame()
while True:
try:
run_while()
except ITException as e: #IO口中断异常处理 不可修改
SHARP_DEBUG("ITException ERR\r")
except Exception as e: #其他异常处理 不可修改
##异常里执行的功能 用户可自行更改
SHARP_DEBUG("Exception ERR\r")
raise e #上报错误信息
def run_while():
Display_OFF()
SHARP_MONITOR_SetBee(SHARP_user.Power_Flag,1)
SHARP_Delay_ms(500)
SHARP_MONITOR_SetBee(SHARP_user.Power_Flag,0)
#按键读
while True:
SHARP_Delay_ms(10)
key_str = SHARP_read_key_lift(500)
if key_str.find('key_onoff_lift') != -1:
if SHARP_user.display_on == 0 :
print('KEY_ON')
# 上电时序
Display_ON_Trad()
SHARP_user.display_on = 1
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
else :
print('KEY_OFF')
# 下电时序
Display_OFF()
elif key_str.find('key_down_lift') != -1:
if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
print('KEY_DOWN')
SHARP_user.frame += 1
if SHARP_user.frame >= SHARP_user.frame_num :
SHARP_user.frame = 0
# print('frame = %d' %( SHARP_user.frame))
SwitchFrame(SHARP_user.frame)
elif key_str.find('key_up_lift') != -1:
print('KEY_UP')
if SHARP_user.auto_switch_mode == 0 and SHARP_user.display_on == 1 :
if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
print('KEY_UP')
if SHARP_user.frame == 0 :
SHARP_user.frame = SHARP_user.frame_num - 1
else :
SHARP_user.frame -= 1
SwitchFrame(SHARP_user.frame)
elif key_str.find('key_enter_lift') != -1:
print('KEY_enter')
elif key_str.find('key_add_lift') != -1:
print('KEY5_add')
SHARP_user.auto_switch_mode = 1
elif key_str.find('key_sub_lift') != -1:
print('KEY6_sub')
SHARP_user.auto_switch_mode = 0
elif key_str.find('key_spare_lift') != -1:
print('key_spare_lift')
if SHARP_user.auto_switch_mode == 1 and SHARP_user.display_on == 1 :
if SHARP_GetMeasureTime_ms(frame_hold_cnt) >= SHARP_user.frame_hold_ms[SHARP_user.frame] :
frame_hold_cnt = SHARP_MeasureTimeStart_ms()
if SHARP_user.frame < (SHARP_user.frame_num - 1) :
SHARP_user.frame += 1
else :
SHARP_user.frame = 0
SwitchFrame(SHARP_user.frame)
# 传统上电模式
def Display_ON_Trad():
DEBUG("Display_ON ...\n")
############### 设置各路电压上限 ################
SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,1,300)
SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,4,200)
SHARP_POWER_SetVDDLimit(SHARP_user.Power_Flag,5,200)
############### 设置电压 ################
ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 1.8)
if ret !=0:
print(' VDD%d NG'%(1))
SHARP_Delay_ms(20)
ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 4,5.5)
if ret !=0:
print(' VDD%d NG'%(4))
SHARP_Delay_ms(10)
ret=SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 5,-5.5)
if ret !=0:
print(' VDD%d NG'%(5))
SHARP_Delay_ms(20)
############### 上电时序 ################
LCD_RST_1()
SHARP_Delay_ms(50)
LCD_RST_0()
SHARP_Delay_ms(50)
LCD_RST_1()
SHARP_Delay_ms(50)
# 切换画面
SwitchFrame(SHARP_user.frame)
# 开启信号源发送
SHARP_UserMipi_ON()
SHARP_SSD28_LP()
############### 写初始化代码 ################
MIPI_Init_Short()
# MIPI_Init()
SHARP_Delay_ms(120)
SHARP_MIPI_WR((0x39, 0x11))
SHARP_Delay_ms(150)
SHARP_MIPI_WR((0x39, 0x29))
SHARP_MIPI_WR((0x39, 0xFF, 0x20))
SHARP_MIPI_WR((0x39, 0xFB, 0x01))
SHARP_Delay_ms(50)
SHARP_MIPI_WR((0x39, 0x37, 0x01))
SHARP_Delay_ms(20)
SHARP_MIPI_WR((0x39, 0x37, 0x00))
SHARP_SSD28_EnterConfigMode()
SHARP_Delay_ms(100)
############### 设置背光电流 ################
SHARP_LED_SetI(SHARP_user.Power_Flag,1, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,2, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,3, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,4, 24)
SHARP_LED_SetI(SHARP_user.Power_Flag,5, 24)
SHARP_Set_blHorL(SHARP_user.Power_Flag,1)
############### 打开背光 ################
#ret--电源板通信标准位 Error_info--错误信息 -1:电源板通信失败 -49: 断路 -17: 阳极短地 -33: 阳极短高 -65: 阴极短地
ret,Error_info = LED_ON(SHARP_user.Power_Flag,1)
for i in range(4): #适用一拖四 Error_info[0] 1号机 Error_info[0] 1号机
if Error_info[i]<0:
print('LED_ON %d NG Error = %d'%(i,Error_info[i]))
SHARP_user.display_on = 1
DEBUG("Display_ON END\n")
# 下电时序
def Display_OFF():
SHARP_user.display_on = 0
SHARP_user.frame = 0
SHARP_DEBUG("Display_OFF ...\n")
res=SHARP_LED_OFF(SHARP_user.Power_Flag)
SHARP_DEBUG("LED_OFF res=%d\r\n"%res)
SHARP_MIPI_WR((0x39, 0XFF, 0X10))
SHARP_MIPI_WR((0x05, 0x28))
SHARP_Delay_ms(20)
SHARP_MIPI_WR((0x05, 0x10))
SHARP_Delay_ms(120)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 5, 0)
SHARP_Delay_ms(70)
LCD_RST_0()
SHARP_Delay_ms(15)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 4, 0)
SHARP_Delay_ms(10)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 2, 0)
SHARP_Delay_ms(20)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 1, 0)
SHARP_Delay_ms(10)
SHARP_POWER_SetVDD(SHARP_user.Power_Flag, 3, 0)
SHARP_Delay_ms(10)
SHARP_UserMipi_OFF()
SHARP_DEBUG("Display_OFF END\n")
def MIPI_Init_Short():
mipi_data = (
(0x39, 0xFF, 0x20),
(0x39, 0xFB, 0x01),
(0x39, 0x58, 0x60),
(0x39, 0xFF, 0xE0),
(0x39, 0xFB, 0x01),
# VCOM Driving Ability
(0x39, 0x14, 0x60),
(0x39, 0x16, 0xC0),
# Forcing OSC2 enable
(0x39, 0x4F, 0x02),
# /
# CMD3,PageB
(0x39, 0xFF, 0xF0),
(0x39, 0xFB, 0x01),
# slave osc workaround
(0x39, 0x3A, 0x08),
# /
# CMD3,PageC
(0x39, 0xFF, 0xD0),
(0x39, 0xFB, 0x01),
(0x39, 0x1C, 0x88),
(0x39, 0x1D, 0x08),
# /
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Only Write Slave
(0x39, 0xB9, 0x05),
# CMD2,Page0
(0x39, 0xFF, 0x20),
(0x39, 0xFB, 0x01),
(0x39, 0x18, 0x40),
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Write Master & Slave
(0x39, 0xB9, 0x02),
(0x39, 0x35, 0x00),
(0x39, 0xBB, 0x13),
# VBP+VFP=241+26=267
(0x39, 0x3B, 0x03, 0xF1, 0x1A, 0x04, 0x04),
)
for i in mipi_data:
SHARP_MIPI_WR(i)
##################回读######################################
for i in range (SHARP_VerMan_GetMasterBoardTotal()):
SHARP_VerMan_MasterIndexEnable(i) #选中某块信号板
for j in range(1,3):
SHARP_SSD28_SelectRead(j) # 选择读端口
read_data = SHARP_SSD28_DcsReadDT06(0x54, 1)
SHARP_DEBUG('%d = 0x%02x' % (j, read_data[0]))
SHARP_VerMan_MasterAllEnable()
def MIPI_Init():
mipi_data = (
(0x39, 0xFF, 0x20),
(0x39, 0xFB, 0x01),
(0x39, 0x05, 0x69),
# VGH=10V
(0x39, 0x07, 0x32),
# VGL=-10V
(0x39, 0x08, 0x32),
# EN_VMODGATE2=1
(0x39, 0x0D, 0x63),
# VGH=8V
(0x39, 0x0E, 0x41),
# VGL=-8V
(0x39, 0x0F, 0x41),
# VCOM=-0.2V
# (0x39,0x89,0x2B
# (0x39,0x8A,0x2B
# (0x39,0x8B,0x2B
# (0x39,0x8C,0x2B
# GVDD=5V
(0x39, 0x94, 0x00),
(0x39, 0x95, 0xD7),
(0x39, 0x96, 0xD7),
# ISOP
(0x39, 0x6D, 0xAA),
# OPPO ID
(0x39, 0x44, 0x82),
# EN_GMACP
(0x39, 0x75, 0xC4),
# V128
(0x39, 0x77, 0xB3),
# /
# GAMMA
(0x39, 0xB0, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4F, 0x00,
0x71, 0x00, 0x8F, 0x00, 0xA8, 0x00, 0xBF, 0x00, 0xD2),
(0x39, 0xB1, 0x00, 0xE3, 0x01, 0x1D, 0x01, 0x4A, 0x01,
0x8A, 0x01, 0xB9, 0x02, 0x04, 0x02, 0x42, 0x02, 0x44),
(0x39, 0xB2, 0x02, 0x7E, 0x02, 0xBD, 0x02, 0xE8, 0x03,
0x1C, 0x03, 0x40, 0x03, 0x6B, 0x03, 0x7B, 0x03, 0x8B),
(0x39, 0xB3, 0x03, 0x9C, 0x03, 0xAD, 0x03,
0xC6, 0x03, 0xE0, 0x03, 0xF9, 0x03, 0xFF),
# G(+)
(0x39, 0xB4, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4F, 0x00,
0x71, 0x00, 0x8F, 0x00, 0xA8, 0x00, 0xBF, 0x00, 0xD2),
(0x39, 0xB5, 0x00, 0xE3, 0x01, 0x1D, 0x01, 0x4A, 0x01,
0x8A, 0x01, 0xB9, 0x02, 0x04, 0x02, 0x42, 0x02, 0x44),
(0x39, 0xB6, 0x02, 0x7E, 0x02, 0xBD, 0x02, 0xE8, 0x03,
0x1C, 0x03, 0x40, 0x03, 0x6B, 0x03, 0x7B, 0x03, 0x8B),
(0x39, 0xB7, 0x03, 0x9C, 0x03, 0xAD, 0x03,
0xC6, 0x03, 0xE0, 0x03, 0xF9, 0x03, 0xFF),
# B(+)
(0x39, 0xB8, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4F, 0x00,
0x71, 0x00, 0x8F, 0x00, 0xA8, 0x00, 0xBF, 0x00, 0xD2),
(0x39, 0xB9, 0x00, 0xE3, 0x01, 0x1D, 0x01, 0x4A, 0x01,
0x8A, 0x01, 0xB9, 0x02, 0x04, 0x02, 0x42, 0x02, 0x44),
(0x39, 0xBA, 0x02, 0x7E, 0x02, 0xBD, 0x02, 0xE8, 0x03,
0x1C, 0x03, 0x40, 0x03, 0x6B, 0x03, 0x7B, 0x03, 0x8B),
(0x39, 0xBB, 0x03, 0x9C, 0x03, 0xAD, 0x03,
0xC6, 0x03, 0xE0, 0x03, 0xF9, 0x03, 0xFF),
# R+C1
(0x39, 0xC6, 0x11),
(0x39, 0xC7, 0x11),
(0x39, 0xC8, 0x11),
(0x39, 0xC9, 0x11),
(0x39, 0xCA, 0x11),
# R-C1
(0x39, 0xCB, 0x11),
(0x39, 0xCC, 0x11),
(0x39, 0xCD, 0x11),
(0x39, 0xCE, 0x11),
(0x39, 0xCF, 0x11),
# G+C1
(0x39, 0xD0, 0x11),
(0x39, 0xD1, 0x11),
(0x39, 0xD2, 0x11),
(0x39, 0xD3, 0x11),
(0x39, 0xD4, 0x11),
# G-C1
(0x39, 0xD5, 0x11),
(0x39, 0xD6, 0x11),
(0x39, 0xD7, 0x11),
(0x39, 0xD8, 0x11),
(0x39, 0xD9, 0x11),
# B+C1
(0x39, 0xDA, 0x11),
(0x39, 0xDB, 0x11),
(0x39, 0xDC, 0x11),
(0x39, 0xDD, 0x11),
(0x39, 0xDE, 0x11),
# B-C1
(0x39, 0xDF, 0x11),
(0x39, 0xE0, 0x11),
(0x39, 0xE1, 0x11),
(0x39, 0xE2, 0x11),
(0x39, 0xE3, 0x11),
(0x39, 0xFF, 0x21),
(0x39, 0xFB, 0x01),
# R(-)
(0x39, 0xB0, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x47, 0x00,
0x69, 0x00, 0x87, 0x00, 0xA0, 0x00, 0xB7, 0x00, 0xCA),
(0x39, 0xB1, 0x00, 0xDB, 0x01, 0x15, 0x01, 0x42, 0x01,
0x82, 0x01, 0xB1, 0x01, 0xFC, 0x02, 0x3A, 0x02, 0x3C),
(0x39, 0xB2, 0x02, 0x76, 0x02, 0xB5, 0x02, 0xE0, 0x03,
0x14, 0x03, 0x38, 0x03, 0x63, 0x03, 0x73, 0x03, 0x83),
(0x39, 0xB3, 0x03, 0x94, 0x03, 0xA5, 0x03,
0xBE, 0x03, 0xD8, 0x03, 0xF1, 0x03, 0xF7),
# G(-)
(0x39, 0xB4, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x47, 0x00,
0x69, 0x00, 0x87, 0x00, 0xA0, 0x00, 0xB7, 0x00, 0xCA),
(0x39, 0xB5, 0x00, 0xDB, 0x01, 0x15, 0x01, 0x42, 0x01,
0x82, 0x01, 0xB1, 0x01, 0xFC, 0x02, 0x3A, 0x02, 0x3C),
(0x39, 0xB6, 0x02, 0x76, 0x02, 0xB5, 0x02, 0xE0, 0x03,
0x14, 0x03, 0x38, 0x03, 0x63, 0x03, 0x73, 0x03, 0x83),
(0x39, 0xB7, 0x03, 0x94, 0x03, 0xA5, 0x03,
0xBE, 0x03, 0xD8, 0x03, 0xF1, 0x03, 0xF7),
# B(-)
(0x39, 0xB8, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x47, 0x00,
0x69, 0x00, 0x87, 0x00, 0xA0, 0x00, 0xB7, 0x00, 0xCA),
(0x39, 0xB9, 0x00, 0xDB, 0x01, 0x15, 0x01, 0x42, 0x01,
0x82, 0x01, 0xB1, 0x01, 0xFC, 0x02, 0x3A, 0x02, 0x3C),
(0x39, 0xBA, 0x02, 0x76, 0x02, 0xB5, 0x02, 0xE0, 0x03,
0x14, 0x03, 0x38, 0x03, 0x63, 0x03, 0x73, 0x03, 0x83),
(0x39, 0xBB, 0x03, 0x94, 0x03, 0xA5, 0x03,
0xBE, 0x03, 0xD8, 0x03, 0xF1, 0x03, 0xF7),
# /
(0x39, 0xFF, 0x23),
(0x39, 0xFB, 0x01),
(0x39, 0xA3, 0x50),
# /
(0x39, 0xFF, 0x24),
(0x39, 0xFB, 0x01),
# Hi-Z
(0x39, 0x00, 0x03),
# CTSW_VCOM(VEN2)
(0x39, 0x01, 0x27),
# CTSW_VCOM(VEN2)
(0x39, 0x02, 0x27),
# CTSW_VCOM_E(VEN2)
(0x39, 0x03, 0x27),
# CTSW_R
(0x39, 0x04, 0x00),
# CTSW_G
(0x39, 0x05, 0x00),
# CTSW_B
(0x39, 0x06, 0x00),
# STV1
(0x39, 0x07, 0x04),
# STV2
(0x39, 0x08, 0x05),
# CNB(UD2)
(0x39, 0x09, 0x23),
# CN(UD1)
(0x39, 0x0A, 0x22),
# VGH_G(VEN3)
(0x39, 0x0B, 0x28),
# VGH_G(VEN3)
(0x39, 0x0C, 0x28),
# RESET(GCL)
(0x39, 0x0D, 0x21),
# VGL_G(STV_TP_S1)
(0x39, 0x0E, 0x29),
# VGL_G(STV_TP_S1)
(0x39, 0x0F, 0x29),
# CK1
(0x39, 0x10, 0x0C),
# CK2
(0x39, 0x11, 0x0D),
# CK3
(0x39, 0x12, 0x0E),
# CK4
(0x39, 0x13, 0x0F),
# EN_TOUCH(VEN1)
(0x39, 0x14, 0x26),
# EN_TOUCH(VEN1)
(0x39, 0x15, 0x26),
# Hi-Z
(0x39, 0x16, 0x03),
# CTSW_VCOM(VEN2)
(0x39, 0x17, 0x27),
# CTSW_VCOM(VEN2)
(0x39, 0x18, 0x27),
# CTSW_VCOM_E(VEN2)
(0x39, 0x19, 0x27),
# CTSW_R
(0x39, 0x1A, 0x00),
# CTSW_G
(0x39, 0x1B, 0x00),
# CTSW_B
(0x39, 0x1C, 0x00),
# STV1
(0x39, 0x1D, 0x04),
# STV2
(0x39, 0x1E, 0x05),
# CNB(UD2)
(0x39, 0x1F, 0x23),
# CN(UD1)
(0x39, 0x20, 0x22),
# VGH_G(VEN3)
(0x39, 0x21, 0x28),
# VGH_G(VEN3)
(0x39, 0x22, 0x28),
# RESET(GCL)
(0x39, 0x23, 0x21),
# VGL_G(STV_TP_S1)
(0x39, 0x24, 0x29),
# VGL_G(STV_TP_S1)
(0x39, 0x25, 0x29),
# CK1
(0x39, 0x26, 0x0C),
# CK2
(0x39, 0x27, 0x0D),
# CK3
(0x39, 0x28, 0x0E),
# CK4
(0x39, 0x29, 0x0F),
# EN_TOUCH(VEN1)
(0x39, 0x2A, 0x26),
# EN_TOUCH(VEN1)
(0x39, 0x2B, 0x26),
# STV
(0x39, 0x2F, 0x02),
(0x39, 0x30, 0x01),
(0x39, 0x33, 0x01),
(0x39, 0x34, 0x02),
(0x39, 0x37, 0x22),
(0x39, 0x39, 0x00),
(0x39, 0x3A, 0x01),
(0x39, 0x3B, 0x40),
(0x39, 0x3D, 0x02),
# CK
(0x39, 0x4D, 0x43),
(0x39, 0x4E, 0x21),
(0x39, 0x51, 0x12),
(0x39, 0x52, 0x34),
(0x39, 0x55, 0x0B, 0x0B),
(0x39, 0x56, 0x04),
(0x39, 0x58, 0x10),
(0x39, 0x59, 0x20),
(0x39, 0x5A, 0x43),
(0x39, 0x5B, 0x3C),
(0x39, 0x5E, 0x00, 0x0B),
(0x39, 0x5F, 0x00),
# EN_LFD_SOURCE=0
(0x39, 0x65, 0x82),
# EN_TOUCH, CTSW_VCOM, VGH_G
(0x39, 0x96, 0x73),
# RESET
(0x39, 0xB1, 0x0E),
(0x39, 0xB2, 0x0D),
# CN,CNB
(0x39, 0xC4, 0x2F),
(0x39, 0xB6, 0x05, 0x00, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00),
# Resolution (1600RGBx2560)
(0x39, 0x60, 0xC8),
(0x39, 0x61, 0x00),
(0x39, 0x63, 0xA0),
(0x39, 0x91, 0x40),
(0x39, 0x92, 0x45),
(0x39, 0x93, 0x1A),
(0x39, 0x94, 0xF6),
# Choose hclk from OSC2
(0x39, 0x95, 0x81),
# Suppot backward scan
(0x39, 0xAB, 0x22),
# SOG_HBP
(0x39, 0xD7, 0x55),
(0x39, 0xDA, 0x0A),
(0x39, 0xDE, 0x08),
# Normal
(0x39, 0xDB, 0x71),
(0x39, 0xDC, 0x45),
(0x39, 0xDD, 0x22),
# Line N
(0x39, 0xDF, 0x01),
(0x39, 0xE0, 0x45),
# Line N+1
(0x39, 0xE1, 0x01),
(0x39, 0xE2, 0x45),
# TP0
(0x39, 0xE3, 0x01),
(0x39, 0xE4, 0x45),
# TP3
(0x39, 0xE5, 0x01),
(0x39, 0xE6, 0x45),
# Gate EQ
# Normal
(0x39, 0x5C, 0x00),
(0x39, 0x5D, 0x00),
# TP3
(0x39, 0x8D, 0x00),
(0x39, 0x8E, 0x00),
# No Sync @ TP
(0x39, 0xB5, 0x90),
# vd_drop
(0x39, 0xC2, 0xDF),
# /
(0x39, 0xFF, 0x25),
(0x39, 0xFB, 0x01),
# disable auto_vbp_vfp
(0x39, 0x05, 0x00),
# ESD_DET_ERR_SEL
(0x39, 0x19, 0x07),
# DP_N_GCK
(0x39, 0x1F, 0x43),
(0x39, 0x20, 0x3C),
# DP_N_1_GCK
(0x39, 0x26, 0x43),
(0x39, 0x27, 0x3C),
# TP0_GCK
(0x39, 0x33, 0x43),
(0x39, 0x34, 0x3C),
# TP3 GCK/MUX=1
(0x39, 0x3F, 0x00),
# TP3_GCK_START_LINE
# (0x39,0x40,0x02),
# TP3_STV
(0x39, 0x44, 0x00),
(0x39, 0x45, 0x45),
# TP3_GCK
(0x39, 0x48, 0x43),
(0x39, 0x49, 0x3C),
# LSTP0
(0x39, 0x5B, 0x00),
(0x39, 0x5C, 0x00),
(0x39, 0x5D, 0x00),
(0x39, 0x5E, 0xD0),
(0x39, 0x61, 0x43),
(0x39, 0x62, 0x3C),
# en_vfp_addvsync
(0x39, 0xF1, 0x10),
# CMD2,Page10
(0x39, 0xFF, 0x2A),
(0x39, 0xFB, 0x01),
# PWRONOFF
# STV
(0x39, 0x64, 0x96),
# GCK
(0x39, 0x6A, 0x9E),
# RESET(GCL)
(0x39, 0x76, 0x9E),
# CN(UD1)
(0x39, 0x79, 0x96),
# CNB(UD2)
(0x39, 0x7C, 0x96),
# EN_TOUCH(VEN1)
(0x39, 0x7F, 0x96),
# CTSW_VCOM(VEN2)
(0x39, 0x82, 0x16),
# VGH_G(VEN3)
(0x39, 0x85, 0x9E),
# VGL_G(STV_TP_S1)
(0x39, 0x88, 0x96),
# ABOFF
(0x39, 0xA2, 0xFF),
(0x39, 0xA3, 0xFF),
(0x39, 0xA4, 0xF3),
(0x39, 0xA5, 0xFF),
# Long_V_TIMING disable
(0x39, 0xD6, 0x08),
# CMD2,Page6
(0x39, 0xFF, 0x26),
(0x39, 0xFB, 0x01),
# TPEN
(0x39, 0x00, 0x81),
# Timing Table A
(0x39, 0x01, 0x30),
# Timing Table C
# (0x39,0x01,0xB0
(0x39, 0x02, 0x31),
(0x39, 0x0A, 0xF2),
# Table A (120Hz,160*1+300*8=2560)
(0x39, 0x04, 0x50),
(0x39, 0x0A, 0xF5),
(0x39, 0x0C, 0x08),
(0x39, 0x0D, 0x10),
(0x39, 0x0F, 0x00),
(0x39, 0x11, 0x00),
(0x39, 0x12, 0x50),
(0x39, 0x13, 0xA0),
(0x39, 0x14, 0x2C),
(0x39, 0x15, 0x00),
(0x39, 0x16, 0x11),
(0x39, 0x17, 0xA0),
(0x39, 0x18, 0x86),
(0x39, 0x19, 0x1C),
(0x39, 0x1A, 0xFF),
(0x39, 0x1B, 0x1B),
(0x39, 0x1C, 0xFF),
(0x39, 0x22, 0x00),
(0x39, 0x23, 0x00),
(0x39, 0x2A, 0x1C),
(0x39, 0x2B, 0xFF),
(0x39, 0x1D, 0x00),
(0x39, 0x1E, 0x45),
(0x39, 0x1F, 0x45),
(0x39, 0x24, 0x00),
(0x39, 0x25, 0x45),
(0x39, 0x2F, 0x04),
(0x39, 0x30, 0x45),
(0x39, 0x31, 0x04),
(0x39, 0x32, 0x5D),
(0x39, 0x39, 0x00),
(0x39, 0x3A, 0x45),
# PRZ1
(0x39, 0x20, 0x01),
(0x39, 0x33, 0x66),
(0x39, 0x34, 0x66),
(0x39, 0x35, 0x66),
(0x39, 0x8B, 0x50),
# Table C
# CMD2,Page2
(0x39, 0xFF, 0x22),
(0x39, 0xFB, 0x01),
(0x39, 0x9F, 0x50),
(0x39, 0x6F, 0x01),
(0x39, 0x70, 0x11),
(0x39, 0x73, 0x01),
(0x39, 0x74, 0x45),
(0x39, 0x76, 0x01),
(0x39, 0x77, 0x45),
(0x39, 0xA0, 0x3F),
(0x39, 0xA9, 0x50),
(0x39, 0xAA, 0x28),
(0x39, 0xAB, 0x28),
(0x39, 0xAD, 0x10),
(0x39, 0xB8, 0x00),
(0x39, 0xB9, 0x45),
(0x39, 0xBA, 0x45),
(0x39, 0xBB, 0x45),
(0x39, 0xBE, 0x04),
(0x39, 0xBF, 0x45),
(0x39, 0xC0, 0x04),
(0x39, 0xC1, 0x5D),
(0x39, 0xC2, 0x00),
(0x39, 0xC5, 0x00),
(0x39, 0xC6, 0x01),
(0x39, 0xC7, 0x40),
(0x39, 0xCA, 0x43),
(0x39, 0xCB, 0x3C),
(0x39, 0xCE, 0x00),
(0x39, 0xCF, 0x43),
(0x39, 0xD0, 0x3C),
(0x39, 0xD3, 0x43),
(0x39, 0xD4, 0x3C),
(0x39, 0xD7, 0x00),
(0x39, 0xDC, 0x43),
(0x39, 0xDD, 0x3C),
(0x39, 0xE1, 0x43),
(0x39, 0xE2, 0x3C),
(0x39, 0xF2, 0x00),
(0x39, 0xF3, 0x01),
(0x39, 0xF4, 0x40),
# OSC Trim Function
(0x39, 0xFF, 0x25),
(0x39, 0xFB, 0x01),
(0x39, 0x13, 0x01),
(0x39, 0x14, 0x1A),
# (0x39,0x14,0x22),
(0x39, 0xBC, 0x01),
(0x39, 0xBD, 0x1A),
(0x39, 0xDB, 0x01),
(0x39, 0xDC, 0x60),
(0x39, 0xFF, 0x2A),
(0x39, 0xFB, 0x01),
(0x39, 0x97, 0x3C),
(0x39, 0x98, 0x02),
(0x39, 0x99, 0x95),
(0x39, 0x9A, 0x03),
(0x39, 0x9B, 0x00),
(0x39, 0x9C, 0x0B),
(0x39, 0x9D, 0x0A),
(0x39, 0x9E, 0x90),
(0x39, 0xF2, 0x3C),
(0x39, 0xF3, 0x02),
(0x39, 0xF4, 0x95),
(0x39, 0xF5, 0x03),
(0x39, 0xF6, 0x00),
(0x39, 0xF7, 0x0B),
(0x39, 0xF8, 0x0A),
(0x39, 0xF9, 0x90),
# CMD2,Page7
(0x39, 0xFF, 0x27),
(0x39, 0xFB, 0x01),
# VPOR_DYNH_EN=1, VPOR_CNT_REV=1
(0x39, 0x56, 0x06),
# FR0
(0x39, 0x58, 0x80),
(0x39, 0x59, 0xF2),
(0x39, 0x5A, 0x00),
(0x39, 0x5B, 0x01),
(0x39, 0x5C, 0x00),
(0x39, 0x5D, 0x00),
(0x39, 0x5E, 0x20),
(0x39, 0x5F, 0x10),
(0x39, 0x60, 0x00),
(0x39, 0x61, 0x44),
(0x39, 0x62, 0x00),
(0x39, 0x63, 0x01),
(0x39, 0x64, 0xAE),
(0x39, 0x65, 0x43),
(0x39, 0x66, 0x00),
(0x39, 0x67, 0x01),
(0x39, 0x68, 0xAF),
# FR1
(0x39, 0x78, 0x80),
(0x39, 0x79, 0xF2),
(0x39, 0x7A, 0x00),
(0x39, 0x7B, 0x01),
(0x39, 0x7C, 0x00),
(0x39, 0x7D, 0x00),
(0x39, 0x7E, 0x20),
(0x39, 0x7F, 0x10),
(0x39, 0x80, 0x00),
(0x39, 0x81, 0x44),
(0x39, 0x82, 0x00),
(0x39, 0x83, 0x01),
(0x39, 0x84, 0xAE),
(0x39, 0x85, 0x43),
(0x39, 0x86, 0x00),
(0x39, 0x87, 0x01),
(0x39, 0x88, 0xAF),
(0x39, 0xC0, 0x00),
(0x39, 0x3F, 0x40),
(0x39, 0x43, 0x40),
(0x39, 0x47, 0x40),
(0x39, 0x4B, 0x40),
(0x39, 0x30, 0x02),
(0x39, 0x76, 0x02),
(0x39, 0x96, 0x02),
(0x39, 0xF8, 0x02),
# TE ESD Solution
(0x39, 0xD0, 0x71),
(0x39, 0xD1, 0x84),
(0x39, 0xD2, 0x30),
(0x39, 0xDE, 0x43),
(0x39, 0xDF, 0x03),
# FTE output TSVD, LEDPWM output TSHD
(0x39, 0xD1, 0x44),
(0x39, 0xD2, 0x57),
# /
# CMD2,Page10
(0x39, 0xFF, 0x2A),
(0x39, 0xFB, 0x01),
# PEN_EN=1, UL_FREQ=0
(0x39, 0x22, 0x2F),
# VFR_SEL
# 60Hz
# (0x39,0x23,0x0C),
# 120Hz
(0x39, 0x23, 0x0D),
# FR0 (60Hz, VFP=26+26+2560+246=2858)
(0x39, 0x24, 0x01),
(0x39, 0x25, 0x45),
(0x39, 0x27, 0x00),
(0x39, 0x28, 0x1A),
(0x39, 0x29, 0x00),
(0x39, 0x2A, 0x1A),
(0x39, 0x2B, 0x00),
(0x39, 0x2D, 0x1A),
# FR1 (120Hz)
(0x39, 0x2F, 0x00),
(0x39, 0x30, 0x45),
(0x39, 0x32, 0x00),
(0x39, 0x33, 0x1A),
(0x39, 0x34, 0x00),
(0x39, 0x35, 0x1A),
(0x39, 0x36, 0x00),
(0x39, 0x37, 0x1A),
# CMD2 Page4
(0x39, 0xFF, 0x24),
(0x39, 0xFB, 0x01),
(0x39, 0xC2, 0xDA),
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Only Write Slave
(0x39, 0xB9, 0x05),
# CMD2 Page4
(0x39, 0xFF, 0x24),
(0x39, 0xFB, 0x01),
(0x39, 0xC2, 0xDF),
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Write Master & Slave
(0x39, 0xB9, 0x02),
# CMD3,PageA
(0x39, 0xFF, 0xE0),
(0x39, 0xFB, 0x01),
# VCOM Driving Ability
(0x39, 0x14, 0x60),
(0x39, 0x16, 0xC0),
# Forcing OSC2 enable
(0x39, 0x4F, 0x02),
# CMD3,PageB
(0x39, 0xFF, 0xF0),
(0x39, 0xFB, 0x01),
# slave osc workaround
(0x39, 0x3A, 0x08),
# CMD3,PageC
(0x39, 0xFF, 0xD0),
(0x39, 0xFB, 0x01),
(0x39, 0x02, 0xAF),
(0x39, 0x09, 0xEE),
(0x39, 0x1C, 0x99),
(0x39, 0x1D, 0x09),
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Only Write Slave
(0x39, 0xB9, 0x05),
# CMD2,Page0
(0x39, 0xFF, 0x20),
(0x39, 0xFB, 0x01),
(0x39, 0x18, 0x40),
# CMD1
(0x39, 0xFF, 0x10),
(0x39, 0xFB, 0x01),
# Write Master & Slave
(0x39, 0xB9, 0x02),
(0x39, 0x35, 0x00),
(0x39, 0xBB, 0x13),
# VBP+VFP=246+26=272
(0x39, 0x3B, 0x03, 0xF6, 0x1A, 0x04, 0x04),
)
for i in mipi_data:
MIPI_WR(i)
#*****************************************************************************************************************************************
#*****************************************************************************************************************************************
#-----------------------------------------------------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------------------------------------------
#*****************************************************************************************************************************************
#*****************************************************************************************************************************************
#-----------------------------------------------------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------------------------------------------------
#--------------------START-------------------------------------
# ''' 初始化配置 '''
SHARP_user=User_Fun()
if __name__ == '__main__': #主程序入口
SHARP_DEBUG("Enter Python OK !")
run()