|
lt9611是一款mipi转hdmi的芯片,项目中有使用到,分享下调试经验。+ [* e# p& O' F! k
$ O- K7 [3 X, C0 v# k3 Z p
参考设计8 ?7 c0 t. T7 H
k/ v! b) k- t$ f; p n& v1 q
! g3 Y2 {, [4 k! X& o% p. C5 v) h, K2 ~
3 L. G& d* c' E: Z7 m4 D
( F8 I3 a/ C2 g$ h4 J" `( |0 r 要先拿到源码,然后进行调试。刚好代码默认有一份驱动,那不就折腾了。适当修改后,接hdmi屏幕进行测试,i2c能正常通信,也能正确解码前端的mipi信号,感觉成功了一半。屏幕也提示检测到了hdmi信号,但黑屏。先让ic进入自测试模式,看输出正不正常,屏幕提示超出范围。2 c" Q( u2 Z7 v* R9 k
; n4 H3 Q' z( C7 v5 A: t! }看log,有如下不正常打印
: n2 L1 s J& y2 U- S& M* |* I+ j
! b9 \, W; a2 G+ s0 G[ 211.152990] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll+ j" S: F5 @" h% W* a8 I
[ 211.163594] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll% O- |, V1 K; p1 s" Z: ^( ]' A
[ 211.172848] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
6 f# F: c& |; i5 N[ 211.182127] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
Z" w% v- j! i2 i1 P ^[ 211.193973] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
0 s; I% T; K2 M后来,测量27M的晶振,发现没有正常起振(27M的正旋波),跟参考设计对比,发现贴的电容不是15pF,导致不能起振。
$ A' L: J4 c; C+ d4 d. G/ I7 Q4 ]% z
修改后,ic自测显示正常,屏幕也能显示正确的内容。
# [7 a: Z( R& e/ u) Q7 `1 L- U) p
' z; U1 f+ }% z3 T! }# V: k/ ?测试的时候,又出现的随机黑屏的情况,估计得重试调ic的参数。这一步得留给fae了,因为拿不到寄存器说明手册。1 _( V* ]/ M- e# |/ X
$ G! Q6 }1 p/ V5 `$ q( J) s& P& A硬件检查点:2 p0 k9 p) v" B: F; I }
4 }" T' P) W$ T- \; \5 q9 N1 ~
2k的精密电阻要贴上
l2 R5 V/ ~8 [3 G, a8 k5 A
' P( k) @ s; t5 J4 ~ v27M的晶体要正常起振,由于示波器的探针跟地相当于一个小电容,测量1M电阻的波形时,相当于在15pF的电容处又并了一个电容,会导致波形出不来,当然手上的示波器比较低端,不确定高端的示波器能不能量出来。9 N* |/ e9 ~; k+ w5 F3 _
# @6 H9 V5 i* J8 F参考正确的打印
. o1 _/ Z9 S, i2 C) b; u2 h1 i
. b# q T9 ~2 w+ r+ T; n! L[ 1475.290967] [LT9611] lt9611_mipi_input_digtal() lt9611 set mipi lanes = 02 F# n0 q5 P7 n0 Q+ j
[ 1475.302923] [LT9611] lt9611_mipi_input_digtal() lt9611 set mipi ports = 13 T: n z# T! g7 K& _0 `
[ 1475.309880] [LT9611] lt9611_mipi_input_digtal() lt9611.mipi_mode = dsi
8 _7 G3 F) m/ ?& i8 l8 g/ `0 _- f% r[ 1477.356611] [LT9611] lt9611_video_check() lt9611.mipi_mode = dsi
8 b0 U" ^- W+ j# }" g$ g% U[ 1477.363822] [LT9611] lt9611_video_check() h_act_a = 1920, h_act_b = 0, v_act = 1080, v_tal = 1125:7 G* x/ s( z+ Q2 a
[ 1477.372935] [LT9611] lt9611_video_check() mipi_video_format: a6 q$ V" T& ~3 o
[ 1477.378984] [LT9611] lt9611_video_check() Video_Check = video_1920x1080_60Hz
+ R/ H; F4 u' B- E[ 1477.386249] [LT9611] lt9611_pll() set rx pll = 148500
/ D/ V0 D) l# m[ 1477.398933] [LT9611] lt9611_pll() pcr_m = 37, hdmi_post_div = 2; I c0 n* p3 `
[ 1477.412925] [LT9611] lt9611_pll() hdmi pll locked
2 [& b4 }& O4 C/ H[ 1477.417829] [LT9611] lt9611_mipi_pcr() POL = 0, 0
; ]7 C6 t8 V$ O- [# C[ 1477.428349] [LT9611] show_timing() video_format:1920X1080, pclk_khz:148500) [! T5 D' t- A
[ 1477.435381] [LT9611] show_timing() hfp:88, hbp:148, hs:44, htotal:2200
- I% i: e' J% S0 L; v1 O& X[ 1477.442130] [LT9611] show_timing() vfp:4, vbp:36, vs:5, htotel:1125
0 K+ n. w3 |' e8 E) G' _2 h; I3 K[ 1477.458495] [LT9611] lt9611_audio_init() Audio inut = I2S 2ch
M5 s2 E. U5 \* k) D9 Y[ 1477.498075] [LT9611] lt9611_init() ############lt9611 initial End##################
) W3 j0 o' x* e+ @" O7 `[ 1477.507443] [LT9611] lt9611_init() Detect hpd High
6 L& A$ a! J- p2 E: f& [/ M[ 1477.588316] [LT9611] lt9611_frequency_meter_byte_clk() port A byte clk = 126270% u' W! A w: ?
/ } n' E: X3 u1 `% e& a
: i E$ |. L/ ]2 M& ^
6 a, U: m* }: F3 y$ r8 \! R0 q |
|