Hallo,
durch die analog und DVB-T Abschaltung gibt es haufenweise alte
TV-Karten. Die meisten haben einem Conexant Fusion BT878-A Chip (Win95
Zeit). Dieser ist jedoch noch kein Schrott! Man kann die alten Karten
als ADC / 24-Pin-GPIO oder als 4x FBAS Capture Card weiterverwenden. Die
IOs sind dabei so schnell, dass man einen modernen DVB-Tuner (parallel
über 8 Bits) daran anschließen kann. Das habe ich nun getan.
1
[ 20.602543] bttv: driver version 0.9.19 loaded
2
[ 20.602546] bttv: using 8 buffers with 2080k (520 pages) each for capture
Ich habe den Pollin-VDR-Receiver-Tuner mit TDA10023 eingebaut. Nun hat
die Karte noch die alte "Kennung" drinnen, und es ist im SourceCode und
dmesg ersichtlich, wie die Karte gefunden wird: [0x11822] Er läd die DVB
Module und geht noch von DVB-T aus.
Hier müsste ich etwas ändern.
Zur Karte: Der BT878 hat einen I2C, an dem wiederum ein Mikrocontroller
hängt - von dem aus geht dann ein I2C zu einem Flash-Rom, und ein
weiterer unabhängiger I2C zum Tuner. Da wurde also eine Art I2C-Router /
Hub / Konverter eingebaut. Vermutung: Scheinbar hat der "Twinhan DST +
clones" Treiber für den Hersteller gut funktioniert, so dass die
I2C-Tuner-Initialisierung und Sender-Umschaltung über den weiteren µC
gehandelt wird, ohne extra weitere (andere) Module laden zu müssen,
damit es "Plug&Play" bleibt... Es ist nicht mal diese "Twinhan" Karte.
Vorher war ein NXT6000 (DVB-T) Tuner drauf.
Ich habe als erstes den neuen Tuner-I2C parallel zum BT878 und den
Mikrocontroller geschalten. Es konnte dann kein DVB mehr gefunden
werden. :-)
Kann mir jemand etwas dazu schreiben?
Braucht der BT878 unbedingt ein ROM? Kann ich den Tuner / TDA10023
direkt mit den I2C des BT878 verbinden, und den "überflüssigen"
Microcontroller dazwischen entfernen?? Könnte der BT878 den Tuner über
ein Linux-Treiber-Modul SELBER (ohne µC dazwischen) ansprechen?? Das
Modul kenne ich noch vom Pollin VDR Receiver, allerdings habe ich ja
kein "richtiges" I2C, sondern erst über BT878. Noch kommt die Meldung:
'bttv: 0: tuner absent', was wohl so viel heißt wie: Kein Tuner.
Vielleicht gehe ich die Sache auch falsch an.
Für ein paar Tipps wäre ich sehr dankbar!... Entgegen der
Wegwerfgesellschaft. Und Sorry falls der Beitrag besser zu "µC &
Elektronik" oder einen anderen Bereich passt - war mir nicht sicher...
Ich hab hier noch ne Pinnacle PCTV-SAT im täglichen Einsatz (Bt878 +
cx24110).
Der Bt8xx hat keine eigene Intelligenz. Die "RISC"-Code ist nur ne
etwas bessere Scatter-Gather-DMA-Unit - der Code wird dynamisch vom Host
erstellt und vom Bt8xx per DMA aus dem normalen Host-RAM gelesen.
Eigenes RAM/ROM (außer ein paar FIFOs) hat der Bt8xx nicht.
Die i2c-Schnittstelle ist rein für die Benutzung vom Host - der Chip
selbst nutzt sie nicht.
Die mir bekannten DVB-Karten mit Bt8xx nutzen den nur als
PCI-DMA-Interface. Dazu schicken sie die DVB-Pakete über den
unabhängigen parallelen 8-Bit Port des Bt8xx (an sich für digitales
Audio gedacht), der sie dann per DMA in den Speicher schreibt. Der
gesamte Video-Teil liegt entweder brach oder, wie bei meiner PCTV-SAT,
ist normal wie bei ner analogen TV-Karte beschaltet (ich kann also z.B.
DVB und Video-In gleichzeitig nutzen).
Die gesamte Logik, welcher Frontend/Tuner auf welcher Karten vorhanden
ist und wie der angesprochen wird, steckt im bt8xx-Treiber des Kernels.
Da der Chip mal sehr beliebt war, gibt es Myriaden von Kombinationen und
entsprechend ist der Treiber nen ziemlicher Wust ...
Ach so,
> Kann ich den Tuner / TDA10023 direkt mit den I2C des BT878> verbinden, und den "überflüssigen" Microcontroller dazwischen> entfernen?? Könnte der BT878 den Tuner über ein Linux-Treiber-> Modul SELBER (ohne µC dazwischen) ansprechen??
Ich kenn den TDA10023 nicht, aber mein cx24110 z.B. hängt direkt am
i2c-Bus und wird vom Host gesteuert. Nen zusätzlicher Mikrocontroller
ist auf der Karte nicht drauf. Iirc war das bei vielen Karten so -
insbesondere bei den "passiven" ohne MPEG-Decodern.
Wow super vielen Dank für die Infos...
foobar schrieb:> Dazu schicken sie die DVB-Pakete über den> unabhängigen parallelen 8-Bit Port des Bt8xx (an sich für digitales> Audio gedacht),
OK das war der "Schritt" den ich gebraucht habe. Die Tuner-Clock geht
hier (auch) in die Audio-L/R-Frame-"Clock" rein, was mich sehr
verwundert hat. Daten sind an GPIO 8-15. Dann werde ich als nächstes mal
den µC entfernen, und den Tuner direkt an den I2C hängen! Danke.
Korrektur:
> Der BT878 hat einen I2C, an dem wiederum ein Mikrocontroller> hängt - von dem aus geht dann DER SELBE I2C zu einem Flash-Rom, und ein> weiterer unabhängiger I2C zum Tuner.
1
BT878 ---> ROM
2
|
3
---> µC ---> Tuner
Nun ist der µC weg!
1
BT878 ---> ROM
2
|
3
---> Tuner
Der I2C von Tuner hängt wieder am BT878 parallel zum ROM! Es konnte
dieses mal sogar ein DVB gefunden werden - (demux0 dvr0 net0) es fehlt
nur "frontend0" was dann wohl der TDA10023 ist!!? Die "Kennung" wird
weiterhin vom ROM geliefert: 0x11822, und entsprechend will der wieder
irgendwas "Twinhan" mäßiges laden, schafft es aber nicht mehr:
1
[ 21.235549] bttv: driver version 0.9.19 loaded
2
[ 21.235552] bttv: using 8 buffers with 2080k (520 pages) each for capture
[ 22.090755] dvb_bt8xx: frontend_init: Could not find a Twinhan DST
Als nächstes dieses ROM entfernen???
Ich habe folgende Pins vom Tuner noch nicht angeschlossen, mangels
Pinout und Zuordnung:
-RST / Reset
-MPEG_DATA_VAL
-MPEG_PKT_SYNC
-MPEG_ERR
-NIM Adress Select
Das muss teilweise noch an weitere GPIOs ran. Lässt sich vom LOG oder
Treiber rauslesen, welche Pins am BT878 dafür verwendet werden? Leider
habe ich kein Datenblatt vom alten Tuner (DVBT-6K178P1T 052280519
NXT6000) finden können, sonnst wäre es ja einfach zu übernehmen :-) Drei
"geroutete" GPIOs sind noch "frei" am "footprint" (THD) vom alten Tuner.
Ich bleib dran...
Was ihr da macht klingt interessant.
Euren Versuchsaufbau würde ich gerne mal sehen, wenn es da etwas zu
sehen gibt.
Ich habe noch eine alte Hauppauge WinTV Theater mit BT878 Chipsatz, das
war eine der ersten dieses Modells. Ich weiß allerdings nicht mehr wann
ich die gekauft habe, eventuell war das 1997.
Wenn ich mich nicht irre, dann hatte die noch einen MSP430 µC onboard,
aber da bin ich mir nicht sicher. Ich weiß nur, dass ich mal eine TV
Karte mit einem solchen µC hatte.
Es könnte aber auch eine DVB-T Karte sein, die ich mir später gekauft
habe, als der analoge terrestrisches TV Senderempfang abgeschalten und
durch DVB-T ersetzt wurde.
Nano schrieb:> Es könnte aber auch eine DVB-T Karte sein, die ich mir später gekauft> habe, als der analoge terrestrisches TV Senderempfang abgeschalten und> durch DVB-T ersetzt wurde.
Also das mit dem onboard MPS430.
Nano schrieb:> Versuchsaufbau würde ich gerne mal sehen
Die Spannungen kann ich auf der Karte gut selbst erzeugen. (Widerstand
Quer nach Masse, zum Anpassen einer Rail von 2,5V auf 1,8V) Die
"Einschaltsequenz" der einzelnen Spannungen, wie sie jemand anderer im
Forum an diesen Tuner implementiert hat, fehlt mir komplett. Bedingt
durch die "hintereinander geschalteten" Linear-Regler passiert das fast
"automatisch" in Hardware. (5V muss stehen und das andere zieht etwas
nach) Da muss ich aber eventuell nochmal "eingreifen", falls es nicht
reicht, und falls die Spannungen im Tuner nen "latchup" verursachen.
Ich habe die Stelle des "rausgerupften" µC noch nicht gereinigt.
Schrecklich!!! Die Leitungen am Pollin-Board sind "original" etwas
länger, dafür aber besser geschirmt und isoliert... Das ROM ist noch
drauf.
<Optional>
Es stehen zwei graue Drähte nach oben ab, das ist
-RST / Reset und
-NIM Adress Select
Die drei grauen Leitungen mittig / rechts sind die:
-MPEG_DATA_VAL
-MPEG_PKT_SYNC
-MPEG_ERR
welche momentan einfach "irgendwo" hängen.
Die beiden grauen Drähte rechts, die nach unten wandern sind I2C.
</Optional>
Kleiner Tipp: Die Tuner sind echt schwer raus zu löten, ohne dabei was
zu zerstören. Mit nem Dremel und ner Trennscheibe kann man die einzelnen
Verbindungen gut trennen, und die "halben" abgetrennten Pins als "Steg"
zum Drähte anlöten verwenden. Schrumpfschlauch später...
Nano schrieb:> Also das mit dem onboard MPS430.
Hier "war" es ein SyncMos SM8952A @12MHz - 8052 kompatibel.
Der bedient hier nur 2x I2C (wie beschrieben) und dieses "Auflöt-Modul"
was hier fehlt - Ich denke der µC dient weiterhin dazu irgend ein
Singnal auf "Anwesenheit" zu erkennen - aber die ganze Bestückung und
Beschaltung dazu fehlt. Es "endet" an 2 Klinkenbuchsen (Analog IN?) und
1x Chinchbuchse (Digital IN?) (unbestückt)
Tim S. schrieb:> welche momentan einfach "irgendwo" hängen.
Kann mir jemand sagen welche weiteren Pins des Tuners notwenig sind?
Insbesondere mit dem
> -MPEG_DATA_VAL> -MPEG_PKT_SYNC> -MPEG_ERR
Und kann jemand auf seiner Karte "herausfinden" wo Reset angeschlossen
wurde? Ich hänge als nächstes eine RGB-LED an die
> drei GPIOs am "footprint" (THD) vom alten Tuner
um es heraus zu finden!
> Als nächstes dieses ROM entfernen???
Ich habe gerade noch mal nachgeschaut: der 878 (im Gegensatz zum 848)
liest nach einem PCI-Reset aus dem i2c-EEPROM (falls vorhanden; ein
24c02, Addr 0x50) die Subsystem-ID und die Subsystem-Vendor-ID aus (4
Bytes ab Addr 0xfc), die dann später im PCI-Config-Header erscheinen.
Außerdem unterstützt er PCI-VPD (vital product data) und nutzt dafür das
PROM.
Nötig ist es also nicht. Der bttv-Treiber weiß dann aber nicht, um was
für ein Board es sich handelt und muß von Hand konfiguriert werden.
Danke für die Infos. Ich hab die beiden I2C Pins mal "hochgehebelt",
damit es ohne Rom Booten kann. Sonnst keine Änderungen. Aber es bootet
nicht: Kernel-Panic "Not all CPUs in Sync" oder so - Er resettet sich
dann nach 30 Sekunden. Das passiert jetzt IMMER wenn die Karte steckt.
Also auch wieder mit ROM. Vielleicht hab ich den BT878 "zerstört", und
das ganze liegt erst mal wieder auf Eis! määh Ich löte den Tuner mal
runter, und schau dass er mit Karte bootet und gugg was ihm grade nicht
passt. häng
Nääh will nicht mehr, Karte ist kaputt :-(
Kernel panic - not syncing: Timeout: Not all CPUs entered broadcast
exception handler
Shutting down cpus with NMI.
Ich muss wieder aufgeben, schade eigentlich! Sobald ich nochmal eine
Karte mit BT878 vom Müll "retten" konnte gehts weiter.
Tim S. schrieb:> Mit nem Dremel und ner Trennscheibe kann man die einzelnen> Verbindungen gut trennen, und die "halben" abgetrennten Pins als "Steg"> zum Drähte anlöten verwenden.
Alles nicht optimal. Man muss den Tuner öffnen, um den Metall-Span und
Trennscheiben-Staub wieder abzuwaschen. (Hatte ich natürlich getan!)
Naja bis zum nächsten mal :-)
Schade, ich fand das Projekt interessant - auch wenn der PCI-Slot ansich
bereits in den Schrott-Abgrund hineinschaut.
Ich schaue mal ob ich noch eine Karte mit BT878 in der Restekiste habe.
foobar schrieb:> Evtl auch mal schauen, ob nicht ein Span im PCI-Slot gelandet ist ...
LÖL Quatsch! Hier ist es sauber! Ich habe es heraus geflext, weil die
Lötaugen und Leiterbahnen im Tuner extrem dünn und "filigran" sind, und
weil ich die Pollin-Platine nicht zerstören will. Man braucht sehr viel
Hitze, und auslöten würde die Leiterplatte oder den Tuner beschädigen!
Ich hab es mit meinen Mitteln jedenfalls nicht geschafft. Daher radikal
abflexen!
Ben B. schrieb:> auch wenn der PCI-Slot ansich> bereits in den Schrott-Abgrund hineinschaut.
Weiß jemand ob die PCI-Express auf PCI-Parallel Brücken-Chips auch die
"DMA-Transfers" gescheid handeln? Der BT878 ist ja voll abhängig
davon... Habe "Sachen" gehört, wie dass es angeblich nicht immer
funktioniert.
Offtopic1: Es gab mal die Audigy4 (pro) PCI. Geiles Teil. Danach kamen
die Audigy-Xfi für PCI-Express. Bis auf ein- zwei Modelle pure
Ramschware!! Und jetzt: Der GLEICHE Audigy4-PCI-Chip von damals wird
wieder NEU verkauft, mit vorgeschalteter PCI-Express-Brücke. Aber gut
dass ich die "Orginal-PCI-Version" immer noch eingebaut habe. Sie ist
"schneller" und latenzarmer, als die neu aufgelegte Version. Ähnliches
kann ich mir beim BT878 auch vorstellen, was ja bereits für die
DVB-Karten "halb" passiert ist, obwohl es ein Uhr-alter IC ist, der
hauptsächlich wegen seinen ADCs benutzt wurde, was bei DVB natürlich
vollkommen EGAL ist... Warum: Weil es über seine "nebensächlichen" GPIOs
trotzdem funktioniert! Der IC ist über 20! Jahre alt. Aber Was will man
mehr??? :Offtopic1
Offtopic2: Mal was anderes:
https://www.pollin.de/p/dvb-tv-mhat-raspberry-pi-foundation-810942?&gclid=EAIaIQobChMIgJSG1Izf5AIVBeR3Ch37bwDnEAQYBCABEgIpNvD_BwE
Leider nur DVB-T. Gehen die über I2S rein? Ganz seriell? Das kann der
Pollin/Phillips-Tuner ja "auch" im Serial-Mode mit der Data0-Line, oder?
Vielleicht ist Rasperris I2S auch schnell genug für DVB-C!? :Offtopic2
Ich mach auf jeden Fall weiter.
Weil das Pollin Board mit seinen +40 ICs und dem ganzen Analog-Kram
zieht echt sehr viel Strom!
Tim S. schrieb:> Weiß jemand ob die PCI-Express auf PCI-Parallel Brücken-Chips auch die> "DMA-Transfers" gescheid handeln?
Auf dem PCI-Bus werden Bursts in Echtzeit verarbeitet; PCI-Express
benutzt Pakete (mit großer Bandbreite, aber relativ hoher Latenz). Das
wird zu einem Problem, wenn ein PCI-Busmaster einen Lesezugriff aus dem
Hauptspeicher startet, und die Brücke noch nicht weiß, wie viele Bytes
sie anfordern soll. Die Brücke muss da ordentlich prefetchen und cachen.
> Der BT878 ist ja voll abhängig davon...
Aber er liest nicht, er schreibt.
>> Der BT878 ist ja voll abhängig davon...>> Aber er liest nicht, er schreibt.
Er tut beides, liest den RISC-Code, schreibt Daten.
Mein Board hat ne PCIe-to-PCI-Bridge (ASMedia ASM1083/1085) und ich
hatte zu viele Underflows. Ist alles schon ne Weile her (ca 8 Jahre),
aber so weit ich mich erinnere, habe ich etwas an den
Latency-Einstellungen rumgespielt und ein paar zusätzliche ReSyncs im
RISC-Code eingefügt. Hat ein (auch heute noch) zufriedenstellendes
Ergebnis geliefert.
Iirc hatte auch der vorherige Rechner kleine DMA-Probleme mit dem Bt8xx
- da war's aber beim Schreiben. Keine Ahnung, wie da der PCI-Bus
angebunden war. Was wohl immer problematisch war: mehrere Bt8xx-Karten
in einem System - da wurde regelmäßig die verfügbare Bandbreite
überschritten.
Ersteinmal Danke für die Bilder.
Tim S. schrieb:> Man kann die alten Karten> als ADC / 24-Pin-GPIO oder als 4x FBAS Capture Card weiterverwenden.
Ich habe mir gerade mal das Functional Block Diagram des Bt878
Datasheets angesehen.
Siehe:
http://pvr.sourceforge.net/Bt878.pdf
Wenn man den S-Video Eingang nimmt, dann kommen nach dem 40 MHz ADC und
vor dem GPIO noch ein "Decimation LPF" und eine "Video Decode & Scaling"
Einheit. Stört diese nicht, wenn man den Chip nur als ADC betreiben
möchte oder habe ich dich da falsch verstanden?
Ach so okay, schade und danke für den Link.
Laut verlinktem Text geht damit folgendes:
"The analog input offers 360 kHz usable BW at 8 effective bits or 100kHz
usable BW at 12 effective bits. The digital input offers up to 20 Mbps
for the parallel mode and 40 Mbps for the serial mode."
Es ist somit ein bisschen besser als mit einer normalen Soundkarte, aber
da lohnt sich dann aus meiner Sicht kaum der Aufwand.
Im Linux Kernel gibt es einen Treiber "bt8xxgpio" CONFIG_GPIO_BT8XX, der
die GPIO-Pins des BT878 dem Linux-GPIO-Subsystem (auch sysfs)
bereitstellt.
Zum Aktivieren des Treibers muss CONFIG_VIDEO_BT848 deaktiviert werden
(n).