MIPI-DSI协议解析——DCS命令集

MIPI协议族,定义了一个专门用于显示的命令集,叫做Display Command Set,简称为DCS;这个DCS起什么作用呢?主要是Host和Display之间的一些Command配置数据传输,以及读Display的数据等;

使用过SPI的屏的朋友应该知道,上电后,就开始劈里啪啦的一顿配置,比如SPI的屏幕ST7735S,上电初始化,就是一顿干:

static void LCD_Parameters_Init(void)
{
    LCD_RST_LOW();// Reset
    delay_ms(100);
    LCD_RST_HIGH();
    delay_ms(100);
 
    LCD_BLK_HIGH();// Open bl
    delay_ms(100);
    LCD_WriteCmd(0x11); // Sleep out
    delay_ms(120);    // Delay 120ms
    //------------------------------------ST7735S Frame rate-------------------------------------------------//
    LCD_WriteCmd(0xB1); //Frame rate 80Hz
    LCD_WriteData(0x02);
    LCD_WriteData(0x35);
    LCD_WriteData(0x36);
 
    LCD_WriteCmd(0xB2); //Frame rate 80Hz
    LCD_WriteData(0x02);
    LCD_WriteData(0x35);
    LCD_WriteData(0x36);
 
    LCD_WriteCmd(0xB3); //Frame rate 80Hz
    LCD_WriteData(0x02);
    LCD_WriteData(0x35);
    LCD_WriteData(0x36);
    LCD_WriteData(0x02);
    LCD_WriteData(0x35);
    LCD_WriteData(0x36);
    //------------------------------------End ST7735S Frame rate-------------------------------------------//
    LCD_WriteCmd(0xB4); //Dot inversion
    LCD_WriteData(0x03);
    //------------------------------------ST7735S Power Sequence-----------------------------------------//
    LCD_WriteCmd(0xC0);
    LCD_WriteData(0xA2);
    LCD_WriteData(0x02);
    LCD_WriteData(0x84);
 
    LCD_WriteCmd(0xC1);
    LCD_WriteData(0xC5);
 
    LCD_WriteCmd(0xC2);
    LCD_WriteData(0x0D);
    LCD_WriteData(0x00);
 
    LCD_WriteCmd(0xC3);
    LCD_WriteData(0x8D);
    LCD_WriteData(0x2A);
 
    LCD_WriteCmd(0xC4);
    LCD_WriteData(0x8D);
    LCD_WriteData(0xEE);
    //---------------------------------End ST7735S Power Sequence---------------------------------------//
    LCD_WriteCmd(0xC5); //VCOM
    LCD_WriteData(0x0a);
 
    LCD_WriteCmd(0x36);
    LCD_WriteData(0x08);
    //------------------------------------ST7735S Gamma Sequence-----------------------------------------//
    LCD_WriteCmd(0XE0);
    LCD_WriteData(0x12);
    LCD_WriteData(0x1C);
    LCD_WriteData(0x10);
    LCD_WriteData(0x18);
    LCD_WriteData(0x33);
    LCD_WriteData(0x2C);
    LCD_WriteData(0x25);
    LCD_WriteData(0x28);
    LCD_WriteData(0x28);
    LCD_WriteData(0x27);
    LCD_WriteData(0x2F);
    LCD_WriteData(0x3C);
    LCD_WriteData(0x00);
    LCD_WriteData(0x03);
    LCD_WriteData(0x03);
    LCD_WriteData(0x10);
 
    LCD_WriteCmd(0XE1);
    LCD_WriteData(0x12);
    LCD_WriteData(0x1C);
    LCD_WriteData(0x10);
    LCD_WriteData(0x18);
    LCD_WriteData(0x2D);
    LCD_WriteData(0x28);
    LCD_WriteData(0x23);
    LCD_WriteData(0x28);
    LCD_WriteData(0x28);
    LCD_WriteData(0x26);
    LCD_WriteData(0x2F);
    LCD_WriteData(0x3B);
    LCD_WriteData(0x00);
    LCD_WriteData(0x03);
    LCD_WriteData(0x03);
    LCD_WriteData(0x10);
    //------------------------------------End ST7735S Gamma Sequence-----------------------------------------//
    LCD_WriteCmd(0x3A); //65k mode
    LCD_WriteData(0x05);
    LCD_WriteCmd(0x29); //Display on
}

可以看到,一般是一个Command一堆Data,Command描述了这次传输是用来干嘛的,Data呢,就是此次事件的数据

为了标准化显示设备,所以呢,就有制定一些个标准(听君一席话,如听一席话);

为了统一江山,Display方,大家按照同一套标准来定制这个Command+data,此刻DCS闪亮登场;

1:Display Architectures

Display的结构,DCS中分为了3类;

可以看出来,这三类的区别就是中间Display Module是否带了Framebuffer,或者是带了一部分的Framebuffer

