瑞芯微 RK3399 VR Android參數配置和調試說明

  RK3399的CPU採用big.LITTLE大小核架構,雙Cortex-A72大核+四Cortex-A53小核結構,對整數、浮點、內存等作了大幅優化,在整體性能、功耗及核心面積三個方面都具革命性提升。 RK3399的GPU採用四核ARM新一代高端圖像處理器Mali-T860,集成更多帶寬壓縮技術:如智能迭加、ASTC、本地像素存儲等,還支持更多的圖形和計算接口,總體性能比上一代提升45%。

    盈鵬飛科技最新研發的RK3399安卓主板,搭載了最新android7.1 系統,4G DDR3內存,32G EMMC 存諸等...RK3399開發板主板尺寸爲:146*102mm,設計有非常豐富的接口,板載5路UART,支持USB3.0高性能設備接口, WIFI/BT二合一,HDMI OUT 、HDMI INT、Type C、4G、IR、以太網等;可擴展模塊包括4G模塊、Camera(1300萬、500萬)等應用類功能模塊。

     RK3399開發板爲消費類電子、智能終端、MID、無線通訊、醫療設備、工業控制等行業產品的應用開發而設計,超強的視頻處理能力,超高清視頻輸出優勢,口豐富、性能穩定。支持Android\Linux\Ubuntu系統,軟件支持完善,開放源代碼適合企業二次開發帶高清顯示的商顯廣告機、自助售貨機、教育終端等,可降低研發門檻,縮短產品研發週期。

 RK3399 VR Android參數配置和調試說明

1 宏配置

2 系統屬性說明

以下提到的屏幕或顯示默認都是指主顯示,涉及次顯的會具體指出。區分主顯和副顯(次

顯)的方法是查看 kernel dts 配置中 vopb_rk_fb 和 vopl_rk_fb 節點的 rockchip,prop 值 爲 PRMRY 還是 EXTEND,PRMRY 表示主顯,EXTEND 表示次顯。對於 VR 來說,目前內核以下三 個參考 dts:

  • 分體 VR 頭盔 arch/arm64/boot/dts/rockchip/rk3399-disvr-android.dts arch/arm64/boot/dts/rockchip/rk3399-box-rev1-disvr.dts
  • 一體 VR 頭盔 arch/arm64/boot/dts/rockchip/rk3399-vr-android.dts

上述 dts 默認配置都是 vopb(vop big/lcdc0)爲主顯,vopl(vop little/lcdc1)爲次顯, 所以這邊我們默認定義主顯對應 Vop Big(LCDC0 或者 VopB),次顯或者副顯對應的是 Vop little(LCDC1 或者 VopL)。

爲了確保 VR 的顯示效果,我們要求頭盔接的是主顯(LCDC0/VopB),具體的配置方法 請參考《RK3399_VR 分體機_軟件開發指南.pdf》。當頭盔顯示效果如下圖所示,說明頭盔 顯示效果已經正確,可以忽略下述第一節。

對於分體機,這裏還需要單獨說明下,分體機分爲主板(rk3399 硬件板)+ 頭盔板,目前 我們默認的產品形態爲,主板不帶 lcd 屏,通過 typec 線或者 hdmi 線連接頭盔板,所以我 們有上述主顯和次顯的默認定義,如果需要主板上帶屏,則需要另外配置,我們系統默認不 支持這種形態。

  1. 主屏方向
    • ro.sf.hwrotation 屬性

0,90,180,270 初始化主屏旋轉角度,與 persist.display.portrait 配合使用,因

爲硬件上屏幕正裝反裝的情況都會存在,所以有的時候需要把這個屬性設置爲 180。如果在集成的時候發現屏幕方向不對,可以調節這個屬性來控制。

    • persist.display.portrait 屬性

true 表示主屏是按照豎屏顯示,false 表示橫屏橫屏顯示;如下左圖爲屬性 false

的情況,右圖屬性爲 true 的情況。當使用 ro.sf.hwrotation 屬性設置

0,90,180,360 都無法調整到正確的效果的時候,就需要切換 persist.display.portrait 屬性來配合調整。

  1. 次屏方向
    • ro.orientation.einit 屬性

