位置: 编程技术 - 正文

Android系统下基于DSI命令模式的LCM移植与调试(android基于什么操作系统)

编辑:rootadmin

推荐整理分享Android系统下基于DSI命令模式的LCM移植与调试(android基于什么操作系统),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:安卓底层系统,安卓系统基础,安卓底层系统,android系统基于什么内核,安卓系统基础,安卓系统基础,安卓系统基础,安卓系统基于,内容如对您有帮助,希望把文章链接给更多的朋友!

摘要:介绍了为满足智能手机快速发展产生的LCM的MIPI-DSI协议的优点,描述了DSI协议的操作方式,分析了DSI协议定义中的数据包&#;式及其传输方式。设计了硬件电路,详细阐述了Android下LCM驱动程序结构的介绍及具体的参数配置,分析了调试过程中产生问题的原理及解决的思路。

关键词:DSI协议;Android;LCM驱动设计;TE;

中图分类号:TP 文献标识码:A

LCM driverdesign of DSI command mode in Android

Abstract:The advantage of MIPI-DSI is introduced, which is design for the rapiddevelopment of smart phone. The working mode of DSI protocol is described, and theformat and transmission of date packet is analysised. After designing the hardware,the program structure and configuration of LCMare elaborated. The problems met when tuning LCM are analysised and thesolution are given.

Key words: DSIprotocol ; android ; design of LCM driver ;TE;

0 引言

随着智能手机的高速发展,手机内部含有越来越多不同接口的设备,同时又要满足低功耗、高分辨率以及小体积的显示模块的发展,本文探讨新型显示接口技术MIPI-DSI命令模式的LCM驱动设计与调试。一方面,DSI兼容DBI(显示总线接口)、DPI(显示像素接口)、和DCS(显示命令集)。另一方面DSI让手机设备的接口在降低成本、复杂度、功耗以及EMI的同时,也能够增加带宽,从而极大的提高了手机性能。

本文在联发科的MT平台进行LCM(LCD module)驱动的设计,在联发科技提供的Android4.1和内核Linux 3.下进行开发。MTK是一款制程的双核基带芯片,单核的主频可达1.2Ghz,内核Cortex-A7基于ARMv7架构,同时内部有Mali-图形处理器。同时,MT最高支持分辨率P级的屏幕。LCM是台湾奇景光电股份有限公司的3.5寸液晶屏的TFT LCD模组HXd。

1 DSI协议

1.1DSI的连接

DSI协议属于接口通信协议,它是位于显示模组和处理器之间的一种可扩展通道的高速串行接口,其支持一条时钟通道和1-4条数据通道,图1是DSI的物理连接图。DSI根据其兼容的外设的不同架构,具有视频模式(video mode)和命令模式(command mode)这两种操作模式。

图1 物理模式连接图

命令模式要求LCM有显示缓存,主机通过命令间接控制外设。LCM芯片有一个FMARK脚,用来与主控同步,当主机端接收到LCD发出的TE信号,才会开始往FrameBuffer写数据;当LCD接收到来自主控的刷新命令,LCD才开始从显示缓存中读数据。视频模式是指在主机和外设之间用实时像素流的方式传输,并且只能工作在高速传输模式,不需要有显示缓存。本文采用命令模式进行操作。图2命令模式的示意图。

1.2DSI协议数据的结构

DSI协议下数据包的传输如图3示,该协议规定了短数据包和长数据包这两种数据包。图中LPS(low powerstate)表示低功耗模式,SOT为传输开始,SP为短数据包,EOT为传输结束,LP为长数据包,数据包的前后配置了数据低功耗还是高速、长包还是短包的标志位。

____________________

作者简介:庞伟(—),男,江苏连云港人,硕士,研究方向为伺服控制系统;陈机林(—),男,江苏镇江人,硕士,副研究员,研究方向为伺服系统的建模与控制(电液伺服系统与交、直流电气伺服系统)、控制系统的检测与监控和集成化、网络化系统控制与检测。E-mail:@qq.com

图2 命令模式的示意图

图3 MIPI-DSI协议下数据包的传输

图4 DSI短数据包结构

图5 DSI长数据包结构

