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

2023-10-26

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,就不全部举例了,这个文档,可以当作参考手册来使用,用的时候查就行;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIPI-DSI协议解析——DCS命令集 的相关文章

  • sqlmap的用法,sqlmap -r

    sqlmap结合burpsuit进行sql注入漏洞查找 配置好burpsuit和浏览器之间的代理 网上方法很多 创建一个记事本 准备写入参数使用 1 在sqlmap根目录下创建list txt 你也可以在其他地方创建 待会写上目录就行 2
  • Mysql 数据库介绍

    目录 数据库 1 数据库的介绍 2 数据库的分类 3 数据库的作用 4 数据库特点 5 小结 关系型数据库管理系统 1 关系数据库管理系统的介绍 2 SQL的介绍 3 小结 MySQL数据库 1 MySQL数据库的介绍 数据库 1 数据库的
  • python引用、浅拷贝、深拷贝

    在python中 对象的赋值往往是通过 进行的 但是由于 右边的类型方式不一样 所以产生变量虽然值相同 但是在内存中的地址值不同 可能会造成内存空间的浪费 如题所示 对象赋值中存在三种类型情况的赋值 引用赋值 引用赋值l2 l1 首先创建个
  • vue3中的reactive函数声明数组

    vue3中reacitve函数如何声明一个响应式数组 如以下案例
  • 2021最新 阿里云搭建饥荒专用服务器

    前几天我一朋友在steam上邀请我一起玩饥荒 可是联机的时候 总是一卡一卡的 好不容易玩的正尽兴的时候 我朋友突然有事就离开了房间 好不容易打的怪 建的家 房主一退就不能再次玩了只能等待他回来 针对这样个的问题 我决定自己搭建饥荒的专有服务
  • 【matlab】:matlab中如何三维画球?

    首先介绍一个函数ellipsoid 这个函数是在三维立体空间画椭圆用的 这个函数参数如下 ellipsoid x y z x1 y1 z1 x y z代表了椭球的中心 x1 y1 z1代表了x y z方向的分量 然后如果是要画球的话 把这三
  • HTML5+CSS3小实例:简单又好看的加载动画效果

    HTML5 CSS3做一个简单又好看的加载动画效果 一个三色圆环转动 再加圆环内部文字转动 效果虽然简单 但第一次看到还是很惊艳的 最主要一点 代码真的超简单的 效果 源码
  • 曲线拟合

    问题解决 给你一个二维的序列 你如何用多项式进行曲线拟合 一阶直线拟合 二阶抛物线拟合 并非阶次越高越好 看拟合情况而定 曲线拟合 clear clc syms s 声明一个符号变量 详细参考 https jingyan baidu com
  • PicoDet代码学习记录

    推理步骤 picodet s 320 coco yml Infer py main gt run Trainer py init self model create cfg architecture Picodet py from conf

