您好,欢迎访问三七文档
以下是最近几个月在调试MIPIDSI/CSI的一些经验总结,因为协议有专门的文档,所以这里就记录一些常用知识点:一、D-PHY1、传输模式LP(Low-Power)模式:用于传输控制信号,最高速率10MHzHS(High-Speed)模式:用于高速传输数据,速率范围[80Mbps,1Gbps]perLane传输的最小单元为1个字节,采用小端的方式及LSBfirst,MSBlast。2、LaneStates*LPmode有4种状态:LP00、LP01(0)、LP10(1)、LP11(Dp、Dn)*HSmode有2种状态:HS-0、HS-1HS发送器发送的数据LP接收器看到的都是LP00,3、LaneLevels*LP:0~1.2V*HS:100~300mV,HScommonlevel=200mV,swing=200mv4、操作模式在数据线上有3种可能的操作模式:Escapemode,High-Speed(Burst)modeandControlmode,下面是从停止状态进入相应模式需要的时序:*Escapemode进入时序:LP11→LP10→LP00→LP01→LP00,退出时序:LP10→LP11当进入Escapemode需要发送8-bitentrycommand表明请求的动作,比如要进行低速数据传输则需要发送cmd:0x87,进入超低功耗模式则发送cmd:0x78。在DSI中LP通讯只用DataLane0。*High-Speedmode进入时序:LP11→LP01→LP00→SoT(0001_1101),退出时序:EoT→LP11,时序图如下:*Turnaround进入时序:LP11→LP10→LP00→LP10→LP00,退出时序:LP00→LP10→LP11这是开启BTA的时序,一般用于从slave返回数据如ACK:0x84。5、时序要求在调试DSI或者CSI的时候,HSmode下的几个时序非常重要:T_LPX,T_HS-SETTLE≈T_HS-PREPARE+T_HS-ZERO,T_HS-TRAIL,一般遵循的原则为:Host端的T_HS-SETTLESlave端的T_HS-SETTLE。二、DSI1、线路构成在DSI中需要1根时钟线以及1~4根数据线。2、两种接口的LCD*Commanmode(对应MPU接口)*Videomode(对应RGB接口)该模式下视频数据只能通过HSmode传输。3、数据包类型短包:4bytes,由3部分组成:*DataIdentifier(DI)*1byte:ContainstheVirtualChannel[7:6]andDataType[5:0].*PacketData*2byte:Lengthisfixedattwobytes*ErrorCorrectionCode(ECC)*1byte:allowssingle-biterrorstobecorrectedand2-biterrorstobedetected.长包:6~65541bytes,同样由3部分组成:*PacketHeader(4bytes)-包头DataIdentifier(DI)*1byte:ContainstheVirtualChannel[7:6]andDataType[5:0].WordCount(WC)*2byte:definesthenumberofbytesintheDataPayload.ErrorCorrectionCode(ECC)*1byte:allowssingle-biterrorstobecorrectedand2-biterrorstobedetected.*DataPayload(0~65535bytes)-有效数据Length=WC×bytes*PacketFooter(2bytes):Checksum-包尾Ifthepayloadhaslength0,thentheChecksumcalculationresultsinFFFFhIftheChecksumisn’tcalculated,theChecksumvalueis0000hPDF檔案使用pdfFactoryPro試用版本建立、从控制器到外设发送的包类型如果希望从外设读取数据或者状态,则在处理器发送完读取命令后还需要发送BTA命令,非读取命令在外设接收成功后会返回triggermessage0x84。5、从外设到处理器数据包类型返回的数据一般分为4个类型:*TearingEffect(TE):triggermessage(BAh)*Acknowledge:triggermessage(84h)*AcknowledgeandErrorReport:shortpacket(DataTypeis02h)*ResponsetoReadRequest:shortpacketorlongpacketGenericReadResponse、DCSReadResponse(1byte,2byte,multibyte)读取数据返回值解析示例如下:PDF檔案使用pdfFactoryPro試用版本建立、Video模式的3种数据格式*Non-BurstModewithSyncPulses*Non-BurstModewithSyncEvents*BurstMode*调试记录LCD半边闪屏问题,原厂给的信息:分析了系統板送出的videomodetiming,資訊摘要如下HSCLK:160MHzPerlanebit-rate:320Mbps(UI=3.125ns)HSSoTHS-prepare+HS-zero約155ns由上述的timing懷疑與現象是因為ICHSdatasettletiming搭配不當所導致看来是我们输出的mipi信号HS-prepare+HS-zero比LCD默认设置短引起的。还有随机整屏闪动的问题通过调节VFP和VBP的值调到了理想状态。另外LCD的VCC在使用mos管控制后休眠后会有2.0V的悬浮电压,通过RC电路将电压放掉,将C78换成了10K电阻。LCD电路上有几个比较重要的电压:AVDD、VCC、VGH、VGL、HAVDD、VCOM(由AVDD通过电阻分压得到)*唤醒慢的问题在最初调试的几款LCD里面初始化cmd都比较少,后来在调试一款IPS屏的时候发现唤醒需要3秒左右,这款LCD初始化cmd有100多条,之前在调试一款LCD的时候每条cmd发送之后需要delay10ms再发下一条cmd,所以在这款LCD这里不能有delay,并且经过调试在确保发送成功的情况下将LP的传输速度提高了3倍(这里需要读取每条cmd的返回值0x84确认命令是否发送成功),优化后唤醒时间不到1秒。*LCD参数理解更正才发现之前一直对LCD的几个参数HFP、HBP、VFP、VBP理解有错误,正确的应该是以同步信号(HSYNC、VSYNC)为基准,在同步信号之前的称为Front,在同步信号之后的称为Back,而不是之前理解的以有效像素为基准。*LCD显示呈锯齿状问题这两天(12.11)还调试了一款540x960分辨率的mipiLCD,在开始的时候一直点不亮,和供应商确认了好久无意间才发现是他们给的初始化代码是错的,使用正确的初始化代码就能点亮了,不过显示出来的图像却是呈锯齿状的,即没有对齐。之前在别的平台也遇到过类似问题,也就是分辨率不是16的整数倍,LCDcontroller在取数据的时候会对不齐。边研究Datasheet边和ASIC同事讨论,后来确定了一个方案:即在DSI、LCD寄存器里面设置分辨率为540x960以让LCD正确识别信号,但framebuffer需要设置为544x960以对齐,并且设置Sourcepitch寄存器为544,这样显示就正常了,相当于framebuffer里每一行的最后4个pixel会被LCDcontroller丢掉。今天(12.12)在和ASIC同事的讨论下更正了之前的理解:LCDcontroller在计算取数据的时候,地址是根据(x,y)坐标来算的,差不多是address=y*pitch+x+base,pitch就是一行pixel在内存里的大小,这个至少是要对齐到8byte,因为bus宽度是8byte,如Datasheet中的描述”SourcepitchforRGBchannel,QWORDalignediflinearmode“。之前计算pitch值的公式为:xres/8*bits_per_pixel/8,如果xres=540,bits_per_pixel=32,计算的结果因为取整的原因为0x10c,实际上正确的值应该是0x10e,所以需要将公式改为:xres*(bits_per_pixel/8)/8,即在每个像素占4byte的情况下只要xres为偶数就可以满足对齐的要求,而不用改为544。PDF檔案使用pdfFactoryPro試用版本建立
本文标题:MIPI-调试经验
链接地址:https://www.777doc.com/doc-5995815 .html