Display Module带不带Framebuffer有啥区别呢?如果带了Framebuffer,那么图形数据不用每次都从主机获取,主机刷一次数据到display module的frame buffer中,然后display module就自己会将它自己的framebuffer往屏幕(panel)上面刷;

如果Display Module不带Framebuffer,为了维持屏幕上有数据,需要主机不停的给display module灌数据,并显示到panel上

2:Power Level Definition 

针对上面三种不同的Display架构,DCS中描述了三种对应的Power Level;

第一种显示架构:

第二种显示架构:

第三种显示架构:

 

3:Display Command Set 

DCS 用于发送pixel数据,配置Display Module,或者读Display Module的一些数据或者寄存器;

DCS分为两类:

  • User Command Set
  • Manufacturer Command Set

Command域都是8-bit的(1 Byte);其中0x00 - 0xAF是User Command Set的,其余的留给了Manufacturer Command Set;

Manufacture Command Set(MCS)是厂商用的,在出厂的时候,设置的一些默认的参数,一旦出厂,这些命令不可见了,会被认为是NOP;

User Command Set是独立的部分,里面的所有的Command(除了write_LUT),都应该被Display Module 厂家实现;

其他的未定义的Command码,都应该被视作NOP;

4:Command List 

DCS定义了很多很多的Command,每个Command都有Command Code有的Command带参数,有的不带,有的只适用与Type1,2,3架构的一种;DCS的List如下所示:

 

5:Command Accessibility 

DCS的这些个命令,并不是所有的状态下(Normal Idle,Sleep,Partial)都可以访问的,具体的可以参考SPEC,太多了,不举例了;

6:Default Modes and Values 

同样的,关于Display Module来说,这么多命令,每次都配置一次,太多;默认情况下,有些设置有它的默认值,这里呢,也参考SPEC,太多了,不多列举了;

7:Command Descriptions 

DCS每个命令都有一些关于它的描述,包括它的Command code,它的paramters,效果,以及它的流程等;

7.1:enter_idle_mode

Command Code = 0x39

发送这条命令,使得Display Module进入Idle模式

效果如下 :

明显可以看到,Idle模式下,色彩信息被减少了;

进入Idle的流程如下:

7.2 set_page_address

Command Code = 0x2B

用于设置显示区域的Y坐标起始和终止;

Command + Paramter 1 + Parameter 2 + Paramter 3 + Paramter 4

  

SP 是Start Page的简写,EP是End Page的简写,这里叫Page可能会让你疑惑,那么看这个图:

可以知道,其实Page就是纵坐标的意思;

它的典型使用流程是:

先使用set_column_address命令,设置横坐标,在使用set_page_address 设置纵坐标,然后在这个横坐标之间,去进行局部绘制;

7.3 set_column_address  

Command Code = 0x2A

这个命令刚刚上面提到了,用于设置显示区域的X坐标起始和终止;

 SC 是Start Column的简写,EC是End Column的简写,图:

 典型用法如上面一个所示:

用于指定一个矩形区域进行绘制;

还有很多Command,就不全部举例了,这个文档,可以当作参考手册来使用,用的时候查就行;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于MIPI-DSI协议的LCD驱动接口设计是一种在嵌入式系统中使用的显示技术。MIPI-DSI(Mobile Industry Processor Interface - Display Serial Interface)是一种面向移动设备的高速串行接口协议,用于处理显示和触摸数据传输。 在基于MIPI-DSI协议的LCD驱动接口设计中,LCD控制器与主处理器之间通过MIPI-DSI接口进行通信。该接口使用差分信号传输,其中包括一个差分对作为时钟线和多个差分对作为数据线。通过这种方式,可以实现高速数据传输和抗干扰能力。 接口设计中的关键组件包括显示控制器、MIPI D-PHY、MIPI DSI TX、以及液晶显示屏。显示控制器负责生成图形数据和控制信号,将它们转换为MIPI-DSI协议所需的格式。MIPI D-PHY负责处理差分信号的物理层转换,以及时钟和数据的发送与接收。MIPI DSI TX是将数据流编码为MIPI-DSI协议的转换器。液晶显示屏是接收和解码来自DSI TX的协议,并将数据转换为相应的像素信息并显示出来。 这种接口设计的实现具有以下优点: 1. 高速传输:基于差分信号的传输,使得数据的传输速度更快。 2. 灵活性:可以通过配置和协议选项支持不同分辨率和颜色位深的LCD屏幕。 3. 低功耗:接口设计能够提供较低的功耗和电压等级。 4. 抗干扰能力:MIPI-DSI接口提供了抗干扰的特性,能够有效减少干扰对显示效果的影响。 总结而言,基于MIPI-DSI协议的LCD驱动接口设计使得显示系统在嵌入式领域中有更好的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值