Android 关于display的几个问题

本文探讨了Android系统中显示层如何使用双缓冲进行数据传输,以及底层如何处理这两个缓冲区。内容包括:帧缓冲的构成、DPI buffer和Assert Layer buffer的计算,以及DBI接口屏的数据刷新过程。TE信号的作用在于解决切屏问题,确保BB写数据速率与LCD刷新速率同步。此外,还讨论了Android中LCM刷新异常的处理思路,以及如何通过DDMS截图和adb命令获取当前显示内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在framebuffer驱动中会申请双buffer,上层是如何使用这两个buffer,底层又是怎么处理两个buffer的?

上层传数据到framebuffer时,会先放到其中一个buffer中,等再有数据传输下来时会切换到另外一个buffer,将其放满。相当于fb的基地址,加上一个偏移量在两个buffer之间切换。底层通过将要显示的buffer的地址写入到DMA中,DMA就会自动将一个buffer的数据搬运到屏的RAM中。



计算lcm的buffer?

buffer有三部分

a)Framebuffer:width*height*(32/8)*2

b)DPI buffer:
size=dsiTmpBufBpp×buffer_num×width×height
其中dsiTmpBufBpp=2(RGB565) or 3(RGB666/888)
buffer_num = params->dsi.internediat_buffer_num (defulat=2)
width = params->width
height = params->height

c)Assert Layer buffer:width*height*(16/8)+4096



针对DBI接口的屏,framebuffer 如何刷数据到LCD上? TE 信号的作用是什么?如何往LCD 写一帧黑屏?

上层将显示数据填充到framebuffer 中,调用mtkfb_ioctl:MTKFB_TRIG_OVERLAY_OUT,然后调用mtkfb_update_screen,然后mtkfb_update_screen_impl,然后DISP_UpdateScreen,在DISP_UpdateScreen中主要调用lcm_drv->update和disp_drv->update_screen(); LCD控制器会将FBbuffer 数据搬运到 LCD的gram中,LCD IC 再从gram 刷新到Lcd panel上。









•针对DBI接口,TE 信号的作用是什么?

    TE信号是为了解决切屏问题引入的,硬件管脚为FMARK。产生切屏的原因是BB写图像数据的速率和LCD刷屏的速率不一致引起。

  当开启TE时,FMARK 发一个信号到BB端,这时BB端才刷一帧图像,这样两边达到同步,解决切屏问题。

•针对DBI接口,如何往LCD 写一帧黑屏?

    先调用LCD_UPDATE设置所要刷新的窗口大小。再向LCD写一帧数据为全0的图像。

  lcd_set_window(left,top,right,bottom);

  For(I = 0 ;I <width * height ;I ++){

  senddata(0x0);

  }





android中LCM刷新异常(花屏,白屏)处理思路












阐述DBI 接口LCM 切屏(tearing)产生原因,及消除tearing的机制,对于没有接FMARK的屏如何尽可能减少tearing ?

切屏又叫Tearing,即“断层”“分屏”“撕裂”现象
Tearing产生的原因:BB通过LCD IF将数据刷到DRIVER IC的GRAM的时间T0与DIRVER IC将GRAM数据刷到LCD的玻璃上的的时间T1不同步,导致Baseband没写完一帧Driver IC就更新了。
针对有FMARK的屏,硬件将FMARK脚接到BB LCDC TE脚,软件上开启TE功能。原理是,LCM GRAM中的显示信息被刷新到LCD PANEL后,LCD Driver IC会发出一个同步sync信号告诉BB可以更新 Frame Buffer内容到LCM Gram了。保证了上述T0 、T1时间上不会重叠
针对没有FMARK的屏,只能尽量调整LCD IF送数据的时序及LCD Driver IC刷新频率,使T0、T1达到同步








获得当前显示内容的方法

DDMS 截图方法如下,
Device - -> Screen capture
点击Screen capture,就能抓到当前刷到LCM 屏上的那帧数据

方法二:

adb shell
cat /dev/graphics/fb0 > /data/fbxx.bin
然后将fbxx.bin adb push出来,通过工具查看fbxx.bin







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值