|
lt9611是一款mipi转hdmi的芯片,项目中有使用到,分享下调试经验。
& Z& S B7 F" V7 m. P! z( ~! W5 }3 i5 i- T: ^! u& C
参考设计 V" p- I, C4 B2 d% }% w3 P
* f+ r" w$ o, j. o3 E% s$ y( }: F2 [
; B. O! n: M* q6 k& Y2 a
d1 l+ {. x. Y; f$ q" s5 @$ |) F. V' |! M2 N8 o* E% J1 T) p
' a" Q. Z" I a8 g3 }
要先拿到源码,然后进行调试。刚好代码默认有一份驱动,那不就折腾了。适当修改后,接hdmi屏幕进行测试,i2c能正常通信,也能正确解码前端的mipi信号,感觉成功了一半。屏幕也提示检测到了hdmi信号,但黑屏。先让ic进入自测试模式,看输出正不正常,屏幕提示超出范围。
# p4 R7 ^$ S& `7 ^* @% I2 I2 e/ S' J" K' Z
看log,有如下不正常打印
! x) G- a5 I) X9 ]* g4 H! t) i
0 h# [) X+ h/ F c" }[ 211.152990] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
7 Z, I; r4 x" b. N[ 211.163594] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll) e, G% Q4 Y& k( B* j' g
[ 211.172848] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll6 }* l2 A. D% e% W( W
[ 211.182127] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
3 [* Z% f7 R; @% C2 a[ 211.193973] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
6 Z4 l$ w+ v3 j. I0 n% J后来,测量27M的晶振,发现没有正常起振(27M的正旋波),跟参考设计对比,发现贴的电容不是15pF,导致不能起振。
4 y4 y t+ a% L) [+ H. L: n1 f3 N) J# A0 w3 K+ ~/ K
修改后,ic自测显示正常,屏幕也能显示正确的内容。
/ X0 K. I6 @6 \' [, [3 o; o% t
6 ^! T2 _4 h8 P4 b7 q( e2 V% L测试的时候,又出现的随机黑屏的情况,估计得重试调ic的参数。这一步得留给fae了,因为拿不到寄存器说明手册。7 `5 `& S/ G1 V. P
" v2 w9 \4 L- L' T/ B" W# w$ Z硬件检查点:
. v' H$ _) K# c( z) [) |& w" p' _7 @# x6 g
2k的精密电阻要贴上 f$ w+ u$ Q) p
3 U) i; }5 s! Z& w. m% P6 B27M的晶体要正常起振,由于示波器的探针跟地相当于一个小电容,测量1M电阻的波形时,相当于在15pF的电容处又并了一个电容,会导致波形出不来,当然手上的示波器比较低端,不确定高端的示波器能不能量出来。
- i( T) ?7 _7 G
- K4 u+ m0 `* F F2 Q参考正确的打印; ` W3 b M/ z
$ U- G: D7 `9 ]
[ 1475.290967] [LT9611] lt9611_mipi_input_digtal() lt9611 set mipi lanes = 0
. \ r v8 Y3 s, F[ 1475.302923] [LT9611] lt9611_mipi_input_digtal() lt9611 set mipi ports = 10 g" _ w% y6 l. S5 t
[ 1475.309880] [LT9611] lt9611_mipi_input_digtal() lt9611.mipi_mode = dsi
M2 h/ m8 m7 ~/ e9 }2 \[ 1477.356611] [LT9611] lt9611_video_check() lt9611.mipi_mode = dsi( h' V3 Y1 K. e" i4 c& s5 ^
[ 1477.363822] [LT9611] lt9611_video_check() h_act_a = 1920, h_act_b = 0, v_act = 1080, v_tal = 1125:7 T8 {/ E8 |; j% X7 L
[ 1477.372935] [LT9611] lt9611_video_check() mipi_video_format: a; {' v( Z E0 ~8 p! t
[ 1477.378984] [LT9611] lt9611_video_check() Video_Check = video_1920x1080_60Hz
! E) Y4 d3 [3 p[ 1477.386249] [LT9611] lt9611_pll() set rx pll = 148500+ b( g H o6 c$ x
[ 1477.398933] [LT9611] lt9611_pll() pcr_m = 37, hdmi_post_div = 28 z% [2 ? G0 V; x% C
[ 1477.412925] [LT9611] lt9611_pll() hdmi pll locked
5 E# I$ C/ p1 M7 z& |( C[ 1477.417829] [LT9611] lt9611_mipi_pcr() POL = 0, 0
6 b3 o* J9 r, c5 g+ J[ 1477.428349] [LT9611] show_timing() video_format:1920X1080, pclk_khz:148500
" {1 y: [: Y$ }1 E8 C6 s6 R[ 1477.435381] [LT9611] show_timing() hfp:88, hbp:148, hs:44, htotal:22000 [. q( B7 N8 j. S9 F
[ 1477.442130] [LT9611] show_timing() vfp:4, vbp:36, vs:5, htotel:1125
! {- b3 g* y( T& Z8 R9 M[ 1477.458495] [LT9611] lt9611_audio_init() Audio inut = I2S 2ch
" M" ^% X# D0 ]- k- t& X[ 1477.498075] [LT9611] lt9611_init() ############lt9611 initial End##################
' N) c+ b: B9 h: Q[ 1477.507443] [LT9611] lt9611_init() Detect hpd High
. Q9 h1 i! u8 O# }4 R- |/ p Q u[ 1477.588316] [LT9611] lt9611_frequency_meter_byte_clk() port A byte clk = 1262702 k1 x0 s3 y+ Y; Y j
6 b' @1 P* C$ R& I2 ~% A& _. E( t
2 S+ W% K8 E4 c# ]/ R+ t
, ]5 N* F6 ] ^8 U E2 H3 D |
|