MDDI接口简单了解
一:背景
高通MDP下面可以接三种屏的接口:LCDC,MDDI,EBI2.之前所接触的都是LCDC接口的,MDDI没有做过,也没有分析过。公司MDDI接口的屏也有,看了看MDDI接口的pin脚比LCDC少多了,很可能以后会经常用。在网上找了些资料,看了一下还是有点感觉。
二:资料
MDDI__Protocol_Introduction.pdf
MDDI_Introduce(ILItek).pdf
80-VM299-2 MSM7227-MSM7227-1 MOBILE STATION MODEM SOFTWARE INTERFACE.pdf
屏的spec
例子code.(这里最好看bootloader下面的代码比较精干)
有了这些东西那就自己看了。
三:
MDDI高通自己搞的一套屏的接口,既然是他搞出来的,那么它的操作方法他也在他所给的文档里说了。上面的MDDI__Protocol_Introduction.pdf看其名字就知道看了这个文档你肯定就知道了MDDI是如何工作的。再结合已有的例子代码,其具体的实现也就出现在眼前了。这里我自己也简单的总结一下:
看看上面的连线,其实最主要的就是MDDI Data+/-;MDDI Strobe+/-;TE。 所有的数据都是通过这个两对差分数据线来传输。
对于一块屏来说主要对其做两方面数据传输:
1.初始化序列。对屏进行一些设置,像其它LCDC的屏一般是通过SPI接口,而这里的MDDI接口里,则是由MDDI 主控制器来发。
在文档MDDI__Protocol_Introduction.pdf中描述的有一个packet,叫register access packet.在代码中用一个结构体来描述就是:
struct __attribute__((packed)) mddi_register_access
{
unsigned short length;
unsigned short type;
unsigned short client_id;
unsigned short rw_info; /* flag below | count of reg_data */
#define MDDI_WRITE (0 << 14)
#define MDDI_READ (2 << 14)
#define MDDI_READ_RESP (3 << 14)
unsigned reg_addr;
unsigned short crc; /* 16 bit crc of the above */
unsigned reg_data; /* "list" of 3byte data values */
};
它这个意思就是把你想要设置的寄储器的信息埴在这个结构体里面,然后再把这个结构体又填到另外一个结构体
struct __attribute__((packed)) mddi_llentry {
unsigned short flags;
unsigned short header_count;
unsigned short data_count;
void *data;
mddi_llentry *next;
unsigned short reserved;
union {
mddi_video_stream v;
mddi_register_access r;
unsigned _[12];
} u;
};
把后面这个结构体的地址填到MDDI HOST的MDDI_PRI_PTR_REG寄储器里面,MDDI HOST就开始向屏发送你要设置的数据了。
2.图像数据的传输。
图像数据的传输和上面寄储器的传输是一样的,它又是另外一个结构体
struct __attribute__((packed)) mddi_video_stream
{
unsigned short length; /* length in bytes excluding this field */
unsigned short type; /* MDDI_TYPE_VIDEO_STREAM */
unsigned short client_id; /* set to zero */
unsigned short format;
unsigned short pixattr;
unsigned short left;
unsigned short top;
unsigned short right;
unsigned short bottom;
unsigned short start_x;
unsigned short start_y;
unsigned short pixels;
unsigned short crc;
unsigned short reserved;
};
差不多就这样,更具体还得看代码,目前还没有具体的项目用到这个MDDI的接口,先简单的了解一下,等到有MDDI接口的屏要调的时候,再作详细了解。