|
lt9611是一款mipi转hdmi的芯片,项目中有使用到,分享下调试经验。" ?" D8 S8 Y* [: N/ {2 p9 I
& B7 K. L9 W* z5 f- S; M% L参考设计: v. }9 f; x% p" _* {; v' B
. a' v2 g ~; Z1 p% h0 K9 H, ?: R
: W7 S0 G5 d- C, f6 \1 N# H) E* t# f7 n
- Z7 w" }, f% U
- f* t4 s5 ?' V5 u 要先拿到源码,然后进行调试。刚好代码默认有一份驱动,那不就折腾了。适当修改后,接hdmi屏幕进行测试,i2c能正常通信,也能正确解码前端的mipi信号,感觉成功了一半。屏幕也提示检测到了hdmi信号,但黑屏。先让ic进入自测试模式,看输出正不正常,屏幕提示超出范围。) K# @9 M& i. \9 o+ d, m* z- i- L: r
+ n, n4 R9 D' b
看log,有如下不正常打印- g) ~+ ~ t" \3 f) Y) d. q
% W( B9 J$ B8 E# ~3 x4 N[ 211.152990] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll) d. k& r. z; Q7 v* a9 @
[ 211.163594] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
; e. y6 g) C0 s- Z' l9 F8 N( D1 X, y[ 211.172848] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll
7 d4 j0 i% o( D2 o: [$ h[ 211.182127] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll7 E9 P# A) d) ~0 r
[ 211.193973] [LT9611] lt9611_pll() hdmi pll unlocked, reset pll* K$ i1 r p/ g3 s- m
后来,测量27M的晶振,发现没有正常起振(27M的正旋波),跟参考设计对比,发现贴的电容不是15pF,导致不能起振。" b, x, J% V G; ~6 G* u
7 ?8 P; m- P" t, I$ E- \$ R E5 ]修改后,ic自测显示正常,屏幕也能显示正确的内容。% f# [1 {2 L( k. r
8 _& N9 m) A* [$ l, e# }& `
测试的时候,又出现的随机黑屏的情况,估计得重试调ic的参数。这一步得留给fae了,因为拿不到寄存器说明手册。
7 t4 z# t4 n7 E# G+ D" {. B9 H
& C, `0 y: P. J4 ?6 y# Y/ z7 I硬件检查点:! V2 [5 U" r; x, J
* L; \* |' {4 k u3 z
2k的精密电阻要贴上
; T% b* s0 ]4 X# E, n( t1 F, o7 A; I7 ~; j$ W
27M的晶体要正常起振,由于示波器的探针跟地相当于一个小电容,测量1M电阻的波形时,相当于在15pF的电容处又并了一个电容,会导致波形出不来,当然手上的示波器比较低端,不确定高端的示波器能不能量出来。
) U# b$ M. W4 W0 l4 J: D8 t* d. u. h- N# |& w, S5 ]
参考正确的打印; K( V% ~& \. \; _) x7 `
( G* I/ X$ }' n7 a[ 1475.290967] [LT9611] lt9611_mipi_input_digtal() lt9611 set mipi lanes = 0, W9 q1 N5 ^ W) r8 P6 ^5 Y2 E* J! B
[ 1475.302923] [LT9611] lt9611_mipi_input_digtal() lt9611 set mipi ports = 1- @5 s$ {$ Z3 O) d+ a2 |
[ 1475.309880] [LT9611] lt9611_mipi_input_digtal() lt9611.mipi_mode = dsi% g; e( v- W2 ?- g7 R
[ 1477.356611] [LT9611] lt9611_video_check() lt9611.mipi_mode = dsi
! G& p4 P( r. C8 Z2 N[ 1477.363822] [LT9611] lt9611_video_check() h_act_a = 1920, h_act_b = 0, v_act = 1080, v_tal = 1125:) c# D# [" Y5 [1 P' a N! n! j
[ 1477.372935] [LT9611] lt9611_video_check() mipi_video_format: a3 a3 ~2 ^5 n3 R- q6 @
[ 1477.378984] [LT9611] lt9611_video_check() Video_Check = video_1920x1080_60Hz
, r0 Q6 {6 b( a) \: q( W. o[ 1477.386249] [LT9611] lt9611_pll() set rx pll = 148500& x! K; [# g* u5 c/ Y% P2 H$ K; F; x
[ 1477.398933] [LT9611] lt9611_pll() pcr_m = 37, hdmi_post_div = 2' f4 a' y6 B+ _
[ 1477.412925] [LT9611] lt9611_pll() hdmi pll locked
, W1 U% U4 J% q) U! g$ W[ 1477.417829] [LT9611] lt9611_mipi_pcr() POL = 0, 0" J: A: ^7 r; T6 L2 b. c/ L: z. u
[ 1477.428349] [LT9611] show_timing() video_format:1920X1080, pclk_khz:148500
0 L8 k: F& J& N6 h$ \[ 1477.435381] [LT9611] show_timing() hfp:88, hbp:148, hs:44, htotal:2200
# K& w8 n( K8 V[ 1477.442130] [LT9611] show_timing() vfp:4, vbp:36, vs:5, htotel:1125/ ~" u9 d, M# s
[ 1477.458495] [LT9611] lt9611_audio_init() Audio inut = I2S 2ch
6 A! j& u7 n k7 n7 F2 N, o8 Q[ 1477.498075] [LT9611] lt9611_init() ############lt9611 initial End##################
5 Z; j4 d n2 j& N$ K( L% Y[ 1477.507443] [LT9611] lt9611_init() Detect hpd High
( W. `* J5 v. p; q[ 1477.588316] [LT9611] lt9611_frequency_meter_byte_clk() port A byte clk = 126270
8 r3 l% w, j6 M! A! @
. _: N: [3 A' z1 T1 w& K5 L" j# p z; H2 B* R4 E
4 t, _. ]: A4 ~/ D8 {9 e; E |
|