• MIPI DSI协议学习【转】


    本文转载自:http://www.voidcn.com/blog/LoongEmbedded/article/p-6109759.html

    1.     MIPI DSI

    DSI:displayserial interface,显示串行接口。一个时钟lane,一个或多个数据lane

    DSI分层结构:

     

    图1

    2.     MIPI DSI协议介绍的数据包格式

    分为短包和长包,短包4个字节,长包6~65541个字节,不管短包还是长包,DI(data identifer数据标识符)都是第1个字节。

    2.1   长包格式

     

    图2

    长包由几部分组成

    (1)  一个32位的包头(PH:packet Header)

    由一个8位的DI、一个16位的字数(WC:word count)和一个8位的ECC。其中DI由数据的VC(virtualchannel)和具体应用的负荷数据DT(data type数据累类型)组成。WC指定datapayload中在包头和包尾之间的字节数,不包括包头也不包含包尾。ECC(错误校验码Error Correction Code)可以校验包头中DI与WC一个位错误的情况和可以发现2位错位的情况。

    在包头的结尾,接收器接着读取data payload block中data payload(WC个字节数的数据)。

    (2)  an application-specific datapayload with a variable number of bytes一个字节数可变的,且与具体应用工相关的数据负

    (3)  一个16位的包尾(packet footer)

    包脚只有一个16位的校验和(checksum)

    接收器读了Data Payload后,会接着读取在包尾中的Checksum。Checksum

    由主处理器(host processor)计算和传输。需要注意的是如果Data Payload为0字节,那么计算出来的Checksum为0xFFFF,如果不计算Checksum,那么包尾由0x0000(2个字节)组成。

    2.2   短包格式

     

    图3

    短包由3部分组成:

    (1)  一个8位的Data ID

    (2)  两个(命令或是数据)字节

    (3)  一个8位的ECC

    没有包尾,短包固定是4个字节长度。

    2.3   共同的包元素

    2.3.1       数据标识符字节(data identifierbyte)

    任何包的第1个字节是DI字节,它由VC和DT组成,如下图:

     

    图4

    (1)  VC对应DI[7:6]

    VC指定虚拟数据通道,最多表示4个。一个处理器最大可为4个外设(这里指显示屏IC)服务,使用VC,可定位到不同的外设。虽然这个MIPI DSI协议允许和多个外设通讯,但此协议只能用于一个主处理器到一个外设的通讯。

    (2)  DT对应DI[5:0]

    指定数据类型,比如0x06,是指DCS READ, no parameters。指定这个包是长包还是短包和包格式,DT结合WC高通接受器这是个多少字节的长包。这是必要的,因为没有具体包开始和结束的同步码来指示包的开始和结束,这允许包传输任意数据,但还是需要包头来显示指定包的长度。

    当接收逻辑倒计时到包尾时,接收器假设下个数据是一个新包的包头或是传输结束。

    (3)  指定数据类型

    2.3.2       ECC(Error Correction code)

    ECC可以校验包头中DI与WC一个位错误的情况和可以发现2位错位的情况,主处理器负责计算和传输一个ECC字节,外设支持正向和方向通讯的ECC。

    (1)  ECC的规则

     

    图5

    第一个24数据位D0~D23包含了完整的DSI包头,所以校验位计算可优化为:

     

    图6

    (2)  发送器的ECC产生

     

    图7

    (3)  接收器的ECC产生

     

    图8

    2.3.3        

    2.4   长包Payload的checksum产生

    长包的包头由一个字节的ECC保护,为了检测长包传输的错误,checksum基于数据包的payload部分来计算,需要注意,一个零字节长度payload的长包,其checksuam为0xFFFF。

    Checksuam只能指示payload一个或多个错误的出现,不像ECC,checksum不能修复错误。所以,checksum计算对单方向的DSI实现没有作用,因为外设没办法报告错误给主处理器。

    主处理器强制产生和发送checksum

    (1)  Checksum的发送

     

    图9

    (2)  Checksum的产生

     

    图10

    (3)  Checksum产生的例子

     

     

    图11

     

     

     

    图12

  • 相关阅读:
    《JavaScript高级程序设计》学习笔记12篇
    JS学习笔记12_优化
    JS学习笔记11_高级技巧
    JS学习笔记10_Ajax
    JS学习笔记9_JSON
    JS学习笔记8_错误处理
    为什么要在列表组件里写 Key ?
    var、let 和 const 的区别以及暂时性死区
    小程序性能优化要点
    Node require() 加载规则
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/6413333.html
Copyright © 2020-2023  润新知