在LcdTools帮助文档中查看MIPI读写指令描述,如下图

  

  

  编写LCM初始化代码就是配置LCM Driver IC寄存器值,一般只需用MipiWrite()指令写参数即可;下面介绍MipiWrite()指令中参数如何填写

  <数据模式> 用于标识MIPI写数据的类型,也称数据标识,简称DI,指令中用“GEN”或“Gen”来表示Generic模式,用“DCS”来表示DCS模式,不用关系包长短,PX01会自动识别;哪些数据模式需用“GEN” “DCS”呢?如下面说明

    GEN模式:数据操作类型为03h 13h 23h 29h模式的均用“GEN”;

    

    

    DCS模式:数据操作类型为05h 15h 39h模式的均用“DCS”。

    

    

  <寄存器> 需配置参数的寄存器地址,通常为1个字节,表示方法用十进制或十六进制数都可以,一般建议用十六进制数表示,表示方法0x加参数,如0xAA;

  <数据...> 寄存器配置值,数据个数范围0~4096,没有数据的时候表示纯命令,如0x11 x029命令就不带数据;表示方法用十进制或十六进制数都可以,一般建议用十六进制数表示;

  例子:

    MipiWrite(Gen,0xB6, 0x33,0xDB,0x80,0x12,0x00); //以Genric模式往寄存器0xb6写入5个参数。

    MipiWrite(DCS,0x29);  //开启显示,display on

  除了MIPI写指令还会用到一些其他指令,比如延时Delay()、屏复位控制SetLcmRst()、电源开关控制SetOutVCI()等等,具体用法可以查询LcdTools帮助文档,上面有详细介绍。

  那拿到别人提供的初始化代码怎么移植到LcdTools平台呢?其实只要遵循一点:初始化代码就是配置Driver IC寄存器参数!可能提供出来的初始化代码写法五花八门,但最终目的是一样的,我们从中提取出需要的数据转成LcdTools指令即可。每家的写法都不一样,有些是按自己的PG平台封包指令编写,有些就是直接用写SSD2828的格式来表示,下面我们举几个例子来说明。

  (1)IC原厂测试治具指令格式1

  

  如上图所示,每行为一条指令,Delay 50为延时时间,通常情况下单位都是ms;其他的都是寄存器值配置,第一个带R开头为寄存器地址,如RB9,即B9H,寄存器B9,十六进制,后面的参数为寄存器配置值;所以上面的指令在LcdTools上编写方式如下图:

  

  (2)IC原厂测试治具指令格式2

  

  LCD_nRESET 赋值表示控制LCM_RST拉高或者拉低,LcdTools有响应指令对应,SetLcmRst();

  Delayms()延时控制,单位mS,LcdTools对应指令Delay();

  LCD_ILI9881C_CMD()表示写命令,即寄存器地址,后面跟随的指令LCD_ILI9881C_INDEX()即为该寄存器写入的数据;

  上面用LcdTools实现方法如下图:

  

  (3)IC原厂测试治具指令格式3

  

  描述方法和(2)基本一致,只是寄存器和参数的指令描述名称有些差异,不难理解,用LcdTools实现如下图:

  

  (4)IC原厂测试指令格式4

  

  这中指令中,从描述中可以看出屏复位用GPIO指令实现,GPIO4为RST信号;MIPI写格式中,第一个参数为数据类型,如0x39为DCS格式,前面已经有给出对应表格。用LcdTools实现上述代码如下图:

  

  (5)IC原厂测试指令格式5

  

  和(1)类似,纯数据描述型,LcdTools实现如下:

  

  (6)IC原厂测试指令格式6

  

  HW_Reset()从字面看出是硬件复位的意思,也就是对屏进行复位,可以用LcdTools默认生成的复位指令实现;write(Command,0x--)就是写命令即IC寄存器地址,write(Parameter,0x--)就是写数据,用LcdTools实现如下:

  

  (6)直接用SSD2828实现指令实现初始化格式

  

  

  这种代码格式是直接写SSD2828寄存器的方式,没有进行数据封装,看起来有点费劲,不过如果了解2828寄存器作用,理解起来也很容易;

  如上面的指令,WriteAddr()表示写2828寄存器地址,WriteData()表示写寄存器参数;0xB7寄存器用于设定MIPI操作模式,对于B7寄存器配置不需要关心,LcdTools会自动实现;0xBC寄存器用于设置MIPI写数据包大小,包括MIPI命令和数据的总个数,这个寄存器有两个字节,低字节在前,高字节在后,最大为4096;0xBF寄存器用于声明开始写MIPI数据,后面跟随写入的数据都会从MIPI发出,所以上面例子中代码用LcdTools实现如下图:

  

  后面的MIPI指令照此编写即可。

  以上介绍了几种常见的初始化代码格式,做抛砖引玉之用,实际应用中需参考Drvier IC资料,了解寄存器功能后对初始化代码编写方式更容易理解,欢迎交流!

  

