[linux-dvb] SAA7146 (KNC ONE DVB-C): ber,str values reliable?

thomas schorpp t.schorpp at gmx.de
Sat Aug 26 13:17:16 CEST 2006


Thomas Börkel wrote:
> HI!
> 
> thomas schorpp wrote:
> 
>>> Whatever I do (different cables, changing amplification, switching 
>>> channels), czap always reports a ber of 195000.
> 
> 
>> status SCVYL | signal 8b8b | snr f3f3 | ber 0000001e | unc ffffffff | 
>> FE_HAS_LOCK
>> status SCVYL | signal 8b8b | snr f2f2 | ber 0000001e | unc 00000000 | 
>> FE_HAS_LOCK
>>
>> its static here too on every channel.
> 
> 
> In the meantime, using Google, I found one other owner, that also has 
> exactly 195000. This seems pretty unlikely to me, if the ber value is 
> computed right.
> 
> At the moment, one card has constantly 195000 and the other 101d0. I 
> guess, when I reboot, it's back to 195000 (like it was once, when one 
> card had a ber of 10.
> 
> BTW, czap and femon show different values, if I use femon without a 
> tuning app (like czap) running parallel, is this normal?
> 
> $ czap "das vierte" -c channels.conf
> using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
> 151 DAS 
> VIERTE:762000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_64:2047:2048:1793
> 151 DAS VIERTE: f 762000000, s 6900000, i 2, fec 0, qam 3, v 0x7ff, a 0x800
> status 1f | signal 8484 | snr f4f4 | ber 00195000 | unc ffffffff | 
> FE_HAS_LOCK
> status 1f | signal 8484 | snr f3f3 | ber 00195000 | unc 00000000 | 
> FE_HAS_LOCK
> 
> *CTRL-C*
> 
> $ femon
> using '/dev/dvb/adapter0/frontend0'
> FE: Philips TDA10021 DVB-C (CABLE)
> status 1f | signal 0000 | snr ffff | ber 00969696 | unc 0000000f | 
> FE_HAS_LOCK
> status 1f | signal 0000 | snr ffff | ber 00969696 | unc 0000000f | 
> FE_HAS_LOCK
> 

ber from device and driver is ok, use dvbsnoop -s signal.

bug is from misadaption/accesssyncprobs in femon+czap:

tom1:/usr/src/linux# dvbsnoop
dvbsnoop  - a dvb/mpeg2 stream analyzer tool
Version: 1.4.00/api-3  (Sep 25 2005 20:42:27)
         http://dvbsnoop.sourceforge.net/
         (c) 2001-2005  Rainer Scherg  (rasc)

Aug 26 08:59:54 tom1 kernel:  tda10021: Verbose Status:
Aug 26 08:59:54 tom1 kernel: tda10021: VAFC -1
Aug 26 08:59:54 tom1 kernel: tda10021: VAGC 0x7f
Aug 26 08:59:54 tom1 kernel: tda10021: AGCCONF 0x23
Aug 26 08:59:54 tom1 kernel: tda10021: AGCREF 0x5c
Aug 26 08:59:54 tom1 kernel: tda10021: PWMREF 0x48
Aug 26 08:59:54 tom1 kernel: tda10021: MSE 0x0c
Aug 26 08:59:54 tom1 kernel: tda10021: BER-RANGE 0 <---- (inverted output 0...3 from sync register ber bits )
Aug 26 08:59:54 tom1 kernel: tda10021: SATNYQ 0x00
Aug 26 08:59:54 tom1 kernel: tda10021: SATADC 0x00
Aug 26 08:59:54 tom1 kernel: tda10021: HALFADC 0xb2
Aug 26 08:59:54 tom1 kernel: tda10021: SATDEC1 0x00
Aug 26 08:59:54 tom1 kernel: tda10021: SATDEC2 0x00
Aug 26 08:59:54 tom1 kernel: tda10021: SATDEC3 0x00
Aug 26 08:59:54 tom1 kernel: tda10021: CLKOFFSET 0x1c
Aug 26 08:59:54 tom1 kernel: tda10021: SATAAF 0x00
Aug 26 08:59:54 tom1 kernel: tda10021: EQCONF1 0x77
Aug 26 08:59:54 tom1 kernel: tda10021: EQSTEP 0x1a
Aug 26 08:59:54 tom1 kernel: tda10021: PLL 0x00

cycle: 95  d_time: 0.036 s  Sig: 32639  SNR: 62708  BER: 1620  UBLK: 0  Stat: 0x1f [SIG CARR VIT SYNC LOCK ]
cycle: 96  d_time: 0.036 s  Sig: 32639  SNR: 62708  BER: 1620  UBLK: 0  Stat: 0x1f [SIG CARR VIT SYNC LOCK ]
(256qam channel)

cycle: 265  d_time: 0.035 s  Sig: 35723  SNR: 62451  BER: 20  UBLK: 0  Stat: 0x1f [SIG CARR VIT SYNC LOCK ]
cycle: 266  d_time: 0.036 s  Sig: 35723  SNR: 62451  BER: 20  UBLK: 0  Stat: 0x1f [SIG CARR VIT SYNC LOCK ]
(64qam)

1. czap (ctrl-z)
2. dvbsnoop
3. femon
4. fg

you may want to reportbug femon and czap, i see no driver issue in tda10021.c

what not seems to be reliable is Sig, cause 256qam channels come with +6db from our network 
so VAGC must be inverse proportional to signalstrengh, not proportional, philips tuners respond to 
rising VAGC (tuner loop) with rising gain, too.
so a reliable signal reading should be calculated from the tuner AGC loop, which is in detail unknown 
to me.

you cant just use  *strength = (gain << 8) | gain; 
cause AGC gain is usually -40dB...0dB/0...3.3(5)VAGC on philips tuners.

logarithmic dB calculation with VAGC,AGCREF or like should be done, 
but not easy in a driver and without circuit knowlegde and in a universal driver and 
tvapps dont need it.

but you should honor the proportionality with

static int tda10021_read_signal_strength(struct dvb_frontend* fe, u16* strength)
{
	struct tda10021_state* state = fe->demodulator_priv;

	u8 igain = ~tda10021_readreg(state, 0x17);
	*strength = (igain << 8) | igain;

	return 0;
}

at least.







More information about the linux-dvb mailing list