随机推荐

  • Ubuntu20.04 中已经安装 Pytorch 但 Import 报错 - 解决记录

    01 问题描述 笔者使用的是 Ubuntu 20 04 3 LTS 在使用 PyTorch 训练模型的时候 torch 模块引用失败 报错信息是 OSError home wang local lib python3 8 site pack
  • CUDA学习笔记——cudaDeviceSynchronize()的理解

    内核是操作系统提供软件对计算机硬件进行访问的软件 内核启动是异步的 这意味着在内核完成执行之前 他将在启动gpu进程后立即将控制权返回给cpu线程 而cpu线程的下一步是应用程序的退出 在应用程序退出时 其将输出发送到标准输出的功能由操作系
  • 会议论文和期刊论文在写作上有什么区别?有什么侧重点?

    作为一名科研工作者 无论你是初入圈内的 小萌新 还是久经沙场的 老将 写论文都是我们的必经之路 而要想论文投中 就需要我们的积极努力啦 其中 杂志社以及很多大型学术会议的征稿就是很好的一个途径哦 不过这两者的论文要求是否一致呢 又是否匹配我
  • cocos2d之Box2D详解 鼠标关节实现

    cocos2d之Box2D详解 鼠标关节实现 DionysosLai2014 5 7 我们经常要移动物理世界中的某个物体 比方说石头 木块等 如果我们直接改变这些物体的位置 让这些物体跟随我们手指移动 即使这样是可行的 却违反了物理世界的基
  • Ubuntu16.04下安装Android机顶盒(Android4.4.2)NDK交叉编译环境

    Ubuntu16 04下安装Android机顶盒 Android4 4 2 NDK交叉编译环境 文章目录 Ubuntu16 04下安装Android机顶盒 Android4 4 2 NDK交叉编译环境 一 前言 二 ndk下载 三 ndk安
  • 拦截器响应头中配置“Access-Control-Expose-Headers”实现跨域请求暴露token

    问题场景 和前端同事联调接口中 前端同事反映说在跨域请求的情况下无法获取token的值 后来找到解决办法 解决 1 在登录拦截器处理类中的响应对象 把token对象暴露出来即可 2 关键代码 response setHeader Acces
  • Java设计模式之单例模式_Demo

    单例模式 初识 单例模式 Singleton Pattern 是 Java 中最简单的设计模式之一 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只有单个对象被
  • LaTeX学习笔记

    在编辑公式的时候 可能会用到这个命令 begin array lcl end array 其中 lcl 表示左对齐 如果将 lcl 替换为 c 即 begin array c end array 则表示居中对齐 科研文献中常常需要使用eps
  • 文心一言更大的故事是在云计算

    3月16日 百度发布新一代大语言模型 生成式AI产品文心一言 展示了文心一言在文学创作 商业文案创作 数理推算 中文理解 多模态生成五大场景中的综合能力 生成式AI为科技创新带来无限想象 文心一言依托 百度AI大底座 而落地 由百度智能云对
  • ubutu下ros2实现小车仿真建模与目标检测

    1 安装ros2 这里使用小鱼的一键安装 根据自己的喜好安装 博主用的是ros2的foxy版本 wget http fishros com install O fishros fishros 2 下载代码 这里使用的是古月居的代码 http
  • 用Requests和正则表达式爬取豆瓣图书TOP250

    思路和上文大同小异 import requests from requests exceptions import RequestException import re import json headers User Agent Mozi
  • vue props设置默认值的基本方式

    vue官方文档解释 为该 prop 指定一个默认值 如果该 prop 没有被传入 则换做用这个值 对象或数组的默认值必须从一个工厂函数返回 默认值为字符串 props fieldString type String default 默认值为
  • Python如何绘制误差直方图?曲线的阴影图?shade range graph

    问题抽象 Python如何绘制曲线的阴影图 建议的方案 flights sns load dataset flights flights head sns lineplot data flights x year y passengers
  • 基于stm32蓝牙接收信息并显示在OLED上

    两个单片机基于蓝牙连接通信 可以使能串口 把蓝牙当作串口来使用 例如 蓝牙通过串口发送信息 蓝牙通过串口接收信息 这样就可以使两个单片机进行通信 下面代码是基于STM32蓝牙接收另外一块单片机蓝牙发送过来的温湿度信息 并显示在OLED上 主
  • Squid代理的用户认证(基本认证、集成Windows域认证)

    Squid代理的用户认证 基本认证 集成Windows域认证 2012 07 02 TsengYia 126 com 关于Squid代理服务的用户验证 本文简要介绍了两种方法的实现 basic基本认证 ntlm域认证 basic认证采用账户
  • springboot读取resources目录下文件

    文章目录 前言 1 问题过程 2 解决方案 2 1 文件上传 2 2 ClassPathResource 总结 前言 最近的工作中遇到了复杂的excel报表导出业务 采用的是用excel模板来实现该业务 可以规避大量勾画excel格式的代码
  • 静态测试及评审、测试用例

    7 1静态测试的定义 特点 静态测试通常是指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程 其被测对象是各种与软件相关的有必要进行测试的产物 例如各类文档 源代码等 特点 1 不必动态地运行程序 2 可以人工进行 充分发挥人的
  • 8分钟丨教你玩转 API

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由织云平台团队发表于云 社区专栏 背景 当下 业界越来越多公司在项目架构设计时 会采用微服务架构 微服务架构 可以让我们的产品有更好的扩展性 更好的伸缩性 但同时也会带来微服务的
  • Gerber文件的输出

    Step 01 首先打开PCB文件 Step 02 文件 制造输出 Gerber Files Step 03 通用设置 Step 04 层设置 如果有Keep out layter层勾选了 把他去掉 Step 05 钻孔图层设置 勾选钻孔图
  • MIPI-DSI协议解析——DCS命令集

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