芯方式

如何避免切屏(tearing free)与相关注意事项

0
阅读(1553)

[DESCRIPTION]
出现切屏问题还是要从根本原理上去查找原因,出现tearing的原因无非就是BB刷写LCM gram和LCM IC 读取GRAM相交。
以下提供兩個避免切屏的注意事項以及解決方式
[SOLUTION]
1. 当前已经测试出来信号CS,TE符合理论要求,这样不会相交才对。其实,我们忽略了一个大前提, LCM IC 读取 gram
的方向一致必须和BB刷写GRAM的方向一致,如果不一致,虽然符合时序要求,但是必然会相交。舉例來說: 當BB傳輸是
由左=>右, 上=>下. LCM IC則是由右=>左, 下=>上. 等於說BB與LCM IC存取GRAM的方向剛好相差180度.這時候就算
tearing free機制啟動, 仍然會發生切屏.
解法来自半导体社区: 因为我们BB刷写GRAM的方向是固定的,所以只能修改LCM IC 读取GRAM的方向來匹配BB的傳輸方向。但是
这个时候图像肯定有旋转。这样就需要调整LCM IC刷写数据到 pannel上的方向来纠正。
注意: 有些LCM IC並無法修改刷寫數據到panel上的方向, 這時候只能透過旋轉LCD buffer數據的方式來解決:
a. 如果是屏反裝(相差180度), 請參考FAQ04491 - 如何support反裝180度的LCM
b. 如果是直屏橫用(相差90或270度), 請參考FAQ02863 - Landscape UI on Portait LCM (/)
2. 請檢查以下標示橘色部分代碼是否存在:
檔案Lcd_tear_manager.c (mcu\hal\display\lcd_tear_manager\src)
函數lcdTear_GetCapabilityAndPara裡
=======================================================================
if (LCM_IOCTRL_NOT_SUPPORT == ifFuncTable->IOCTRL(LCM_IOCTRL_QUERY__BACK_PORCH,
&temp))
{
temp = 0;
}
pCtrlBlk->lcmBackPorch = temp;
if (LCM_IOCTRL_NOT_SUPPORT == ifFuncTable->IOCTRL(LCM_IOCTRL_QUERY__FRONT_PORCH,
&temp))
{
temp = 0;
}
pCtrlBlk->lcmFrontPorch = temp;
========================================================================
pCtrlBlk->lcdPixelTransitionTime = TransferCntPerPixel * pCtrlBlk-
>lcdIfSetting.if_settings.dbi_parallel_if.if_total_write_cycles * ClkWidth; //ns
pCtrlBlk->lcmScanTimePerLine = (1000000000/(pCtrlBlk->lcmFrameRate * (pCtrlBlk-
>lcmHeight + pCtrlBlk->lcmBackPorch + pCtrlBlk->lcmFrontPorch))); //ns
========================================================================
檔案LCM driver(combo_lcm_XXXX.c or Lcd.c (mcu\custom\drv\lcd\XXXX))
函數LCD_IOCTRL_XXXX裡
========================================================================
case LCM_IOCTRL_QUERY__BACK_PORCH:
{
*(kal_uint32*) (Parameters) = 2; // for example
return LCM_IOCTRL_OK;
}
case LCM_IOCTRL_QUERY__FRONT_PORCH:
{
*(kal_uint32*) (Parameters) = 6; // for example
return LCM_IOCTRL_OK;
}
========================================================================
請注意LCM driver裡的Front porch設定值必須是正確的(與data sheet一致)
此段代碼會影響tearing free機制計算的正確性, 請確認上述代碼有存在或是加入
rebuild drv_display與custom即可生效