作者:Hello,Panda
大家上午好 ,因为最近一年太忙了,公众号几乎没有更新文章,在此深表歉意。前一阵子调试了用Xilinx FPGA驱动MIPI LCD的屏,个中过程一言难尽,分享之,看到的朋友可以避免踩坑。
我的这个屏是竖屏,分辨率是1080*1920,Burst传输模式,Sync和数据之间填充BL包,屏初始化通过LP通信完成,驱动SoC是Xilinx ZU9EG,MIPI由BANK66引出,同一个BANK有MIPI CSI Sensor的输入和MIPI DSI驱动屏。Vivado才是2023.2.2版本, 点屏的过程经历了三个阶段:
第一阶段:采用Xilinx官方的MIPI DSI TX Subsystem IP核
酷酷一通折腾,就是点不亮,后经仔细阅读数据手册发现,这个IP不支持LP模式通信,它所谓的DCS模式是通过HS短包发送的,好吧,怪我没仔细阅读手册,但是,几乎所有的MIPI DSI的LCD屏都是需要经LANE-0的LP模式接收初始化命令的,显然,这个IP不具备工程价值。立马换方案。
第二阶段:采用Xilinx的DPHY物理层IP
我这个人本质是懒的,官方有IP可以用,必须要用上。酷酷一顿折腾,把DSI和控制逻辑实现了,然后调用D-PHY物理层IP,一上电还真好用,不错。然而,问题来了,当把所有的工程合在一起以后,它不亮了。一通排查以后发现,是因为D-PHY IP的init_done信号没拉高,检查IP核输出的跑pll_locked,reset等信号,均正常啊,想进一步往核心排查,结果IP核代码加密,看不了,这个途径也给断了。尝试着把资源屏蔽,当把MIPI CSI接收模块跑屏蔽以后它又可以正常拉高了,娘希匹的当同一个bank同时存在mipi d-phy ip用作csi和dsi时,和dsi对接的D-PHY物理层ip的init_done就拉不高,咱也不知道这里面公用了啥资源,为啥就冲突了。没办法,只能寻求手撸途径。
第三阶段:手撸代码
没有办法,被逼到绝路了,只能手撸。又是一顿折腾,鸡飞狗跳好几天,手撸了物理层、dsi层和控制逻辑,底层直接用源语搭建,然后就好了,所有的场景都能适用了!简单的点屏效果见本文配图。
在调试过程中还发现Vivado的若干其他bug。
总结心情:MMP,还是得自己动手,这个官方的IP靠不住啊,靠不住!