0,90,180,270 初始化次屏(或者叫次顯,如 HDMI,DP 等擴展顯示,下同)的旋轉 方向。作用與第 2 點類似。

    • ro.rotation.external 屬性

上面說到的兩個屬性 ro.sf.hwrotation 和 ro.orientation.einit 表示的是初始化 的方向,如果某些 app 可以設定方向或者需要根據 gsensor 方向進行實時調整,則

需要考慮加上這裏的 ro.rotation.external 屬性,具體的原則如下:

android 系統默認只有主顯會根據框架上報的 gsensor 或者 app 設置的旋轉方向進 行實時的旋轉,如果要求次顯也根據上述方向進行旋轉必須配置該屬性,true 表 示次屏可以隨着系統 gsensor 或者 app 觸發旋轉,false 則不旋轉。

舉個例子:

根據之前我們的描述,我們默認設定頭盔爲主顯,所以頭盔能夠根據 app 設置的旋 轉方向進行旋轉,但是如果我外接一個 hdmi 電視,並且安裝了一個 app,這個 app 在啓動的時候會將方向顛倒 180 度,則此時 hdmi 電視因爲是次顯將無法根據 app 設置的旋轉方向進行旋轉,我們看到的現象將是頭盔的方向是正常的,但是 hdmi 電視的方向是不正常的。

系統默認將這個值定義爲 true,一般情況下,VR 的 apk 不支持 gsensor 方向的旋 轉(這裏的旋轉指的是從橫屏變成豎屏,也就是說旋轉 0/90/180/270),所以我 們不需要太關心這個屬性。

2.3 頭盔 LCD 的刷新方向

VR 頭盔我們默認爲主顯,也就是說接的是 VOP Big(LCDC0/VopB)。

    • sys.vr.vsync 屬性

屬性值默認爲 0,表示從 fb0(默認對應的是 lcdc0,也就是主顯)獲取 vsync 信號; 屬性值爲 5 則表示從 fb5(默認對應的是 lcdc1,也就是次顯)獲取 vsync 信號; RK VR 應用會根據該屬性值,在應用打開初始化的時候去獲取 fb0 或者 fb5 的 dsp_mode 和 fps 刷新率的值,如配錯,會有撕裂現象。

  1. 視頻是否支持 ATW
    • vr.video.direct:

true 表示視頻播放時關閉 ATW。

false 則表示視頻播放打開 ATW;其他場景默認是有 ATW 的,無法關閉。 默認爲 true。

推薦保持默認值 true,在視頻場景關閉 ATW,可以有效降低功耗,但是可能會影響 視頻效果。

  1. 雙屏 LCD 掃描方向
    • sys.vrscan:

該屬性僅針對雙屏機器,單屏機器的屏幕掃描方式是左右方向的,不需要考慮此屬性。

由於雙屏機器在硬件設計上,屏幕的物理方向有上下相反的兩種接法,對應的屏幕掃描方 式也有從下往上掃和從上往下掃兩種方式。軟件上通過 sys.vr.scan 配置,有 0 和 1 兩 種。

如上圖所示,該雙屏工程機的屏幕排線接在上方,因此屏幕中的掃描方向就是從下往上掃 描,sys.vr.scan 屬性應該設置爲 0。如果硬件上屏幕排線接在下方(暫時沒有樣例圖), 那麼屏幕的掃描方向就和示例圖的工程機相反,sys.vr.scan 屬性應該設置爲 1。

sys.vr.scan 屬性如配置錯誤,會有撕裂現象。該屬性的配置還要配合第 2.7 節 vop 取反的 配置,上述討論的配置都是在 vop 取反關閉的情況下討論的,如打開 vop 取反,則上述 sys.vr.scan 屬性配置也要取反。雙屏機器可切換該屬性的值進行調試。

 

2.7 VOP 取反

在 VR 系統設計中我們加入了一些優化設計,降低撕裂的概率,例如這邊所講的 vop 取反。 上面兩張圖的紅色輔助線表示掃描線。正常情況下,不開啓 vop 取反,屏幕的掃描方向是 從上往下,如左圖所示;開啓 vop 取反,屏幕的掃描方向則是從下往上,如右圖所示。