LcdTools如何编写MIPI指令(初始化代码)的更多相关文章

  1. [转]编写高性能的Lua代码

    昨天晚上闲来无事,看室友在电脑上挂机玩游戏,用的一个辅助脚本,以为是lua写的脚本在跑,实际调查发现是按键精灵的脚本. 于是在网上找相关Lua开发游戏脚本的案例,看到一个人的博客,内容很不错,学到了很 ...

  2. 编写高性能的Lua代码

    编写高性能的Lua代码 Posted on2014/04/18· 10 Comments 前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件, ...

  3. 编写高性能的 Lua 代码

    前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件,手机游戏<大掌门><神曲><迷失之地>等都是用Lua来 ...

  4. 编写高质量 Objective-C 代码

    第一章 熟悉 Objective-C 第一条:了解 Objective-C 起源 Objective-C 是 C 语言动态性扩充.使用"消息结构"而非"函数调用" ...

  5. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  6. 如何编写Angular指令

    [20140917]Angular:如何编写一个指令 *:first-child { margin-top: 0 !important; } body>*:last-child { margin ...

  7. JavaScript手札:《编写高质量JS代码的68个有效方法》(一)(1~5)

    编写高质量JS代码的68个有效方法(一) *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...

  8. 编写高效的Android代码

    编写高效的Android代码 毫无疑问,基于Android平台的设备一定是嵌入式设备.现代的手持设备不仅仅是一部电话那么简单,它还是一个小型的手持电脑,但是,即使是最快的最高端的手持设备也远远比不上一 ...

  9. 编写高质量JavaScript代码的基本要点记录

    原文:深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 1.最小全局变量(Minimizing Globals)的重要性 JavaScript通过函数管理作用域.在 ...

随机推荐

  1. JVM 配置参数 -D,-X,-XX 的区别

    转载请注明出处: 最近在安全护网行动,需要针对服务进行不断的安全加固,如 对服务的 log4j 的安全配置进行防护,对 fastjson 的漏洞进行安全加固等,最快的防护方法就是通过在服务启动的时候, ...

  2. java学习第三天常用类.day11

    工具类如何设计,在开发中有两种设计: 工具方法:静态方法的使用 非静态的方法使用: 使用单列模式,为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 保证在整个应用中某一个类有且只有一个实例(一 ...

  3. eclipse小技巧---快速复制全类名

    选中类名,并鼠标右键选择 Copy qualified name

  4. linux centos7开启防火墙端口

    firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload

  5. [HDU1812] Count the Tetris - polya定理

    题面 Problem Description 话说就是因为这个游戏,Lele已经变成一个名人,每当他一出现在公共场合,就有无数人找他签名,挑战. 为了防止引起社会的骚动,Lele决定还是乖乖呆在家里. ...

  6. APICloud 可视化编程 - 拖拉拽实现专业级源码

    低代码开发平台是无需编码 (0 代码或⽆代码) 或通过少量代码就可以快速生成应用程序的开发平台.它的强⼤之处在于,允许终端⽤户使⽤易于理解的可视化⼯具开发自己的应用程序,而不是传统的编写代码⽅式.当遇 ...

  7. React的生命周期函数

    概述 在React中,生命周期函数指的是组件在某一个时刻会自动执行的函数 constructor 在类或组件创建的时候被自动执行,我们可以说它是生命周期函数,但它并不是React所特有的,所有的Es6 ...

  8. sklearn中MLPClassifier源码解析

    神经网络 .fit() 首先传入类私用方法._fit() 确定hidden_layer_size是可迭代的 调用_validate_hyperparameters验证超参数是否合法 验证输入的x和y是 ...

  9. 【Elasticsearch】ES选主流程分析

    Raft协议 Raft是分布式系统中的一种共识算法,用于在集群中选举Leader管理集群.Raft协议中有以下角色: Leader(领导者):集群中的领导者,负责管理集群. Candidate(候选者 ...

  10. 从 Yum 更新中排除特定/某些包的三种方法

    方法 1:手动或临时用 yum 命令排除包 要排除单个包: # yum update --exclude=kernel 或者 # yum update -x 'kernel' 要排除多个包.以下命令将 ...