全志melis系统8080接口CPU屏调试
一、准备工作
- 全志melis OS针对8080的显示驱动代码(全志或代理商提供)
- 显示屏规格书SPEC(供应商提供)
- 显示屏驱动IC的Datasheet(供应商提供或度娘)
- 显示屏驱动IC的初始化代码(供应商提供或度娘)
二、点屏步骤
- Step1 确认屏资料
- Step2 确认硬件
- Step3 配置软件
- Step4 调整效果
三、核验资料
1. 查看屏规格书确认其为8080接口的CPU屏
【图1】
2.查看驱动IC型号
【图2】
或
【图3】
四、确认硬件
1、8080接口18位、16位、8位接线方式
- F系列芯片支持4条信号线和24条数据线,不同接口、不同位数的屏严格按照下图接线。
- 4条信号线会根据软件的配置输出相应的时序信号。
【图4】
2、屏背光是否点亮
必须保证屏的背光已经亮的条件下,再开始调屏;否则无法查看到屏显示的内容显示。
3、屏的供电是否正常
4、屏的上电后是否有复位信号
- 硬件复位(阻容复位)。需要确保复位信号与屏供电的时序差,保证屏已经正常供电后,才执行复位
- 软件复位。通过IO口模拟复位信号;一般在初始化前进行,复位后增加至少50ms的延时后,再开始写初始化。
五、代码配置
以16位CPU屏为例
1、配置文件sys_config.fex
根据【图4】的CPU16bit 65K管脚定义在[lcd_para]配置相应的数据脚。
2、CPU屏参数配置lcd_panel_cfg.c
基础参数 | 参数说明 | 补充说明 |
---|---|---|
lcd_x | 屏幕宽度 | *必配 |
lcd_y | 屏幕高度 | *必配 |
lcd_dclk_freq | Dot Clock时钟频率 | 影响刷新率(*必配) |
lcd_pwm_freq | 背光控制pwm脉冲频率 | (选配) |
lcd_srgb | 正常不需要改动(选配) | |
lcd_swap | R和B颜色对调 | 红蓝颜色反时可配置(选配) |
屏接口配置参数 | 值 | 说明 | 补充 |
---|---|---|---|
lcd_if(*必配) | 0 | RGB接口屏 | |
1 | 8080接口MCU(CPU)屏 | ||
2 | TTL | ||
3 | LVDS接口 | 部分芯片需加转换IC |
数据线位数配置参数 | 值 | 说明 | 补充 |
---|---|---|---|
lcd_cpu_if(*必配) | 0 | 18位256K | |
4 | 16位mode3 | ||
5 | 9位 | ||
6 | 8位256K | ||
7 | 8位65K |
时钟信号相位 | 值 | 说明 | 补充 |
---|---|---|---|
lcd_io_cfg0(选配) | 0x0000 0000 | Normal phase offset | |
0x1000 0000 | 1/3 phase offset | ||
0x2000 0000 | 2/3 phase offset |
CPU屏必须配置的参数
【图5】
3、写初始化
系统接口 | 说明 | 示例 |
---|---|---|
LCD_CPU_WR_INDEX | 写命令 | LCD_CPU_WR_INDEX(0, 0x36) |
LCD_CPU_WR_DATA | 写数据 | LCD_CPU_WR_DATA(0, 0x48) |
LCD_CPU_WR | 写一组命令+数据 | LCD_CPU_WR(0, 0x36, 0x48) |
void GC9305_Initial()
{
LCD_CPU_WR_INDEX(0, 0xFE);
LCD_CPU_WR_INDEX(0, 0xEF);
LCD_CPU_WR_INDEX(0, 0x36);
LCD_CPU_WR_DATA(0, 0x08); //0x28, 0x48
//...
//省略部分代码
//...
LCD_CPU_WR_INDEX(0, 0x11);
delayms(120);
LCD_CPU_WR_INDEX(0, 0x29);
delayms(50);
LCD_CPU_WR_INDEX(0, 0x2C);
}
static void LCD_open_cmd(__u32 sel)
{
LCD_CPU_AUTO_FLUSH(0,0);
//初始化函数封装
GC9305_Initial();
LCD_CPU_AUTO_FLUSH(0,1);
}
void Lcd_cpuisr_proc(void)
{
LCD_CPU_WR_INDEX(0, 0x2B);
LCD_CPU_WR_DATA(0, 0x00);
LCD_CPU_WR_DATA(0, 0x00);
LCD_CPU_WR_DATA(0, 0x00);
LCD_CPU_WR_DATA(0, 0xef); //239
LCD_CPU_WR_INDEX(0, 0x2A);
LCD_CPU_WR_DATA(0, 0x00);
LCD_CPU_WR_DATA(0, 0x00);
LCD_CPU_WR_DATA(0, 0x01);
LCD_CPU_WR_DATA(0, 0x3f); //319
LCD_CPU_WR_INDEX(0, 0x2C);
}
六、常见问题
显示白屏
说明屏没有工作,初始化没有写进去。
- 确认初始化是否正确
- 初始化结束后有没有写驱动IC的Data Write指令,如:0x2c、0x22等具体见驱动IC的Datasheet
- 屏是否损坏,换屏验证
- 板子是否正常, 换板验证
- 检查供电、硬件接线
显示彩点
说明初始化已经写成功,驱动IC正常工作
- 检查系统是否开始给显示屏送数据
- 检查初始化的显示窗口区域是否设置正确
显示不满屏
- 检查初始化的显示窗口区域寄存器的配置是否正常;如本例中的0x2a、0x2b的值是否与基础参数中lcd_x、lcd_y保持一致
- 检查Memory Access Control寄存器(本例为0x36h)配置正确
横竖屏旋转
- 通过Memory Access Control寄存器的MV位可配置显示方向
- 旋转后窗口区域寄存器大小设置需要对调
如:竖屏时 LCD_CPU_WR_INDEX(0, 0x2A); LCD_CPU_WR_DATA(0, 0x00); // x start LCD_CPU_WR_DATA(0, 0x00); // 0 LCD_CPU_WR_DATA(0, 0x00); // x end LCD_CPU_WR_DATA(0, 0xef); // 239 LCD_CPU_WR_INDEX(0, 0x2B); LCD_CPU_WR_DATA(0, 0x00); // y start LCD_CPU_WR_DATA(0, 0x00); // 0 LCD_CPU_WR_DATA(0, 0x01); //y end LCD_CPU_WR_DATA(0, 0x3f); //319 旋转后: LCD_CPU_WR_INDEX(0, 0x2A); LCD_CPU_WR_DATA(0, 0x00); // x start LCD_CPU_WR_DATA(0, 0x00); // 0 LCD_CPU_WR_DATA(0, 0x01); // x end LCD_CPU_WR_DATA(0, 0x3f); // 319 LCD_CPU_WR_INDEX(0, 0x2B); LCD_CPU_WR_DATA(0, 0x00); // y start LCD_CPU_WR_DATA(0, 0x00); // 0 LCD_CPU_WR_DATA(0, 0x00); // y end LCD_CPU_WR_DATA(0, 0xef); // 239
左右、上下镜像
- 通过Memory Access Control寄存器的MX、MY位可配置镜像方向
图像边沿显示黑点或像素点闪动
- 一般是lcd_cpu_if数据位数与硬件数据线接线的位数不匹配造成数据传输时丢数据或数据错乱造成
画面偏色
- 如白色的图片显示偏红或其他颜色,需要检查sys_config.fex中数据线的配置是否与【图4】相同
显示发白
- 可尝试调节vcom电压寄存器,可通过调节两个相对极端的值的范围观察现象的往哪个方向好转或恶化后,再进行微调
显示有水纹
- 可尝试调节VGH和VGL电压寄存器,可通过调节两个相对极端的值的范围观察现象的往哪个方向好转或恶化后,再进行微调