un récepteur rds sur une seule puce
DESCRIPTION
Un récepteur RDS sur une seule puce. J-F Perotto, T.Melly, E.Leroux, J.Gerrits, Q.Xu, P.Volet, D.Ruffieux, P.Vuilleumier, C.Piguet CSEM, Neuchâtel, Switzerland. RDS = Radio Data System. Transmission de données numériques dans la bande FM 88 – 108 MHz - PowerPoint PPT PresentationTRANSCRIPT
Un récepteur RDS sur une seule puce
J-F Perotto, T.Melly, E.Leroux, J.Gerrits, Q.Xu, P.Volet,
D.Ruffieux, P.Vuilleumier, C.Piguet
CSEM, Neuchâtel, Switzerland
J-F Perotto
RDS = Radio Data System
Transmission de données numériques dans la bande FM 88 – 108 MHz
Couverture mondiale (RBDS = Radio Broadcast Data System aux USA)
45 caractères ASCII par seconde
Large variété d’informations :
Nom de la station (tracking)
Type de programme, de musique, …
Informations météo, traffic routier, bourse, …
Heure locale
etc…
J-F Perotto
Applications des récepteurs RDS
Auto-radio : recherche automatique de programmes,
informations routières, etc…
PDA, laptop, tel. mobile : mise à l’heure automatique.
Récepteurs GPS : differential GPS reference data.
J-F Perotto
TDA7021: 2V - 6 mA SAA6579: 3.6V - 6 mA
Radio Démod. RDS
34 mW
Motivation pour un récepteur RDS « low power »
La durée de vie des batteries est un paramètre important dans les équipements portables. Les circuits commerciaux actuels consomment beaucoup trop.
J-F Perotto
Comment sont transmises les données RDS ?
Une sous-porteuse 57 kHz (inaudible) est modulée BPSK par
les données RDS.
Un mécanisme de détection-correction d’erreurs augmente la
fiabilité des transmissions.
Spectre du signal multiplex :
15 19 23 38 530
F [kHz]
L+R
L-R
57
RDS
pilote
ARIL-R
Stereo
15 19 23 38 530
F [kHz]
L+R
L-R
57
RDS
pilote
ARIL-R
Stereo
J-F Perotto
Groupe RDS (104 bits)
Bloc A Bloc B Bloc C Bloc D
Bloc RDS (26 bits)
16 bits data 10 bits check
Groupe RDS (104 bits)
Bloc A Bloc B Bloc C Bloc D
Bloc RDS (26 bits)
16 bits data 10 bits check
Structure d’une trame RDS (1)
bit/s 1187.548
kHz 57
87 ms (11.4 groupe/s)
J-F Perotto
Groupe
Bloc A Bloc B Bloc C Bloc D Bloc A Bloc B Bloc C Bloc D
Structure d’une trame RDS (2)
Données (32 bits)
Type du groupe ( 100 types)
Identificateur de station
J-F Perotto
Utilisation dans un produit commercial
RDS chip
Application chip
RDS block
Application chip
Imbedded RDS block
Chip RDS
J-F Perotto
Architecture du circuit RDS
Récepteur FM-RDS
Décodeur RDS
reg
istr
es re
gis
tres
Interface I2C
mux bus I2C
Circuit RDS
32 kHz
J-F Perotto
Partie radio (1)
Récepteur FM 88 – 108 MHz
Démodulateur RDS
Démodulateur stéréo
Signaux RDS Signal
composite
Architecture faible consommation orientée RDS
- Filtrage de canal peu sélectif (faible ordre)
- Basse fréquence intermédiaire (250 kHz v.s. 10.7 MHz)
RDDA RDCL
J-F Perotto
Partie radio (2)
channel selection
freq synthetiser
LNA & gain FM
demod
RDS demod
32’768 Hz
RDDA
RDCL
~250kHz~250kHz~250kHz~250kHz~250kHz~250kHz~250kHz
~100MHz~100MHz~100MHz~100MHz~100MHz~100MHz~100MHz
15 19 23 38 530
F [kHz]
L+R
L-R
57
RDS
pilote
ARIL-R
Stereo
15 19 23 38 530
F [kHz]
L+R
L-R
57
RDS
pilote
ARIL-R
Stereo select
Signal composite
IF 250 kHz
100 MHz
Bus analogique
J-F Perotto
Démodulateur RDS
Signal composite data & clock RDS
57 kHzBPF
BPSKdemodulator
clockrecovery
differentialdecoder
Signal composite Signal RDS
Symboles Manchester
RDCL
RDDAManchesterdecoder
Costas loopSuppression de
l’ambiguïté de phase
57 kHz57 kHz
0 Signaux binairesRDS
J-F Perotto
Décodeur RDS
RDDA
RDCL Décodeur RDS
Données RDS (8 bytes)
INT
I2C
Buffer
status, settings
SCL
SDA
J-F Perotto
• détecter le début des groupes (synchronisation)
• identifier les blocs A, B, C, D à l’intérieur d’un groupe
• détecter et corriger les erreurs de transmission
m = 16 p = 10
données check
Code initial
c25 c0
offset
m p’Code transmis
+
Buts du codage des informations RDS
codage
J-F Perotto
1)( 3457810 xxxxxxxg
)()(mod)(
)()()(
1010 xdxg
xg
xxmxxmxc
• Le codage RDS est basé sur un code de bloc cyclique dont le polynôme générateur g(x) est :
• Le code c(x) transmis par l’émetteur est généré de la façon suivante :
données16 bits
check10 bits
offset10 bits
Codage à la transmission
• C’est un code systématique
• Capacité de détection/correction d’erreurs : 1 erreur simple ou 3 erreurs groupées (burst)
J-F Perotto
Génération du syndrome à la réception
1)( 3457810 xxxxxxxg
Méthode polynômiale Méthode matricielle
1 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 00 0 0 0 1 0 0 0 0 00 0 0 0 0 1 0 0 0 00 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 11 0 1 1 0 1 1 1 0 00 1 0 1 1 0 1 1 1 00 0 1 0 1 1 0 1 1 11 0 1 0 0 0 0 1 1 11 1 1 0 0 1 1 1 1 11 1 0 0 0 1 0 0 1 11 1 0 1 0 1 0 1 0 11 1 0 1 1 1 0 1 1 00 1 1 0 1 1 1 0 1 11 0 0 0 0 0 0 0 0 11 1 1 1 0 1 1 1 0 00 1 1 1 1 0 1 1 1 00 0 1 1 1 1 0 1 1 11 0 1 0 1 0 0 1 1 11 1 1 0 0 0 1 1 1 11 1 0 0 0 1 1 0 1 1
1 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 00 0 0 0 1 0 0 0 0 00 0 0 0 0 1 0 0 0 00 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 11 0 1 1 0 1 1 1 0 00 1 0 1 1 0 1 1 1 00 0 1 0 1 1 0 1 1 11 0 1 0 0 0 0 1 1 11 1 1 0 0 1 1 1 1 11 1 0 0 0 1 0 0 1 11 1 0 1 0 1 0 1 0 11 1 0 1 1 1 0 1 1 00 1 1 0 1 1 1 0 1 11 0 0 0 0 0 0 0 0 11 1 1 1 0 1 1 1 0 00 1 1 1 1 0 1 1 1 00 0 1 1 1 1 0 1 1 11 0 1 0 1 0 0 1 1 11 1 1 0 0 0 1 1 1 11 1 0 0 0 1 1 0 1 1
1 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 00 0 0 0 1 0 0 0 0 00 0 0 0 0 1 0 0 0 00 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 11 0 1 1 0 1 1 1 0 00 1 0 1 1 0 1 1 1 00 0 1 0 1 1 0 1 1 11 0 1 0 0 0 0 1 1 11 1 1 0 0 1 1 1 1 11 1 0 0 0 1 0 0 1 11 1 0 1 0 1 0 1 0 11 1 0 1 1 1 0 1 1 00 1 1 0 1 1 1 0 1 11 0 0 0 0 0 0 0 0 11 1 1 1 0 1 1 1 0 00 1 1 1 1 0 1 1 1 00 0 1 1 1 1 0 1 1 11 0 1 0 1 0 0 1 1 11 1 1 0 0 0 1 1 1 11 1 0 0 0 1 1 0 1 1
HT x code = 0 (syndrome nul)
Propriété de H :
HT x (code + erreur) = HT x code + HT x erreur
0 syndrome de l’erreur
g(x) H =
J-F Perotto
Syndrome de l’offset
HT x (code + erreur + offset) = HT x code + HT x erreur + HT x offset
0 syndrome de l’erreur
Les offsets ne représentent pas des patterns d’erreurs valides !
syndrome de l’offset
Bloc Offset Syndrome de l’offsetb9 ... b0 s9 ... s0
A 0 0 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 0 0
B 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0
C 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0
C’ 1 1 0 1 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0
D 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0
E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Bloc Offset Syndrome de l’offsetb9 ... b0 s9 ... s0
A 0 0 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 0 0 0
B 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0
C 0 1 0 1 1 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0
C’ 1 1 0 1 0 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0
D 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0
E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
J-F Perotto
Synchronisation du décodeur
La réception est supposée sans erreur
RDS data flow 26 bits shifter
HT x code
syndrome de l’offset
= S(A) = S(B) = S(C) = S(C’) = S(D) = S(E)
0 0 0 0 0 0
0 1 0 0 0 0
No synchro
Bloc B reçu
26
10
code
… 1 1 0 1 0 0 1 0 1 1 1 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 0 0 1 1 0 1 1 0 0 1 …
Simple dans GF(2) !
J-F Perotto
Correction des erreurs de transmission
Le décodeur est supposé synchronisé
RDS data flow 26 bits shifter
HT x code
syndrome offset + syndrome erreur
code avec erreur
correcteur
suppression du syndrome de l’offset
syndrome de l’erreur
on / off
reg
reg
code corrigé
# bloc
J-F Perotto
synchroniser surle 1er bloc reçu
pas de synchroaprès 52 bits reçus interrupt
« pas de synchro »
si bloc A si bloc A
Attente d’un bloc Aréception
bloc B
si bloc A
réceptionblocs C et D
interrupt« groupe reçu »
start
stop
interrupt« erreur de réception »
stopSyndrome 0
réceptionbloc A
si pas wanted group
si wanted group
REG temp
Graphe de principe du décodeur RDS
J-F Perotto
Le décodeur RDS
SR
buff er
correcteur
HT x code
+ S(E)+ S(A)
S(E) = 0
rds_clk1
coron
ckbuf
S(E)
S(A)
16 10
16 10
16 10
10
ckAtempA
load
ckB
ckC
ckD
tempB
tempC
tempD
regAl
regBl
regCl
regDl
RDSFSM
counter mod 26clrCount
eq26
rds_clk1
tempB<4:0>
comparewantgr
settings reg
6
5
regAh
regBh
regCh
regDh
status reg
errA
errD
rxerrnosync
I nt
4x8
16
10 10
syndrome
rds_clk1
rds_data
10
sbuff er cksbuf
selA..selE
S(A) = 0
6
smux
A B C C’ D E
grreceived
dout
dinreg_wr
dout addr
3
4x8
8
8
8
setI nt (on f all edge)
clrI nt(on f all edge)
I nt
clrI nt(on 0 state)
NRESET_DI GI TAL
ResetFSM offset syndrome
suppress
error syndrome only
SR
buff er
correcteur
HT x code
+ S(E)+ S(A)
S(E) = 0
rds_clk1
coron
ckbuf
S(E)
S(A)
16 10
16 10
16 10
10
ckAtempA
load
ckB
ckC
ckD
tempB
tempC
tempD
regAl
regBl
regCl
regDl
RDSFSM
counter mod 26clrCount
eq26
rds_clk1
tempB<4:0>
comparewantgr
settings reg
6
5
regAh
regBh
regCh
regDh
status reg
errA
errD
rxerrnosync
I nt
4x8
16
10 10
syndrome
rds_clk1
rds_data
10
sbuff er cksbuf
selA..selE
S(A) = 0
6
smux
A B C C’ D E
grreceived
dout
dinreg_wr
dout addr
3
4x8
8
8
8
setI nt (on f all edge)
clrI nt(on f all edge)
I nt
clrI nt(on 0 state)
NRESET_DI GI TAL
ResetFSM offset syndrome
suppress
error syndrome only
J-F Perotto
ckbuf ,wait
Clrcnt
ckbuf ,wait
ckA
eq26=1 S=0
eq26=1 S=1
S=1
S(A)=1S(A)=0
ckbuf ,wait
Status := NoSynchroeq26=1 S=0
ckbuf ,wait
ckB
ckC
ckD
ckA
eq26=1 S(B)=0
Status:=errBS(B)=0
S(B)=1
Load (reg := temp)Status := GroupReceived
eq26=1 S(A)=1Status := RxError
eq26=1 S=0
Hard FSM reset
clrcnt
corron,ckB
eq26=1 S(B)=1
ckbuf ,wait
ckbuf ,wait
ckbuf ,wait
eq26=1 S(C)=0 S(C’)=0
Status:=errC
S(C)=0
S(C)=1
corron S(C), ckC
eq26=1 S(D)=0
Status:=errDS(D)=0
S(D)=1
corron,ckD
eq26=1 (S(C)=1 S(C’)=1)
eq26=1 S(D)=1
wg=0wg=1 I nt=0
eq26=1 S(A)=0
Status:=errAS(A)=0
S(A)=1
corron,ckA
eq26=1 S(A)=1 S(E)=1
I nt := 1Status := 0..0
wg=1 I nt=0wg=0
cksbuf ,corron S(C’), ckC
S(C’)=1
S(C’)=0
I nt := 1
end
Hard FSM reset
Hard FSM reset
ckbuf ,wait
Clrcnt
ckbuf ,wait
ckA
eq26=1 S=0
eq26=1 S=1
S=1
S(A)=1S(A)=0
ckbuf ,wait
Status := NoSynchroeq26=1 S=0
ckbuf ,wait
ckB
ckC
ckD
ckA
eq26=1 S(B)=0
Status:=errBS(B)=0
S(B)=1
Load (reg := temp)Status := GroupReceived
eq26=1 S(A)=1Status := RxError
eq26=1 S=0
Hard FSM reset
clrcnt
corron,ckB
eq26=1 S(B)=1
ckbuf ,wait
ckbuf ,wait
ckbuf ,wait
eq26=1 S(C)=0 S(C’)=0
Status:=errC
S(C)=0
S(C)=1
corron S(C), ckC
eq26=1 S(D)=0
Status:=errDS(D)=0
S(D)=1
corron,ckD
eq26=1 (S(C)=1 S(C’)=1)
eq26=1 S(D)=1
wg=0wg=1 I nt=0
eq26=1 S(A)=0
Status:=errAS(A)=0
S(A)=1
corron,ckA
eq26=1 S(A)=1 S(E)=1
I nt := 1Status := 0..0
wg=1 I nt=0wg=0
cksbuf ,corron S(C’), ckC
S(C’)=1
S(C’)=0
I nt := 1
end
Hard FSM reset
Hard FSM reset
Graphe du décodeur RDS
synchro initiale et
saisie groupe A
attente groupe A
saisie groupe B
saisie groupe C
saisie groupe D
saisie groupe A
J-F Perotto
01234567 01234567
01234567 01234567
01234567 01234567
01234567 01234567
RAH RAL
RBH RBL
RCH RCL
RDH RDL
81h
83h
85h
87h
80h
82h
84h
86h
01234567
SETTI NGS(write)
Wanted group(0 .. 15, A/ B)
I ntAck
NResetRDS
All groups wanted
b0b1b2b3b4 8Fh
01234567
Test RDS89h..8Eh
01234567
STATUS*(read)
No synchro
Wrong blocs
1234
Rx error
Group received
88h
I ntReq
Read registers
Write register
01234567 01234567
01234567 01234567
01234567 01234567
01234567 01234567
RAH RAL
RBH RBL
RCH RCL
RDH RDL
81h
83h
85h
87h
80h
82h
84h
86h
01234567
SETTI NGS(write)
Wanted group(0 .. 15, A/ B)
I ntAck
NResetRDS
All groups wanted
b0b1b2b3b4 8Fh
01234567
SETTI NGS(write)
Wanted group(0 .. 15, A/ B)
I ntAck
NResetRDS
All groups wanted
b0b1b2b3b4 8Fh
01234567
Test RDS89h..8Eh
01234567
STATUS*(read)
No synchro
Wrong blocs
1234
Rx error
Group received
88h
I ntReq
01234567
STATUS*(read)
No synchro
Wrong blocs
1234
Rx error
Group received
88h
I ntReq
Read registers
Write register
Interface application (partie RDS)
J-F Perotto
Récepteur RDS - technologie TSMC 180 nm
2 mm
2 mm
J-F Perotto
Logique Synthèse 32 kHz 100 MHz
LN
A A
mp
li M
IX
Filtrage canal
Limiteurs & RSSI
PT
AT
co
ntr
ol
Démodulateur FM Démodulateur BPSK
Clock recovery
J-F Perotto
Résultats et conclusion (1)
Sensibilité :
Dynamique :
Consommation :
10 composants externes (self & capa)
Antenne miniature développée
spécifiquement pour ce produit
-86 dBm (10 V / 50 ) @ BERR = 10-3
90 dB 1.5 mA typ @ 1 – 1.6 V
Récepteur
J-F Perotto
Résultats et conclusion (2)
Circuit complet Technologie : TSMC 180 nm Surface : 4 mm2
Partie analogique : 15’000 MOS Partie digitale : 15’000 MOS
Testabilité Partie radio : bus analogique Partie digitale : test complet au travers de I2C (10 ms @ 1 MHz)