如图4是只包含4字节数据包头的短数据包结构。分别包含ID(数据标识符),有效数据和ECC(错误检查和纠正)。短数据包可以操作寄存器、传送命令。图5是6-lB 大小的长数据包结构,首先其拥有4B的数据包头:ID、WC(传输数据的大小)和ECC;然后是有效数据和数据包页脚。长数据包可以传输控制命令及大量数据,结合不同的参数和命令可以配置不同长短的长数据包。

1.3DSI协议数据包的传输方式

DSI协议数据包的传输以同步方式在主机和LCD端进行数据传输,其传输模式有LP(Low Power)和HS(High Speed)这两种。其中LP采用数据速率小于Mbps的单端信号进行传输,HS模式下采用数据速率M~1Gbps的低压差分信号。MIPI总线有大量数据传输时使用HS传输,其他时候使用LP传输,两者结合能够让手机降低功耗的同时降低EMI。本文程序就是设计两者结合,在dsi_drv.c的DSI_TXRX_Control函数的定义中,设置tmp_reg.HSTX_CKLP_EN = 1,从而让在LCM每一帧画面之间工作在LP模式。

2硬件电路设计

MT可支持3条数据通道的DSI接口,本设计使用一条通道。硬件原理图如图6所示,有时钟差分信号DSI_CLK&#;和DSI_CLK-,双向数据通道DSI_D0&#;和DSI-D0-。FMARK引脚用来发送TE信号给主机,通知主机往frame buffer写数据。IC_ID引脚用来读取LCM的硬件ID,从而在兼容多个LCM时候根据ID选择正确的驱动程序。

3 LCM驱动的设计

LCM驱动要完成lk和kernel这两部分的设计。而在turkey版本的Android系统中,lk阶段的的LCM驱动程序是到kernel中程序的链接,这样只需要设置kernel中的LCM驱动就可以。系统中需要设置的LCM驱动有关的文件目录如下:

3.1配置文件

mediatekconfigyProjectConfig.mk是配置文件,主要配置如下:

/*分别选择lk、kernel阶段的LCM驱动*/

CUSTOM_LK_LCM= hxd_hvga_dsi_cmd

CUSTOM_KERNEL_LCM= hxd_hvga_dsi_cmd

BOOT_LOGO=hvga 选择需要使用的logo

其中,hxd_hvga_dsi_cmd是添加的驱动所在文件夹的文件名。若想兼容两个不同的LCM,则在上述驱动名称后面加一个空&#;,再添加另一个文件名,系统即可根据读取的LCM的ID自动选择对应的驱动程序。

3.2LCM驱动的声明

mediatekcustomcommonkernellcmmtxx_lcm_list.c用于在lcm_driver_list结构体指针数组中声明hxd_hvga_dsi_cmd_lcm_drv结构体指针。Lcm_driver_list用于将LCM封装的信息传递给DSI控制器层的驱动。

3.3LCM驱动程序的设计

mediatekcustomcommonkernellcmhxd_hvga_dsi_cmdhxd_hvga_dsi_cmd.c

此为LCM的驱动程序,因为不同的LCM有不同的的分辨率、初始化序列、时序等,因此为了使程序有更好的可移植性和可读性,把这些部分分立出来。对于接口相同的LCM,就可以根据不同的型号进行不同

的参数配置,这也是驱动程序分层思想的优点。LCM

图6 硬件电路

的配置主要是使用封装好的三个结构体。按照设置顺序,首先,LCM的初始化序列中的命令参数和初始化参数的配置是利用结构体LCM_setting_table进行封装,然后lcm_init()函数通过DSI的写函dsi_set_cmdq

_V3将参数写入LCM;其次,LCM_PARAMS结构体对DSI控制器的初始化参数进行封装,需要注意的是命令模式下不需要设置VSPW、VBPD、VFPD及HSPW、HBPD、HFPD;最后LCM_DRIVER结构体对LCM的底层调用接口函数指针和名称进行封装,DSI控制器层的驱动会调用这些函数对LCM和DSI控制器进行初始化。其主要部分程序如下设置:

struct LCM_setting_table {

unsigned char cmd; //将要下的命令

unsigned char count;//命令的参数个数

unsigned char para_list[];//参数列表

};