雙屏機器建議開啓 vop 取反,開啓 vop 取反則必須關閉 AFBC,可以降低撕裂的概率。 單屏機器不建議開啓 vop 取反,建議開啓 AFBC。

開啓方法:

sys.vr.pmirror 爲 1 則主屏開啓鏡像,0 則關閉 sys.vr.emirror 爲 1 則次屏開啓鏡像,0 則關閉

 

2.8 VR 光學參數(FOV)調節

FOV 參數調節請參考《RKVR 光學參數調節》文檔

3 VR 系統調試

  • VR Log 使能和 log 具體含義: setprop sys.vr.log 1

logcat -c;logcat | grep VRJni (VRJ 大寫 ni 小寫)

然後重新啓動調試的 VR 應用,可以看到如下打印(以 rk3399 爲例):

上述圖中的 log 分成 3 個部分,每個部分的含義分別說明如下:

1 --> 當前系統配置的單雙屏狀態值。0 代表單屏,1 代表雙屏,配置錯誤會有撕 裂。參考之前 dsp_mode 配置小點的內容。

2 --> 線程初始化操作,全部 success 爲正常,如有 error 出現,會導致撕裂。 如果出現 error,請執行 cat /dev/cpuset/foreground/cpus,結果如下:

如果不是這個結果請檢查代碼:device/rockchip/rk3399/init.vr.rc 是否有如下 配置,如果沒有請確認代碼是否更新成功,如果是新加的 init 文件請手動添加。

    1. -->當前系統配置的 fb 的刷新率值。對應機器的/sys/class/graphics/fb0/fps
  • /sys/class/graphics/fb5/fps。參考之前 sys.vr.vsync 屬性配置的內容。如果 sys.vr.vsync 配置正確,而刷新率不是目標刷新率,請驗證是不是 dts 中屏幕的 clock 值是否配置有誤。

4 --> 當前系統配置的 vsync 節點打開是否成功。fb0 還是 fb5 取決於 sys.vr.vsync屬性。

  • 查看應用實時渲染時間: setprop sys.vr.log 1

logcat -c;logcat | grep VRJni

 

如上兩圖,是在屏幕 60fps 刷新率情況下的打印。上圖渲染時間充足,而下圖的 log 有帶#符號字樣的超時打印。這個時候就要去看下當前的 CPU GPU DDR 的頻率是否過低。

  • CPU

查看小核頻率

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq

查看大核頻率

cat /sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq

  • GPU

cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/cur_freq

  • DDR

開機串口打印的最前有顯示 ddr 頻率。

  CPU 頻率低於 408M,GPU 頻率低於 300M,DDR 頻率低於 666M,都是可能造成 VR 應用性能不足,渲染超時的原因,視頻播放等場景的 CPU 和 GPU 頻率要求會更高,屏幕刷 新率高於 60fps 也需要更高的頻率支持。所以要確認下編譯 kernel 時 dts 裏面這三個 頻點的最低配置是否有問題,建議參考下述兩個 dts 進行配置:

arch/arm64/boot/dts/rockchip/rk3399‐box‐rev1‐disvr.dts

arch/arm64/boot/dts/rockchip/rk3399‐disvr‐android.dts

在上述兩個 dts 中,有如下代碼,如果下述代碼的最低頻率仍然無法滿足要求,則可以 自行添加,將低頻 disabled 掉:

     盈鵬飛嵌入式專注於Atmel、TI、NXP、Rockchip等平臺產品的研發。公司團隊擁有超過10年的ARM軟硬件開發經驗,擁有智能家居、人機界面、工業縫紉機、電力採集器等多個成功案例;公司2005年成立至今,主要從事工業控制領域開發,先後開發了以ARM9- AT91SAM9G45、Cortex-A8-335x 、A7- i.MX6UL 、A9-I.MX6Q爲主控的各種方案,深入WINCE/LINUX 嵌入式系統開發多年,產品以高穩定性,高可靠性獲得客戶的信賴!2017年我們再出發,依賴工業控制領域多年的設計造詣,公司以創"芯"科技,智造雙贏爲經營理念,先後開發了以RK3288、RK3399 等處理器爲應用的ANDROID解決方案,承接項目定製、BSP以及APP開發,爲客戶提供專業化的量身定製廣告機、消費類電子等解決方案。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章