27
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

Un récepteur RDS sur une seule puce

  • Upload
    odell

  • View
    48

  • Download
    4

Embed Size (px)

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 Presentation

Citation preview

Page 1: Un récepteur RDS sur une seule puce

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

Page 2: Un récepteur RDS sur une seule puce

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…

Page 3: Un récepteur RDS sur une seule puce

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.

Page 4: Un récepteur RDS sur une seule puce

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.

Page 5: Un récepteur RDS sur une seule puce

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

Page 6: Un récepteur RDS sur une seule puce

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)

Page 7: Un récepteur RDS sur une seule puce

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

Page 8: Un récepteur RDS sur une seule puce

J-F Perotto

Utilisation dans un produit commercial

RDS chip

Application chip

RDS block

Application chip

Imbedded RDS block

Chip RDS

Page 9: Un récepteur RDS sur une seule puce

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

Page 10: Un récepteur RDS sur une seule puce

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

Page 11: Un récepteur RDS sur une seule puce

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

Page 12: Un récepteur RDS sur une seule puce

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

Page 13: Un récepteur RDS sur une seule puce

J-F Perotto

Décodeur RDS

RDDA

RDCL Décodeur RDS

Données RDS (8 bytes)

INT

I2C

Buffer

status, settings

SCL

SDA

Page 14: Un récepteur RDS sur une seule puce

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

Page 15: Un récepteur RDS sur une seule puce

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)

Page 16: Un récepteur RDS sur une seule puce

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 =

Page 17: Un récepteur RDS sur une seule puce

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

Page 18: Un récepteur RDS sur une seule puce

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) !

Page 19: Un récepteur RDS sur une seule puce

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

Page 20: Un récepteur RDS sur une seule puce

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

Page 21: Un récepteur RDS sur une seule puce

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

Page 22: Un récepteur RDS sur une seule puce

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

Page 23: Un récepteur RDS sur une seule puce

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)

Page 24: Un récepteur RDS sur une seule puce

J-F Perotto

Récepteur RDS - technologie TSMC 180 nm

2 mm

2 mm

Page 25: Un récepteur RDS sur une seule puce

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

Page 26: Un récepteur RDS sur une seule puce

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

Page 27: Un récepteur RDS sur une seule puce

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)