static struct LCM_setting_tablelcm_initialization_setting[] = {

{

/*设置LCM刷新频率HZ*/

Android系统下基于DSI命令模式的LCM移植与调试(android基于什么操作系统)

{0xB0,2,{0x,0x}},

};

static void lcm_init(void)

{

dsi_set_cmdq_V3(lcm_initialization_setting,sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1);

}

Typedef struct

{

LCM_TYPE type;

Unsigned int width; //LCM的宽

Unsigned int height; //LCM的高

/*初始化DSI控制器参数的结构体*/

LCM_DSI_PARAMS dsi;

} LCM_PARAMS;

static void lcm_get_params(LCM_PARAMS*params)

{

/*设置LCM工作在DSI模式*/

params->type= LCM_TYPE_DSI; params->width = ;

params->height = ;

/*设置dbi (dsi兼容dbi)在TE工作模式*/

params->dbi.te_mode =

LCM_DBI_TE_MODE_VSYNC_ONLY;

/*设置LCM工作在命令模式*/

params->dsi.mode = CMD_MODE;

/*设置LCM使用一条数据通道传输*/

params->dsi.LANE_NUM = LCM_ONE_LANE;

/*配置DSI的传输频率*/

params->dsi.PLL_CLOCK = ;

}

LCM_DRIVER hxd_hvga_dsi_cmd_lcm_drv =

{

/*驱动的名称*/

.name= "hxd_hvga_dsi_cmd",

/*初始化DSI控制器的参数配置*/

.get_params = lcm_get_params,

.init = lcm_init, //LCM的初始化

/*用于多个LCM兼容时候读取硬件ID*/

.compare_id = lcm_compare_id, };

4 LCM驱动的调试

(1)命令模式会有画面刷新有残留(tearing effect,即TE)的问题。根本原因是主控往FrameBuffer写图像数据的速度与LCM从FrameBuffer读数据(刷屏)的速度不一致造成的,解决此问题必须设置主机端在两个TE周期内刷新完一帧数据。首先,配置LCD的刷新频率略小于主机端往FrameBuffer发送数据频率的2倍,其次通过设置FMARK迟滞几个HSYNC周期再输出TE信号来延迟主控开始写数据到FrameBuffer的时间。通过以上配置,避免FrameBuffer的读写数据产生交叉,从而避免由于刷新频率不一致产生的TearingEffect。本例中在拍照模式时候就会有TE问题,在确认开启TE SYNC功能之后,抓取图7所示的TE信号波形图,检测到TE信号正常送出。由于拍照时候数据传输的特殊性,此时camera相当于是主机端,刷新数据的流程相当于camera—FrameBuffer—LCM。而是camera刷新频率是,LCM刷新频率设置的是,图7是TE信号波形图,可以看出LCM刷新频率过大,在程序中设置LCM刷新频率为Hz,最终解决了问题。

图7 TE信号波形图

(2)在lk阶段读不到LCM的硬件ID的问题。从硬件角度读不到ID有两种可能。一个是BTA function没有成功,导致IC没有送出ID,通过图8可以看到BTA已经完成,总线控制权成功交给了IC;另一个是IC没有正确送出ID,导致读ID失败,图9 可以看到BTA后,IC有将ID=0x正确送出。

图8 BTA function OK

图9 IC送出ID

通过上述排查,可以确认是软件由软件产生的问题,分析程序的日志如下:

DISP/DSI&#;c : 0x,//准备好读数据

/*1c表示 PacketType ,表示数据包长度,短数据包的&#;c*/

DISP/DSI&#; : 0x0cc,

/*读取的长数据包的&#;0x*/

DISP/DSI&#; : 0x3efd,

/*等待软件接收到读到的数据的信号*/

DISP/DSI&#; : 0x,

/*0xD0寄存器已经发出去读到的数据*/

DISP/DSI_CMD&#;(0xc): 0xd,

分析日志可以发现:从寄存器看,CMDQ里面已经读到了数据,但是软件没有收到数据。最终可以知道,lk读不到id问题在于软件延时处理慢,通过增大polling次数解决。在mediatekplatformmtlkdsi_drv.c文件中修改函数DSI_dcs_read_lcm_reg_v2的定义,设置read_timeout_ms= ; 把polling的次数由改为,从而保证读到正确数据,最终解决了问题。

5 结语

本文描述了Android系统下的基于MIPI-DSI协议的LCM的驱动设计,完成了MT平台上的LCM驱动的设计,并且让屏幕能够正常的流畅显示画面。通过以上设计过程的分析,一方面可以明显感觉到Android系统下驱动开发的清晰层次结构与简便的程序设计,Android的短周期的开发速度更是不断推进智能手机的迅速发展(不通),另一方面也能感觉到DSI协议的极大优越性,并且相信以后DSI协议也会有进一步的发展。

如何实现设计师眼里的虚线 在android中如何实现虚线的绘制如果设计师画出的效果图中有直线你会怎么办:很简单,一个view搞定,但是如果是虚线呢:1.直接一张图片;2.自定义view

TCP/IP协议+SOCKET实现的群聊android应用 最近TCP/IP课的老师要求做一个大作业,使用TCP/IP协议实现一个命令行的群聊私聊应用,当时问过,说是可以使用mfc写个界面也能交的,于是我天真的以

Android 系统上抓取数据包方法 最近在做一个项目,有关功能是实现两台手机设备的数据交流。项目中需要分析两台手机互发的数据包,所以要抓取手机的报文进行分析。我尝试了很

标签: android基于什么操作系统

本文链接地址:https://www.jiuchutong.com/biancheng/379676.html 转载请保留说明!

上一篇:android 网络框架 volley(android网络框架okhttp)

下一篇:如何实现设计师眼里的虚线(如何做好设计师)

  • 物流辅助服务税率
  • 息税前利润计算每股收益
  • 运费收入算销售收入吗
  • 计提城市维护建设费和教育费附加的会计分录
  • 增值税和个人所得税都要交吗
  • 二级分支机构不具有主体生产经营职能
  • 月底计提分录
  • 新增社保工资填多少好
  • 固定资产与累计折旧有对应关系吗
  • 发票多开了一张怎么处理?
  • 盘盈固定资产属于企业的会计差错
  • 个税生产经营申报流程
  • 加油站的成品油许可证变更过后有什么风险
  • 国税实名认证一般是公司里谁去认证的
  • 申报专项资金项目是什么
  • 上个月申报错了怎么办
  • 债权债务转让税务问题
  • 承租人转租需要交税吗
  • 小规模纳税人简易计税方法
  • 地税印花税怎么算
  • 废旧物资销售如何征税
  • 汇算清缴的费用合计是什么
  • 外贸出口支付方式
  • 怎么取消电脑开机自动启动软件
  • win7为什么还有人用
  • 建筑业预缴企业所得税税率
  • 安卓车机系统开发
  • 支付本月物业费怎么做账
  • dgservice.exe是什么软件
  • fsacder2e是什么文件夹
  • php log函数
  • 代理业务怎么记账
  • vue3 ts知乎专栏
  • 支付航天信息服务费怎么入账
  • 弃置费用预计负债递延所得税怎么处理
  • 建筑会计和会计的区别
  • 留抵税额是认证过的发票吗
  • 大学生创新创业大赛官网
  • Joe是一款优雅功能强大的Typecho主题功能多上手快
  • 保险佣金个人所得税怎么申报
  • css代码基础
  • 长期股权投资处置损失计入什么科目
  • 综合所得算税公式
  • 履约保证金打到个人账户合法吗
  • 发放职工薪酬计入什么科目
  • 子公司自购买日开始持续计算的可辨认净资产的公允价值
  • 收到三代手续费的增值税报表填列在哪里
  • 免租期租金可以追回吗
  • 未发货未收款先开具发票怎么账务处理
  • 房地产开发土地使用税如何计算
  • 为别人开发票先收的税金怎么入帐?
  • 支付广告费是什么活动
  • 招待费汇算清缴一定要调整的吗
  • 哪些资产减值可以转回哪些不可转回
  • 商业企业流程图
  • mysql触发器使用
  • 加快Vista中多线程下载速度
  • steam游戏支持的手柄
  • centos彻底删除文件命令
  • windowsxp如何重装ie浏览器重装
  • unix操作指令
  • win8怎么提高网速
  • win7系统关闭开机启动项设置
  • win8系统无线网络图标不见了
  • 2021年win10累积更新
  • win7 用户组
  • window10h2
  • Win10预览版桌面图标和任务栏不翼而飞怎么办?
  • ubuntu安装指南
  • win10系统开机蓝屏,重启就好
  • ubuntu20安装unity桌面
  • opengl光照设置
  • css网页布局在线生成
  • Node.js中的construct
  • linux sleep 2
  • 耳机插头怎么拔
  • 手机端apk反编译工具_android反编译工具
  • javascript parseInt 函数分析(转)
  • 收集和整理的区别
  • 上海市税务局的电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设