Printable Version available here (Word)

Werbung
MICS Projekt
Entwicklung eines MP3 Modul
zum BTnode
2
0. Inhaltverzeichnis

1. Einführung - Motivation
o
o
o
o
o
o
o

1.1 Music und Lerm in unserem Leben
1.2 Vision über die zukunftige Gesellschaft
1.3 Die Idee des BTnode
1.4 Die Schwierigkeiten und Risiko von Verteilung
1.5 Zwei Worte über MP3...
1.6 ... und zwei über Bluetooth
1.7 Und zwei Worte über den Autor
2. Vor die Realisierung
o
2.1 Was schon am Anfang gab


o
2.2 Was zu machen war


o
2.2.1 In Hardware
2.2.2 In Softawre
2.3 Werkzeuge und Programme





2.1.1 Die MP3 PCB rev 1
2.1.2 Der BTnode und seine Systemsoftware
2.3.1 Der MAS3587F
2.3.2 Der Atmega
2.3.3 Die Programme
2.3.4 Sonstiges
3. Was gemacht worden ist
o
o
3.1 Arbeitsplan
3.2 Erster Teil : Ansatz



o
3.3 Zweiter Teil : Grundarbeit





Mp3 für Btnode
3.2.1 Test des PCB rev 1.0
3.2.2 Test des BTnode mit Atmel
3.2.3 Bluetooth-Stack auf dem PC
3.3.1 I2C interface
3.3.2 Board rev 2
3.3.3 Erste Tests : Antwortet der MAS ? Funktionniert I2C ?
3.3.4 Konfiguration des MAS
3.3.5 Herunterladen von Musik zum BTnode; die Speicherfrage
Oktober 2003
Sébastien Rumley
3
o
3.4 Drittes Teil : Ausarbeitung







4. Resultaten
o
o
o

4.1 Hardware-Schnitstelle
4.2 Software-Schnitstelle
4.3 Weitere Probleme
5. Konklusion
o
o
o
o

3.4.1 Die parallele verbungung
3.4.2 Die Bedienungen des MAS / des BTstack
3.4.3 Der "Application Level" Protocol / TCP-like
3.4.4 Die serielle Verbindung
3.4.5 Der zweite Protokol : UDP-like
3.4.6 Board rev 3
5.1 Was gelernt worden ist
5.2 Btnode, super aber trotzdem begrentzt
5.3 Die mögliche Fortsetzungen
5.4 Dank
6. Anhänge
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
4
1. Einführung und Motivierungen
1.1 Music und Lärm in unserem Leben
Weil wir meistens bei der Sprache kommunizieren, hat der Ton seit mehrere Jahrtausend immer eine Hauptplatz
gehabt. Ab Anfang diesem Jahrhundert, dank der modernen Entwicklung von Radio, Phonographen, und später
auch Audio Kassette, FM Radio, CD, ist er dann noch wichtiger geworden. Jede von uns kann jetzt seine
Lieblingsmusik ungefähr wo er will und wenn er will hören. Fast alles, was ein bisschen wichtig ist, ist heute
nicht nur wörtlich wieder abgeschrieben, aber auch als sonore Erfassung bewahret.
Aber seit zehn Jahre, kann man beobachten, dass etwas neu erschienen ist. Dank der wichtigen
wissenschaftlichen Fortschritte, werden die vorgesagte sonore Erfassung noch auch analysiert oder komprimiert,
dann weltweit oder lokal geteilt, und endlich irgendwo zu etwas anderem vergleichet oder einfach gespeichert.
Die wissenschaftliche Fortschritte kommen von mehrere Fächer: Erstens sind die Algorithmen, die den Ton
verarbeiten, viel effizienter geworden. Die werden noch effizienter, weil die Computer, auf den diese
Programmen laufen, rechnen immer schneller. Zweitens, kann man jetzt ohne Schwierigkeiten ein Terabyte
Daten speichern, d.h ca. kann man 1400 Stunde = 2 Monate von Musik oder Ton ohne Kompression speichern
(in CD Qualität). Wenn man noch diese Dateien komprimiert, und man die Qualität verkleinert, kann man diese
Dauer bei 24 multiplizieren, und dieser Weise während 4 Jahre nonstop recorden. Drittens, wegen der Erhöhung
der Kapazitäten der Internet, ist es jetzt einfach, Musik oder Sprache zu transportieren, and zu teilen.
Obwohl ist alles das für jeden möglich, muss man jetzt dafür ein Computer verwalten. Ein Computer, mit seinem
Schirm, Tastatur, Mäuse, seine hässliche Kabeln. Ein Computer, den man starten, installieren, konfigurieren usw
muss. Ein Computer kostet ungefähr zehn mal weniger als ein Auto, so kann jede sich ein leisten. Aber hat er
Zeit, es zu verwalten? Das ist eine andere Frage. Wegen diesem Problem, kann man sagen, dass die Fortschritte,
ausser ein Paar Leute (Studenten, Informatiker), noch unbekannt sind.
1.2 Vision über die zukunftige Gesellschaft
Völlig unbekannt? Trotzdem nicht! Die mp3 ist seit ein Paar Jahre in unsere Gesellschaft eingetreten. Die Pocket
CD-Player können oft auch CD-ROM lesen, wo MP3 Files stehen. Es gibt auch diese kleine MP3 Player (iPod,
Rio, etc), die mit oder ohne Festplatte sind, auf den man von 1 bis zu mehrere hundert Stunden speichern kann.
Aber meistens, um diese Geräte zu laden, braucht man noch einmal irgendwann ein Computer.
Neu sind auch diese eBucher, die fast wie ein Buch sich präsentieren, die aber kein Papier enthalten. Man
braucht nur einmal, dieses Buch zu programmieren, und dazu braucht man ein Computer. Warum ist der
Computer so wichtig? Weil ein Computer vollständig ist. Er ist kräftig, und relativ leicht zu programmieren, so
kann er ungefähr alles machen. Er hat viele Interfaces (Benutzer Interfaces: Mäuse, Tastatur, Bildschirm,
sondern auch logische Interfaces, die erlauben, mit anderen Geräten zu kommunizieren).
Trotzdem kann man sehen, dass eine neue Tendenz erscheint. Die Hersteller von Geräten, die zur Zeit ein
Computer erfordern, haben gut gesehen, dass jenseits einer bestimmten Quote, niemand mehr kauft diese Geräte,
weil diese Leute keine Lust haben, ein Computer zu benutzen. Um dieses Problem umzugehen, müssen die
Hersteller immer mehr in ihren Geräten Teile einfügen, die zuvor nur zum PC waren. Das bestes Beispiel dafür,
sind die mobile Telefonen. Man muss sagen, dass die am Anfang begünstigt waren. Um die Wellen zu
analysieren und zu decodieren, braucht man ziemlich viel Rechungmachte. Ein Telefon braucht auch ein
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
5
Userinterface, und endlich, kann er bei Definition kommunizieren. Ein Handy ist also ein kleiner Computer.
Anfangs waren die Handy nur für ernste Leute, sie mussten denn einfach und ernst sein. Aber jetzt, wo jede
einen Handy besitzt, haben die Designer die Kapazitäten den Handys verbracht, und nämlich kann jetzt ein
mobile Telefon viele Sache machen, ohne ein Computer zu erfordern.
Was ist genau die vorgesagte Tendenz? Einfach ein bisschen von Rechungsfähigkeiten, von
Datenumtauschfähigkeiten und von Userinterface hinzusetzen. Sobald man das in einem Gerät hat, darf man fast
alles machen. Die Vorrichtung kann die Userbefehle interpretieren, er kann sich zu Internet verbinden oder zu
den anderen Geräten, die in der Nähe stehen (natürlich muss man auch dafür ein Paar Software schreiben, aber
es ist möglich). Dafür braucht man kein Computer mehr, oder mindestens kein Computer, wie man davon
angewohnt ist. Man kann denken an eines "Access Point", der Internet lokal teilt, sodass die kleine Geräte leicht
auf Internet gehen. Aber dieses "Access Point" muss man weder konfigurieren noch jedes Mal starten.
Kurz gesagt, die Hauptidee ist einerseits, die Daten wo man es braucht zu verarbeiten. Anderseits, diese
Verteilung die Rechungen durch transparente Verbindungen erleichtern. In einem Wort: Ubiquity.
1.3 Die Idee des BTnode
Der BTnode, mit dem man arbeiten wird, ist in dieser Richtung gedacht worden. Mit seinem Mikrocontroller, ist
er fähig, in Ermangelung von letzte 3D spiele oder Windows 2000 zu führen, die Benutzeraktionen zu
bekommen, zu analysieren, die richtige Reaktionen zu starten. Weil er "General purpose ist", kann er
verschiedene Interfaces implementieren. Mit seinem Bluetooth Modul, ist er fähig, mit die Nähung zu
kommunizieren, und das eben drahtlos. Und man konnte denken, das er eine Einfache Userinterface
kontrollieren könnte (LCD Bildschirm, Knöpfe, usw.)
Die Bluetooth Modul, die auf dem Btnode liegt. Gar nicht gross...
Der Btnode ist ungefähr der kleinste "Node", der alles machen kann. Er kann als Temperatursensor, als
Bewegungssensor, als Tonsensor, sondern auch als MP3 player (was war hier gemacht worden ist), oder als
Kühlschrank Kontroller verwendet werden. Es ist sicher möglich, mehrere Btnode miteinander kommunizieren
zu machen, so dass sie die Information mitteilen. Während sind alle ausser eins als bevor gesagt verwendet, ist
der letzt als Benutzerterminal benutz. Er ist dafür mit einem Bildschirm verbunden, und er bekommt von allen
anderen Btnoden (direkt oder undirekt) die Informationen, die er zeigen muss. Kauft oder bekommt man ein
neues Gerät, das damit kompatibel ist, geht es natürlich weiter, und werden die Informationen des neuen Geräts
auch verteilt.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
6
1.4 Die Schwierigkeiten und Risiko von Verteilung
Die Verteilung ist trotzdem nicht trivial. Man findet viele Probleme, die man normalerweise nicht findet. Wird
ein Btnode ausfallen? Weil alles so gemacht worden ist, soll alles noch funktionieren. Aber man muss dafür
Ausfallalgorithmen designen. Die Schwierigkeiten kommen auf jede Stufe: Durch Lokalisierung muss man eine
Topologie erzeugen und ein Netzwerk bauen. Dann kann man die Daten übertragen, aber man muss sich
beachten: zuviel Daten wird das Netzwerk sättigen. Und was für Daten muss man verteilen. Und wenn? Und zu
wem? Und stimmen die empfangene Dateien? Das sind so viele Probleme, über die viele Leute arbeiten, in die
Unis, in den Laboren, in die Firmen...
Man muss auch sich auf die Privatlebensprobleme und auf das Intellektuelle Eigentum. Jede Sensor soll nicht ein
Spion sein. Möchten wir dass es überall Geräte gibt, die unseres Leben analysieren, und teilen. Jetzt ist es schon
möglich, leicht Photos zu nehmen, und die quasimomentan auf Internet zu stellen. Ist es normal ? Es ist auch
sicher illegal, Kommerzielle Musik stücken unterzuladen, es zu speichern, usw. Aber das ist vielleicht mehr ein
Jurafrage. Man muss trotzdem aufmerksam sein, dass die vorgesagte Fortschritte eine zu gross Vorsprung auf
das Gesetz haben.
1.5 Zwei Worte über MP3...
Die Geschichte von MP3 fängt 1987 an, am Fraunhofer Institut für Integrierte Schaltungen in Deutschland. Dort
sollte Dieter Seitzer und seine Gruppe eine Methode erzeugen, die Ton komprimiert, gegründet auf "Perceptual
Audio Coding". Das bedeutet, dass alles, was das menschliche Gehör nicht hört, nicht codiert oder nur in sehr
schlechter Qualität codiert wird. Man könnte unter anderem dieses Beispiel anführen: Wenn ein Zug vorbeifährt
und gleichzeitig singt ein Vogel, wird man den Vögel nicht hören. Der Algorithmus wird das erkennen und den
Gesang entfernen. Auch die Frequenzen, die man nicht hören kann (hoch oder tief), werden entfernt.
Grundsätzlich wird der Algorithmus eine Fourrier-Transformation durchführen und nur ein paar Frequenzen
codieren. Danach wird er eine normale statistische Kompression durchführen. Man kann verschiedene
Kompressionsraten anwenden, von 32 kbps bis zu 320 kbps (meistens 128 kbps, kilobits pro Sekunde). Eine
Minute Musik, auf 128 kbps komprimiert, nimmt ungefähr 1 Megabyte Platz ein, das heisst eine Ersparnis des
10 bis 12-fachen. Und schon mit 128 kbps kommt man auf CD-Qualität. Mit anderen Worten, es ist jetzt
möglich, mit einer 16 kB/s-Internetverbindung, Musik live aus dem Internet zu hören. Es ist auch möglich, mehr
als tausend Stunden Musik auf einer 80 Gigabyte Festplatte zu speichern.
1992 wurde die Fraunhofer-Technik bei die MPEG (Moving Picture Experts Group) Gruppe angenommen, und
trägt seither den Namen "Mpeg Layer 3". Layer 3, weil es vorher zwei andere Wege gab, Ton zu komprimieren.
MP3 wurde für effiziente Übertragung entwickelt, deshalb trägt es keinen Copyrightschutz. Eigentlich sollte es
nur für Videostreaming benutzt werden, unter einem Lizenzsystem (wie Dolby Digital). Aber dank vielen
unabhängigen Entwicklern hat MP3 diesen Rahmen gesprengt und ist jetzt fast "public domain software". Da
MP3 jetzt fast überall ist, kann man leicht einen MP3-Player für den PC herunterladen oder einen Taschen-MP3Player kaufen.
Zur Zeit wird das MP4 Format entwickelt. Diesmal mit Datenschutzmechanismus und Copyrightverwaltung.
Aber ist es nicht zu spät?
1.6 ... und zwei über Bluetooth
Während des zehnten Jahrhunderts hat Harald Blaatand Dänemark und Norwegen vereint. Blaatand bedeutet
"Blauezahn", auf Englisch "Bluetooth". Die Entwickler dieser Technologie (IBM, Intel, Eriksson, Nokia
undToshiba) haben sich daran angelehnt...
Unser Bluetooth wird nicht die Wikinger einen, sondern Peripheriegeräte und damit auch Protokollen und
Verbindungen. Mit dieser Technologie können jetzt bis 8 Geräte in einem Umkreis von zehn Metern, manchmal
mehr, miteinander kommunizieren. Die Idee war, dass mehr und mehr Komponenten miteinander
kommunizieren müssen, aber dass es aufwendig ist, alle per Kabel zu verbinden (und nicht nur mit einem
Kabel...). Oft möchte man an den Computer anschliessen:

Mouse
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
7







Tastatur
Drucker
PDA
Fotoapparat
Handy
Laptop
Einen zweiten Computer
Ein USB Dongle, die Bluetooth leistet. Hinter "Acer" kann man die Radio Modul erblicken.
Alle diese Komponenten kann man sicher mit USB verbindet, aber das bedeutet, einen Hub zu kaufen und noch
zusätzliche Kabel zu verwenden. Weil Computer immer leichter werden und einfach zu transportieren sein
müssen, ist die drahtlos Lösung die Beste.
Alles sollte auch so eingerichtet sein, dass es für den Benutzer transparent wird. USB ist insofern nicht einfach,
weil ein Kabel zwei und genau zwei Geräte miteinander verbindet. Ohne Draht ist jedes Gerät praktisch mit allen
anderen verbunden. Das bedeutet, dass sich hinter Bluetooth ein komplexer Mechanismus verbirgt, der die
Frequenzen allokiert, die Adressierung vornimmt und der weiss, wie viele Peripheriegeräte in der Nähe sind
usw. Wenn ein neues Gerät eingeschaltet wird, muss es der Gruppe sagen, was es tut und wie viel Bandbreite es
dafür braucht. Dann können die Daten hin und her gesendet werden.
Um Bluetooth zu benutzen benötigt man keine Lizenz. Man kann leicht Bluetooth-Hardwaremodule kaufen. Es
gibt drei Modi: synchron 2x 432 kbps, synchron 2x 64 kbps, oder 721 kbps in einer Richtung, 57 kbps in der
anderen. Tatsächlich kann man ungefähr 300 kpbs benutzen. Klein, sparsam, aber funktionell: das ist, was wir
brauchen!
Dieses Gerät kommuniziert mit einem Handy bei Bluetooth
Man muss vielleicht hier auch über Wi-Fi sprechen. Während Bluetooth für Verbindungen zwischen Computer
und Peripheriegeräte, die jetzt mit Kabel funktionieren, entworfen worden ist, ist Wi-Fi eigentlich nur für
Networking entworfen. Die Reichweite ist grösser, die Bandbreite auch, aber Wi-Fi enthält viel weniger
Mechanismen als Bluetooth, um besonders die oberen Protokollschichten zu unterstützen.
1.7 Und zwei Worte über den Autor
Sébastien Rumley ist ein Student der ETHL, wo er Kommunikationssysteme studiert. Dort hat er, als
Semesterarbeit, schon ein anderes Projekt mit MP3 durchgeführt. Weil MP3 sehr wichtig ist für die aktuelle und
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
8
zukünftige Kommunikationen, ist er sehr daran interessiert. Nach einem Jahr in Zürich, wo er an der
Informatikabteilung studiert hat, hat er mit diesem Projekt angefangen.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
9
2. Vor der Realisierung
2.1 Was es schon am Anfang gab
Die Realisierung dieses Projekts baut auf anderen auf. Der BTnode existiert seit August 2002. Mit ihm wurden
schon viele verschiedene Sachen entwickelt. Für den BTnode gibt es eine Entwicklungsumgebung und eine
minimale Systemsoftware. Über MP3 wurde schon oben geschrieben. Luc-André Burdet hatte im Juli schon die
Revision 1.0 des PCB (Printed Composite Board) gemacht.
Die PCB rev 1. Ohne Komponente
2.1.1 Das MP3 PCB rev 1
Die Revision 1.0 sollte alles, was man brauchte, enthalten. Leider gab es Fehler im Design, und es war leider
nicht möglich, diese Fehler zu korrigieren (z.B. mit externen Drähte). Ein solches PCB ist trotzdem hergestellt
worden. Damit wurde getestet, ob und wie I2C funktionierte.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
10
Die PCB rev 1. Wo der Rote Pfeil sich endet hat man versucht, ohne Erfolg, den MAS wegzunehmen
2.1.2 Der BTnode und seine Systemsoftware
Der BTnode ist einfach ein kleines PCB mit:






Einem Mikrokontroller, dem Atmel 128L (siehe unten)
Stromversorgung
Ein 256kB RAM Chip
Ein Bluetooth Modul
Sechs Molex Stecker, die 24 I/O-Ports anbieten.
4 LEDs und ein Reset Button.
Der Btnode
Um die Entwicklung für die "BTnode platform" zu beschleunigen, wurde eine kleine Systemsoftware entwickelt.
Sie implementiert "cooperative mutlitasking", was sehr nützlich ist. Man kann nämlich die Bluetooth-Daten
nicht nur mit Interrupts verarbeiten und es ist schwer, einen Bluetooth-Stack Selbst zu programmieren. Neben
dieser Systemsoftware findet man mehrere Subroutinen für verschiedene Gebiete: Timer und Zeitverwaltung,
UART für ein Feedback zum PC usw.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
11
Siehe mehr darüber unter
http://www.inf.ethz.ch/vs/res/proj/smart-its/btnode.html#sw
Auf der selben Seite gibt es Informationen, um die Btnode Tools und Systemsoftware zu unterladen.
2.2 Was zu machen war
2.2.1 In Hardware
Auf der Hardwareseite sollte man: Ein neues PCB entwerfen, das die Fehler von rev 1.0 korrigiert. Das heisst,
ein neues Schema zu entwerfen und das Routing durchzuführen. Dann mussten diese neuen PCBs bestückt
werden, elektrische Tests durchführen (ob es Kurzschlüsse gab oder nicht), und endlich die Daten zum Chip zu
senden, über das I2C Interface die Konfigurationsbefehle, und über die parallele oder serielle Verbindung die
Bitstream-Daten. Dafür werden spezielle Fähigkeiten des Atmel benutzt (I2C - TWI, serielle Verbindung).
2.2.2 In Software
Weil die Daten per Bluetooth übertragen werden sollen, benötigt man eine Kombination von Software. Eine
Seite läuft auf dem PC. Dort soll das Programm einen Teil des Bitstreams lesen und regelmässig über Bluetooth
senden. Auf der anderen Seite, am BTnode, soll auch eine Software laufen, die die gesendete Daten empfängt
und im Puffer speichert. Diese Software soll die Konfigurations-Sequenz für den MAS enthalten, und muss sich
auch darum kümmern, regelmässig einige Daten vom Puffer zum MP3 Chip zu senden.
Alles das ist kurz gesagt, aber gar nicht problemlos. Hier liegt nämlich ein [Ordonnacierungsproblem]. Der
interne Puffer des MAS ist nicht gross, deshalb man ihm oft Dateien geben muss. Der Mikrokontroller, der das
macht, kann nebenbei etwas anderes machen, er sollte aber keine zu lange dauernden Arbeiten ausführen, weil
sonst der Puffer des MAS leer würde und man deshalb eine Pause in der Musik hören würde.
Der PC kümmert sich beim Senden der Daten nicht darum, ob der Mikrocontroller gerade Zeit hat, um die Daten
auch zu empfangen. Man sollte sich also bemühen, dem Mikrocontroller nicht zu viele Aufgaben zuzuteilen und
dafür zu sorgen, dass genügend Zeit bleibt, um Daten zu empfangen.
Schliesslich muss man noch wissen, dass eine L2CAP Bluetoothverbindung nicht zuverlässig ist. Pakete können
verloren gehen, ohne dass man dies feststellen kann. Ausserdem verhält sich der Bluetoothstack, sowohl auf dem
BTnode als auch auf dem PC, manchmal besonders und unerwartet (siehe im besonderen die Sektion 3.4.5)
Wenn alle diese Probleme gelöst sind, kann man sich darum kümmern, einige "User Interfaces" zu
implementieren: einen netten PC-Client, zum Beispiel ein Winamp Plug-in, oder eine Schnittstelle direkt am
BTnode mit einigen Knöpfen für Abspielen, Stopp, laut und leise.
2.3 Werkzeuge und Programme
In der Informatik ist es manchmal sehr wichtig, die Dokumentation zu lesen und zu kennen. Man muss auch
seine Werkzeuge ein bisschen kennen. Deshalb geben wir in diesem Bericht eine Beschreibung dieser
Werkzeuge.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
12
2.3.1 Der MAS3587F
Der Hersteller des MAS3587F, Micronas, hat seines Hauptquartier in Zurich und ist in Deutschland und
Österreich vertreten. Er entwickelt Halbleiter, meistens auf den Gebieten Audio, Video, Radio und
Autoausrüstung. Der MAS3587F, der Ende 2001 eingeführt wurde, ist tatsächlich der Rolls-Royce unter den
eingebetteten MP3 Decoder/Encodern. Er ist der Nachfolger und eine Verbesserung des MAS3507D, der schon
im März 2000 erschienen ist, der aber nur den Decoderteil enthält und einen externen DAC verlangt.
Alles im MAS3587F ist gemacht, so dass man nur einen Mikrocontroller braucht, sowie ein bisschen
Speicherplatz und einige Stecker, um einen MP3 Player zu haben. Er besitzt nämlich zwei eingebettete DC/DC
Konverter, die ab 0.9V eine Spannung bis 3.7 Volt erzeugen können. Er kann den Mikrocontroller zurücksetzen.
Er kann Mpeg-1 sowie Mpeg-2 decodieren, und das für jede Bitrate, von 8 bis 384 kbps. Er kann Mp3-Daten
entweder via eine parallele oder via eine serielle Schnittstelle bekommen. Er kann auch einen Line-Input oder
Mikrofon-Eingang mixen. Er enthält auch einen internen DAC.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
13
Aber der MAS3587F kann auch als Encoder arbeiten. Er kann verschiedene Eingänge kodieren: Line-in,
Microphone, PCM Dateien, die zum Beispiel aus einem anderen Chip kommen. Er gibt den erzeugten Bitstream
via parallele Schnittstelle aus.
Der MAS3587F verlangt mehrere externe Komponenten, zur Spannungs-Stabilisierung, um die interne Clock zu
erzeugen, für Audio-Filterung. Die Pins in der verwendeten Bauform (FQFN64) sind sehr klein. Deshalb ist man
gezwungen, ein PCB zu erzeugen und alle Bauteile darauf zu montieren.
Im Anhang finden sich Verweise auf die Dokumentation.
2.3.2 Der Atmega
Atmel ist eine Firma, die Halbleiter herstellt, meistens Mikrocontroller, Speicher, Kunden-ASICs und
eingebettete Komponenten für Kommunikation. Seine AVR Mikrocontroller-Familie, die den Atmega128L
enthält, hat einen RISC-Kern, um die meisten Instruktionen in einem Clockzyklus auszuführen, viele
eingebettete Module, um die Notwendigkeit von externen Komponenten zu begrenzen, und bietet mehr als
hundert verschiedene Instruktionen, um die Grösse von Programmen zu verkleinern.
Der Atmega128L, der hier benutzt worden ist, ist ein 16-Bit-Chip. Er kann bis zu 8 Mhz laufen, hat 53
programmierbare I/O-Ports, kann ein Programm bis zu 128 KB ausführen, und kann 64KB direkt adressieren. Er
bietet auch viele nützliche Module, unter anderem ein I2C/two wire Interface, ein serielles Interface, einen
UART, ein paar analoge Komparatoren...
Um die Programme nicht in Assembler schreiben zu müssen, gibt es für diesen Mikrocontroller einen CCompiler. Es ist denn ziemlich leicht, seine eigenen Programme zu schreiben und auszuführen.
2.3.3 Die Programme
Um die Programme zu schreiben, wurde nur TextPad benutzt. Alles wurde in C programmiert, aber die
Programme waren relativ einfach, und deshalb brauchte man keine grosse Entwicklungsumgebung und keinen
Debugger. Der Compiler, der für Atmel designed ist, war AVR-GCC. Um Makefiles unter Windows benutzen zu
können, wurde Cygwin benutz.
Wenn ein Program kompiliert ist, bekommt man ein .hex File. Dieses muss denn noch zum BTnode
heruntergeladen werden. Mit AVR-Studio und einem ISP Programmer ist es trivial, das zu machen. Leider
braucht es ein bisschen Zeit (von 10 Sekunden für die einfachsten Programme, ohne System-Software, Uart oder
Bluetooth stack, kann es bis 45 Sekunden gehen). Wenn man eine Programmierung durchführt, geht der Atmel
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
14
in den Programmier-Modus. Die I/O-Ports sind ausgeschaltet und der Reset-Knopf funktioniert nicht. Am Ende
führt der BTnode einen Reset durch und startet das heruntergeladene Programm.
AVR Studio wird für Programmierung von Atmega benutzt. Diese Dialog Fenster offnet man mit dem AVR
Button (in Rotes Kreis)
Um ein Feedback vom BTnode zu bekommen, kann man den "printf" Befehl im Code einfügen. Der
entsprechende Text wird über das UART1 Interface zum PC geschickt. Dort braucht man ein UART Terminal
(eingestellt auf die Geschwindigkeit 56700 bps). Man kann z.B Windows Hyperterminal benutzen. Für diesen
Projekt wurde TerraTerm Terminal benutzt.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
15
Terra Term Fenster (und die richtige Werte)
Die PC-Anwendung ist mit Visual Studio 6.0 programmiert geworden, in C++. Der Bluetooth-Stack, der
verwendet wurde, stellt eine .lib-Datei, und drei .h-Dateien bereit. Daneben muss ein wenig Software und ein
Treiber installiert sein, so dass man von der Anwendung aus Bluetooth genutzt werden kann.
2.3.4 Sonstiges
Neben der Software sind noch verschiedene Werkzeuge benutzt worden.
Um die Komponenten zu löten, unter anderem den MAS Chip, mit seinen kleinen Pins, braucht man fast
unbedingt eine Binoculare Lupe, und gute Beleuchtung. Der Lötkolben sollte nicht zu gross sein, und die Spitze
sollte immer sauber und glänzend sein. Um die kleinen Pins des MAS zu löten, reicht es, einen schwachen Druck
mit dem Lötkolben auf die Pins auszuüben. Da es schon auf dem PCB ein bisschen Zinn gibt, ist die Verbindung
normalerweise gut. Es ist vielleicht besser, zuerst den MAS zu löten und dann die anderen Komponenten. So
behindert man sich nicht, wenn man z.B. grosse Kondensatoren aufbringen muss. Wenn die Pins verbunden sind,
ist es zu empfehlen, zunächst die Kontakte physisch zu prüfen. Um das zu machen, muss man nur einen
schwachen horizontalen Druck mit dem Lötkolben ausüben. Wenn die Pins sich nicht bewegen, sind sie gut
verbunden. Danach kann man mit einem Voltmeter (in der Position "Kontakt") die Bindungen elektrisch
überprüfen.
Wenn man die Hardwareschnittstelle testet, ist es immer zu empfehlen, ein Oscilloskop zu benutzen. Das
LeCroy ist dafür ziemlich gut geeignet. Mit der Zoom-Funktion ist es möglich, einen langen Zeitraum zu
speichern (leider nur mit zwei Signalen) und dann im Detail zu analysieren. Ein Oscilloskop ist auch sehr
nützlich, um Zeiten zu messen. Wenn man ein paar Debug Signale benutzt, ist es so einfach zu messen, wie viel
Zeit die ein oder andere Operation braucht.
Um den BTnode mit dem PC zu verbinden, braucht man noch zwei Dinge: einen AVR Programmer und einen
UART Adapter (siehe Foto).
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
16
Die zwei Adapters, die man braucht, um den Btnode mit dem PC zu verbinden
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
17
3. Was gemacht worden ist
3.1 Arbeitsplan
Ein Arbeitsplan ist erstellt worden. Er ist im Anhang angegeben. So kann man sehen, was viel Zeit verbraucht
hat und was schnell gegangen ist.
3.2 Erster Teil: Ansatz
Wenn man mit einer neuen Sache anfängt, braucht man immer ein bisschen Zeit, um die Probleme zu erfassen,
die Programme zu konfigurieren, die Beispiele zu verstehen, usw. Die zwei ersten Wochen sind fast nur dafür
benutzt geworden.
3.2.1 Test des PCB rev 1.0
Bevor die Komponenten auf die PCB 1 gelötet wurden, wurde das entsprechende Schema geprüft, aber leider
das Board selber nicht. Es gab Inkohärenzen zwischen beide Dateien. Zuerst waren die drei verschiedenen
Massen (Analog, Digital und Erde) elektrisch geteilt. Im Eagle Schematic View waren sie zwar verbunden, aber
Eagle hatte das für einen Fehler gehalten (zwei verschiedene Versorgung Signale können eigentlich in Eagle
nicht direkt miteinander verbunden sein). Ausserdem gab es, auch nach einer Korrektur, noch andere Fehler.
Eagle hat gar nicht gern, dass man mehrere supply Signale miteinander verbindet...
Ein anderes Fehler: Am links sind die Kapazitäten C5 und C6 mit der Linie von unten verbunden. Wenn man
diese zwei Kapazitäten bewegt, kann man sehen, dass sie nämlich nicht verbunden waren...
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
18
Wie oben gesagt, wurden diese Fehler nicht vor der Bestückung gefunden. Das bestückte PCB ist trotzdem
getestet worden. Weil vor allem die Erdung nicht richtig war, war die Spannung fast nicht korrekt. Nur die
Erdung für das I2C-Modul war in Ordnung, und nur die Spannung für I2C war korrekt. Deshalb konnte man
trotzdem zumindest etwas testen.
Eine Sache war sicher: Ein PCB Rev. 2.0 war zu machen.
3.2.2 Test des BTnode mit Atmel
Bevor man schwierige Sachen mit dem BTnode anfängt, sollte man zuerst seine Funktionsweise gut verstehen.
Und auch die Makefiles gut konfigurieren, mit den richtigen Umgebungsvariablen. Wenn das fertig war, konnte
man versuchen, die LED ein- oder auszuschalten. Schon dafür musste man die Dokumentation lesen, um zu
wissen, wie ein Pin als Inputpin oder Outputpin verwendet wird. Man musste die I/O-Register des Atmel
modifizieren und die richtigen C-Kommandos finden. Das war schon einiges zu wissen.
Danach konnte man die anderen Funktionen testen, die Beispiele, die Include-Dateien studieren, den Uart1, den
Bluetoothstack, die Geschwindigkeit, usw.
Wie übergibt man einem Register, einem Pin, einen Wert? Gute Beispiele stehen in den C-Quellen. Dort gibt es
auch Informationen darüber, wie man einen I/O-Pin konfiguriert.
Die verschiedene I/O mode von MAS Pins
3.2.3 Bluetooth-Stack auf dem PC
Der Bluetooth-Stack bietet die meisten Grundfunktionen. Es war nützlich, ein kleines Tool zu schreiben für die
Datenübertragung per Bluetooth, um Tests durchzuführen und den Bluetooth-Stack zu verstehen.
Dieses Programm kann im Anhang gefunden werden.
3.3 Zweiter Teil: Grundarbeit
Während der vier nächsten Wochen wurde an der Realisierung gearbeitet. Was hier gemacht worden ist, ist was
man wieder verwenden kann, wenn dieses Projekt weitergeführt wird.
3.3.1 I2C Interface
Was ist I2C?
Der MAS, wie fast jeder solche Chip, integriert ein I2C Interface. Das I2C Interface, das bei Philips entwickelt
wurde, ist für die Steuerung kleiner Schaltungen geeignet. Seine geringe Frequenz erlaubt, dieses Interface in
Mikrocontrolieren (d.h. in Software) zu implementieren.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
19
Das I2C Interface ist eine Mischung zwischen einem Bus und einem seriellen Interface. Ein serielles Interface,
weil sich I2C aus zwei Drähten zusammensetzt. Ein Bus, weil sich mehrere Chips oder Komponenten diese zwei
Drähte teilen können. Die Komponenten können als Master oder Slave handeln. Ein Master wird immer die
Initiative übernehmen, ein Kommando zu schicken. Ein Slave wartet nur, bis ein Master ihn etwas fragt.
Die zwei Signale, SCL und SDA, stehen normalerweise hoch. Sie stehen hoch, weil sie mit Pullup-Widerständen
verbunden sind. Wenn ein Gerät nichts zu sagen hat, muss er seine I2C I/O-Leitungen als tristate setzen.
I2C Bus in diesem Fall. Nur zwei Geräte stehen am Bus (MAS und Atmega)
Die Elektrische Verbindungen. Nämlich ist der Widerstand ein Transistor, und deshalb hat er auch ein
Kapazitanzeffekt.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
20
Um eine Übertragung zu beginnen, muss man eine "Startbedingung" erzeugen. Das wird die andere Peripherie
"aufwecken" (und ihnen auch mitteilen, dass der Bus besetzt ist). Dann muss man die Adresse des Geräts, das
man ansprechen möchte, angeben. Das entsprechende Gerät, das diese Adresse hat, muss ein ACK geben. Dann
können die Daten übertragen werden, MSB zuerst, Byte für Byte, mit jeweils einem ACK dazwischen. Am Ende
soll der Master eine "Stopbedingung" erzeugen. Der Slave wird diese Stopbedingung sehen, und wieder in Idle
Mode gehen.
Start Condition
Stop Condition
Transmission einer Byte (MSB zuerst)
Der Acknoledgment Mechanismus
I2C mit dem Atmel
Der Atmel, um Rechenzeit zu sparen, implementiert ein I2C Modul (in der Dokumentation steht es unter dem
Namen Two-Wire Serial Interface, vielleicht wegen eines Lizenzproblems; aber tatsächlich ist es ein I2C
Controller).
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
21
Die Atmega Two Wire Inteface Block Schema
Normalerweise könnte man ohne externe Widerstände einen Pullup-Mechanismus erzeugen. Aber die internen
Pullup-Widerstände des Atmel scheinen sehr gross zu sein. Zur Erinnerung: wenn alle Geräte im Tristate-Modus
sind, besteht nur eine Verbindung zu VCC über die Pullup-Widerstände. Weil Tristate einen kleinen kapazitiven
Effekt hat, wird diese Kapazität geladen. Wenn der Widerstand sehr gross ist, fliesst nicht viel Strom, um die
Kapazitäten zu laden. Deshalb steigt die Spannung langsam. Aus diesem Grund werden externe Widerstände
gebraucht.
Die I2C Verbindung (in Eagle). Die zwei X- gehen direkt nach dem Atmel (pin 25 und 26).
Wenn die physischen Verbindungen hergestellt sind, kann man dem Atmel sagen, Subkommandos zu senden.
Dafür muss man ein paar Register lesen oder schreiben. Im Rahmen dieses Projekts wurden die folgenden
Subkommandos implementiert:



StartCondition
Repeated StartCondition
StopCondition
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
22


writeByte
readByte
Wenn diese Subroutinen (die in C programmiert worden sind) fertig sind, kann man zur nächsten Stufe gehen.
Der MAS kann drei Typen von Commandos bekommen :



read or write direct configuration register
read or write memory section
read or write codec section
Mit einer Kombination von kleinen I2C-Befehlen kann man denn diese vollen Kommandos konstruieren. Hier
findet man ein Beispiel. Die andere Routinen stehen in den Quellen.
int writeControlRegister(u16 data) {
int ret;
ret = (
I2C_startCond() ||
I2C_writeByte(DW) ||
I2C_writeByte(CONTROL_REG)
||
I2C_writeByte((u8)(data >>
8)) ||
I2C_writeByte((u8)(data &
0xFF)) ||
I2C_stopCond()
);
wait(1000);
return ret;
}
3.3.2 Board rev 2
Die Board Revision 2 basiert fast nur auf der Beschreibung "Typical Application in Portable Player", die man in
der MAS-Dokumentation finden kann. Die grosse Frage war: muss man zwei verschiedene Spannungen haben?
In der Dokumentation, auf Seite 57, kann man lesen, dass die empfohlene Spannung für den Decoder-Modus
2.5V ist. Aus dem BTnode bekommt man 3.3V. Ist das zuviel? Für das PCB 1.0 wurde angenommen, dass diese
Werte obligatorisch seien, deshalb hat Luc-André Burdet die DC/DC Converter benutzt. Weil das auf dem PCB
1.0 nicht problemlos war, wurde für rev 2 die folgende Entscheidung getroffen: man wird den Spannungsteil
integrieren, aber mit Jumpern soll es möglich sein, dieses Teil ein- oder auszuschalten. So kann man testen, ob es
möglich ist, immer nur mit 3.3V zu arbeiten.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
23
"Typical Application in Portable Player" (MAS doc)
Das war der Fall. Wahrscheinlich empfehlt Micronas eine 2.5V oder andere Spannungen wegen des
Stromverbrauchs. Eventuell arbeitet der Decoder mit 2.5V sparsamer. Der Encoder dagegen, der viel mehr zu
berechnen hat, muss mehr Spannung bekommen, um sein Funktionieren zu garantieren.
Eine andere wichtige Sache wurde auch festgestellt. Die integrierten DC/DC können Spannungen nur erhöhen,
nicht verringern. Weil wir 3.3V vom BTnode bekommen (auf dem BTnode gibt es schon ein
Stromversorgungsteil), können die integrierten DC/DC nur die Spannung zu 3.4V oder 3.5V erhöhen, was nicht
sehr nützlich ist.
Für die Masseverbindungen wurde eine Fläche entworfen, genauer gesagt drei Flächen, die miteinander
verbunden sind. Nur so kann man Eagle zwingen, drei verschiedene Supply Signale zu verbinden.
GND
AGND
DGND
Die drei Erde Signale sind für Eagle unabhängig, aber die sind physisch miteinander verbunden durch die Fläche
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
24
Alle Stecker wurden als Molex ausgeführt. Fast alle Inputs oder Outputs des MAS sind zu solchen Steckern
verbunden. Leider wurde das Signal RTW (read to write) vergessen. Normalerweise sind spezielle Inputs (SDI,
SPDIF, usw) nicht benutzt, und es wurden Widerstände eingebaut, um den MAS zu schützen.
Die Steckern und ihre Funktionen (für die Pin Nummern, siehe Anhänge
Hauptteile
3.3.3 Erste Tests: Antwortet der MAS? Funktionniert I2C?
Die erste Art um zu erfahren, ob der MAS, oder irgendein Chip, mit I2C richtig funktioniert, ist zu sehen, ob er
ein Acknowledge sendet, wenn man seine Adresse auf das I2C-Interface gibt. Dieses ACK kann man entweder
mit dem Oscilloskop sehen, oder durch Lesen des Atmel Two Wire interface status register. Danach kann man
probieren, ein Register zu lesen, und sehen, ob es den Default-Wert zurückgibt. Aber dafür darf man nicht
vergessen, die Resetsignale kurz zu senden, bevor etwas gelesen wird. Sonst wird der MAS nur Nullen
zurückgeben. Man kann auch probieren, die IC Nummer zu lesen. Wenn 35 - 87 - XX - 00 zurückkommt, ist
alles gut konfiguriert.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
25
Der Anfang einer I2C-Sequenz. Links kann man die Adresse des MAS lesen (00111100).
Die drei "Spitze" kommen am Ende des Acknoledgement (es funktioniert denn).
Der MAS lässt die SDA Signal, deshalb geht er hoch. Der Atmel sieht das, er steckt dann das nächstes Wert.
Die zwei Probe von dem Lecroy, die auf die SCL und SDA Signale verbunden sind.
Danach kann man testen, ob man nach einen "Write Command" die geschriebene Wert wieder lesen kann. Z.B.
wenn man den Wert 0x07ac in ein Register schreibt und dann, wenn man das selbe Register liest, den Wert
0x0000 liest, funktioniert höchstwahrscheinlich etwas nicht. Aber es gibt auch Bits von Registern, die als Flag
funktionieren. Solche Flags, wenn man sie auf 1 oder 0 einstellt, werden danach wieder ihren normalen Wert
annehmen.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
26
3.3.4 Konfiguration des MAS
Sobald man sicher ist, dass der MAS richtig funktioniert und ebenso das I2C Interface, kann man den MAS
konfigurieren. Es gibt nämlich einige Register, die man unbedingt einstellen muss. Aber zuerst muss man ein
Reset machen. Darüber gibt es ein bisschen zu sagen:
Der Signal POR (Power On Reset) ist auf Null aktiv, deshalb sollte er immer auf Eins eingestellt sein (inaktiv)
ausser beim Startup, wo man ihn kurz auf Null stellen muss. Um zu vermeiden, dass das Chip alle zwei Minuten
ein Reset macht, wurde der Kondensator C13 (1 uF) gesetzt. Diese Kapazität kümmert sich darum, die Spannung
für POR zu halten. Wenn zum Beispiel die VCC Spannung gering wird, wird diese Kapazität ein bisschen Strom
abgeben, um eine hohe Spannung auf POR zu garantieren. Danach wird er wieder durch R1 geladen. Jedoch,
wenn man wirklich einen Reset machen möchte, muss man gegen diesen Mechanismus "kämpfen". Wenn man
eine Null setzt, muss die Kapazität sich entladen. Deshalb muss man genügend lange warten, bis die Spannung
auf 0 (oder ungefähr 0) kommt. Nachher musst man wieder warten, bis die Spannung wieder nach Eins geht,
bevor Befehle gesendet werden. Auf das rev 2 PCB, wo eine 10k Widerstand (R1) steht, dauert es 200
Mikrosekunden. Auf die rev 3, wo es ein LED in Parallelschaltung gibt, steht ein 4.7k Widerstand. Abhängig
von dem Verbrauch der LED, muss man auch messen, wie lange man warten muss.
Hier sieht man, dass nach 200 Microsekunden ist der signal wieder hoch oder gering
Die einzustellenden Register sind: die drei Direkt-Konfigurations-Register (ob man die DC/DC benutzt), einige
DSP MemoryCells (kommen die Daten über PIO oder die serielle Verbindung) und Codec Register (Volume,
Balance, Mixrates). In der C-Quelle gibt es eine geprüfte Konfigurationssequenz, mit Kommentaren. Die
Defines, die am Anfang des Codes stehen, erleichtern die Konfiguration.
Ein wichtiger Punkt ist die Validation von Memory Settings. Nach Änderungen in einer DSP Memory Cell muss
einmal das Validate Bit (bit 0) der Adresse D0:7F1 gesetzt werden. Das hat als Effekt, dass die neuen (nonReset) Werte, die man für andere Adressen angebeben hat, jetzt wirklich gesetzt und benutzt werden.
3.3.5 Herunterladen von Musik zum BTnode; die Speicherfrage
Nach der Konfigurationssequenz sollte das EOD-Signal auf hoch stehen, sowie RTR wenn man die PIO benutzt.
Wenn das nicht der Fall ist, ist etwas falsch konfiguriert. Nun müssen Daten gesendet werden. Aber zunächst
müssen diese vom PC geladen werden. Und auf dem BTnode muss Platz bereitgestellt werden, um die Daten zu
speichern.
Wie in der Darstellung des BTnode gesagt wurde, kann der Atmel 64 Kbytes adressieren, und es gibt auf dem
BTnode einen FlashRAM Chip. Dieser Speicher wird vom Compiler gar nicht genutzt. Ausserdem muss man
eine kleine "chirurgische" Operation am Btnode machen, um diesen RAM-Chip zu benutzen. Auf unserer
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
27
Version des Btnode gibt es einen 256 KB RAM Chip. Um 256 Kbytes zu adressieren, braucht man 18 bits
Adressen; der Atmel hat nur 16 bits für die Adressierung. Deshalb kann man nur die ersten 64 KB benutzen, und
die zwei unbenutzende Adressierungsbits müssen entweder auf 00, 01, 10 oder 11 eingestellt sein. Auf der
Standard-Version des BTnode sind diese zwei Input-Leitungen zu nichts verbunden (metastable) und man weiss
dann nie genau, wo genau man die Daten liest oder schreibt. Die Operation besteht darin, diese zwei Pins zu
Erde oder VCC zu setzen.
Der Patch
Damit hat man jetzt 60 Kbytes zu verfügung, um die Mp3 Daten temporär zu speichern. Da der Compiler diesen
"Hochspeicherplatz" nicht benutzen kann, muss man die Adressierung "von Hand" machen, also die Adresse
selbst angeben. Aber da man einen Kreispuffer benutzt, hat man nur zwei Pointer zu behandeln, einen ReadPointer, und einen Write-Pointer. Mit Defines werden die Startadresse, Endadresse und Puffergrösse definiert.
Am Anfang sind die zwei Pointer auf die Startadresse gesetzt. Jedes Mal, dass man ein Byte in den Puffer
schreibt, muss man den Write-Pointer inkrementieren (ausser wenn er am Ende des Puffer steht, dann muss man
ihm die Startadresse geben). Und jedes Mal wenn man ein Byte im Puffer liest, muss man dasselbe mit dem
Read-Pointer machen. Ein einfaches Beispiel (ein Puffertest) ist auch im Anhang gegeben.
Dann bleibt noch, die Daten vom PC zu empfangen. Das ist mit zwei Bluetooth-Stacks nicht schwierig. Auf dem
PC muss man ein L2CapIf Object erzeugen, den PSM zu registrieren, und die Verbindung öffnen. Dann, mit den
Methoden "OnConnected" und "OnDataReceived", und dem Befehl Write(), kann man Daten senden und
empfangen. Die OnConnected Method wird aufgerufen, sobald die Verbindung aufgebaut geworden ist. Die
OnDataReceived Methode wird angerufen, wenn Daten empfangen worden sind. Mit dem Write Befehl kann
man Daten versenden.
Man sollte trotzdem aufpassen. Die Dokumentation sagt gar nichts über die Grösse von Daten, die man
gleichzeitig in einem Write Befehl senden kann. Aus Erfahrung kann man bemerken, dass es eine Grenze gibt,
die aber nicht fest ist. Mit 1024-Byte-Paketen funktioniert es normalerweise gut, wenn man es nicht zu oft das
macht (siehe unten).
Auf dem Btnode muss man mit Events arbeiten. Wenn das Bluetoothmodul etwas empfängt, signalisiert es dem
Atmel einen Interrupt. Die empfangenen Daten werden dann in einen Puffer (Stack-intern) kopiert, und ein
RECEPTION_EVENT wird ausgelöst. Sobald der Btnode die aktuelle Methode verlässt, wird der Dispatcher
übernehmen und die entsprechende Methode zum Event ausführen. Um der Btnode System Software
mitzuteilen, welche Methode ausgeführt werden muss, wenn dieser oder jener Event kommt, hat man einen
Befehl "btn_disp_ev_reg()" zur Verfügung.
Damit kann man Daten versenden. Es gibt nun die Wahl, ob der PC Daten sendet, sobald eine Verbindung
hergestellt ist, oder ob der BTnode zunächst Daten anfordern muss. Sobald Daten empfangen wurden, müssen
diese im Puffer zwischengespeichert werden. Dann muss man sehen, wie weitere Daten ankommen. Soll der
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
28
BTnode eine Anforderung senden (MORE), wenn er Daten braucht, oder soll der PC automatisch neue Daten
senden, solange der BTnode keinen Stop-Befehl sendet? Darüber wird später noch gesprochen.
3.4 Dritter Teil: Ausarbeitung
3.4.1 Die parallele Verbindung
Noch fehlt die Subroutine, die die Mp3-Daten zum MAS sendet. Die erste Lösung arbeitet über das parallele
Interface (PIO) des MAS. Das Hauptproblem besteht darin, dass man acht Ouptut-Pins beim Atmel finden kann,
aber diese acht Pins befinden sich nicht alle auf dem gleichen Port. Deswegen kann man nicht direkt ein Byte in
das entsprechende Register schreiben. Man muss jeden Pin einzeln hoch oder niedrig setzen, und defür eine
Maske benutzen. Das benötigt ein bisschen Zeit, deshalb wird später eine andere Lösung diskutiert.
Wie auf Seite 69 der MAS-Dokumentation beschrieben ist, muss man einen Handshake-Mechanismus
realisieren, und das für jedes Byte. Das Signal EOD (End of Demand) ist hoch, wenn der MAS Dateien braucht.
Weil es ziemlich viel Zeit braucht, die Werte auf die Pins zu setzen, muss man das eben vor dem PR Signal
erhöhen. Sonst wird es Inkohärenzen geben. Ein Beispiel dafür kann man in der C-Quelle finden.
Handshake-Mechanismus
Die Parallele verbindung verlangt ziemlich viele Drähte.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
29
3.4.2 Die Bedienungen des MAS / des BTstack
Nach den ersten Tests war der Bitrate auf 64 kbps begrenzt. Und das, obwohl die theoretischee BluetoothÜbertragungsrate mehr als 700 kbps beträgt? Die erste Beschränkung kommt daher: Das Bluetooth Modul wird
mit dem Btnode über ein UART-Interface verbunden. Dieses UART-Interface kann normalerweise bis 460 kbps
gehen, aber wegen geringer Rechenleistung des BTnode, und wohl aufgrund umständlicher StackImplementierung, ist sie momentan auf 230 kpbs begrenzt. Es sollte vielleicht möglich sein, den Stack zu
optimieren (weil dieses Problem im Stack leigt), um die 460 kpbs zu erreichen.
Aber auch zwischen 230 kpbs und 64 kbps gibt es einen grossen Unterschied. Zuerst muss man sich bewusst
sein, dass diese 230 kpbs eine "best-effort" Rate sind. Das bedeutet, dass der Btnode gar nichts anders daneben
machen kann, was hier nicht den Fall ist (er muss die Puffer verwalten, und die MP3 Dateien senden).
Um die Sache klarer zu sehen, ist eine kleine Analyse gemacht worden. Es wurden, mit Hilfe des Oscilloskops,
die Laufzeiten aller Methoden gemessen. Wie kann man das machen? Am Anfang einer Methode legt man ein 1
auf einen Pin, am Ende dieser Methode legt man eine 0 an. Dann, wenn man das Signal dieses Pins auf dem
Oscilloscop sieht, kann man schon gut die Zeiten messen. Die Zeiten sind an einigen Stellen im Source-File
angegeben.
Auf diese Weise ist auch die Grösse des MAS-internen Puffers gemessen worden: Nach ein paar Tests hat man
hat gesehen, dass, wenn man ihn für mehr als 0.4 Sekunde ohne Daten lässt, man keine gute Tonausgabe erhält,
mit 32 kbps. Ein Intervall von .25s mit 32 kbps bedeutet ca. 8 kb Puffer, was gleich 1 kbytes ist.
Man kann auf diese Art interessante Sache lernen. Unter anderem, wie lange es dauert, die empfangenen Daten
in den Puffer zu kopieren. Wie oft muss man abfragen, ob der MAS Daten möchte, und ihm gegebenenfalls
welche geben. Welche Übertragungsrate bekommt man am PIO (ist diese hoch, hat man dann viel Laufzeit,
etwas zu machen, ist diese niedrig, wird der Btnode nur das machen, und dann kann Zeit haben, etwas anders zu
machen). Und vor allem, wie oft wartet der Btnode ohne etwas zu machen.
Das kann nämlich sehr oft passieren. Der Btnode, um einen Event auszulösen und dafür die entsprechende
Methode aufzurufen, muss im "idle mode" sein (nicht genau idle, siehe unten). Man kann dann nicht eine
unendliche Schleife machen, die n Mal pro Sekunde um den MAS sich kümmert, und m Mal um den Bluetooth
(man kann vielleicht das machen, und es würde wahrscheinlich die beste lösung. Aber in diesem Fall kann man
den aktuellen System Software nicht benutzen, und deswegen alles wieder zu schreiben). Man muss manchmal,
am Ende einer Methode, keine andere Methode rufen, sondern nur ein Return. Dieser Return ist ein Callback
zum Disptacher. Dieser wird dann seine Eventsliste aktualisieren, und, wenn es einen Gibt, wird er die
entsprechende Methode angeruft werden. Wenn es zur Zeit kein Event gibt (man wartet auf Dateien, die aus
Bluetooth kommen sollen), wird das System denn tatsächlich in Idle mode stehen.
3.4.3 Das "Application Level" Protocol / TCP-like
Um diese Sache besser zu verstehen, ist es gut, eine Beispiele zu nehmen. Analysieren wir das Verhalten eines
Typus von Anwendung (diese Anwendung ist eine Lösung des Problem).
Grundsätzlich funktioniert es so: Der PC sendet Pakete von 1Kb. Diese Pakete werden beim vom BluetoothStack in kleinere Pakete geteilt (meistens 55 bytes). Jedes mal, wenn eines dieser kleinen Pakete am BTnode
ankommt, sollte der Btnode so bald wie möglich im "Dispatcher Mode" stehen, um die Methode "data_received"
aufrufen zu können. Diese Methode wird zuerst prüfen, ob der MAS Daten braucht, und dann werden die
empfangenen Daten in den Speicher kopiert. Wenn noch kein vollständiges Paket von 1 KB angekommen ist,
kehrt die Methode einfach zum Dispatcher zurück.
Wenn ein Paket vollständig angekommen ist, ruft der BTnode eine spezielle Methode auf. Diese Methode wird
durch einen Event aktiviert, den die Empfangsmethode erzeugt. Wenn ausreichend Platz im Puffer ist, werden
vom PC neue Daten angefordert, indem eine "MORE"-Nachricht zum PC gesendet wird.
Wenn der BTnode keine Daten empfängt, wird der Dispatcher Mode nicht verlassen und nichts zum MAS
gesendet. Deshalb ist es wichtig, dass der BTnode ständig Daten empfängt. (Übrigens funktioniert dies nicht
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
30
mehr, wenn das Ende der Datei erreicht ist. Dieser Fall muss noch behandelt werden. Zur Zeit hört man das Ende
einer Datei nicht.)
Diese Art ist einfach, sie funktioniert, aber sie hat zwei grosse Nachteile, die beide von der "MORE"-Nachricht
herrühren. Erstens, wenn man diese MORE Nachricht sendet, hat in dieser Zeit der Btnode gar nichts anders zu
tun. Vom Moment, da der BTnode diese Nachricht schickt, bis dem Moment, wo er die ersten Daten bekommt,
vergeht ungenutzte Zeit. Zweitens, wenn zufällig eine "MORE"-Nachricht nicht am PC ankommt, wird der PC
noch warten, und so auch der Btnode. Das Protokoll blockiert. Um dieses Probleme zu lösen, wurde "streaming"
(Sektion 3.4.5) ausprobiert.
3.4.4 Die serielle Verbindung
Bevor man das Protokoll ändert, kann man ein bisschen Zeit woanders sparen:
Wie oben bereits gesagt wurde, muss beim Senden der Daten über die parallele Schnittstelle jeder Pin einzeln
gesetzt werden, was sehr ineffizient ist. Der MAS kann Daten auch über eine serielle Schnittstelle bekommen.
Da der Atmel eine eingebaute serielle Schnittstelle hat (ähnlich der I2C-Schnittstelle). Um darüber Daten zu
übertragen, muss man nur ein Byte in ein Register schreiben. Der Atmel kümmert sich dabei um alles (Clock
etc.). Das ist genau das, was man sich wünscht.
Die Zeitbedienungen von MAS für die Serielle Verbindung
Mit dieser Lösung braucht es fast gar keine Zeit mehr, die Daten dem MAS mitzuteilen. Mit dieser Verbesserung
kann man jetzt 96 kbps MP3-Daten abspielen. In der Quelldatei sieht man, wie man die serielle Schnittstelle des
Atmel steuert.
3.4.5 Das zweite Protokol: UDP-like
Das erste Protokoll ist nicht zuverlässig, da die Gefahr besteht, dass es blockiert. In unserer Situation, wo man
eine ziemlich starke Zeitbelastungen hat, ist die offensichtlichere Lösung eine Streaming-Lösung, wie man sie
im Internet finden kann. Im Internet, um Musik oder Video zu verbreiten, hat man zwei Möglichkeiten.
Entweder lädt man die Daten zuerst vollständig auf Festplatte und spielt sie dann ab (z.B. einen Film). Oder man
spielt die Daten direkt ab, wie sie hereinkommen, ohne sie zu speichern (z.B. Audio-Broadcasts). Bei der
zweiten Lösung besteht die grosse Schwierigkeit darin, dass die Daten ebenso schnell ankommen wie sie
verarbeitet werden. Da man den Verbrauch nicht vergrössern oder verkleinern kann (man kann nicht Musik
schneller oder langsamer spielen), kann man nur die Quelle kontrollieren.
In der vorherigen Lösung wurde die Quelle durch einen Demand-Mechanismus kontrolliert. Man hat einen
Hahn, und jedes Mal, wenn man Dateien braucht, öffnet man ihn kurz, und dann schliesst man ihn wieder. Aber
das Öffnen und Schliessen des Hahns benötigt Zeit. Warum also nicht den Hahn immer ein bisschen offen
lassen, so dass man immer Daten bekommt, ohne dafür den Hahn öffnen und schliessen zu müssen?
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
31
Das Hauptproblem ist aber hier, den Hahn halb offen zu lassen. Davor hatte man einen binären Mechanismus:
entweder offen oder zu. Jetzt braucht man mehrere Stufen: 0%, 20%, 40%, usw.
Diese Idee wird hier angewandt: Der PC sendet immer Daten. Er wartet nicht mehr auf eine "MORE" Nachricht.
Aber er muss jetzt auf zwei Nachrichte warten: "SCHNELLER" oder "LANGSAMER". Wenn er eine dieser
beiden bekommt, wird er seine Senderate erhöhen oder verringern. Auf dem BTnode kann man jetzt einfach die
empfangenen Daten in den Puffer schreiben. Wenn der Puffer fast voll ist, sagt man einfach dem PC
"LANGSAMER". Und wenn der Puffer ziemlich leer ist, sendet man ein "SCHNELLER" Nachricht.
Leider ist es nicht so einfach zu machen. Und was noch schlimmer ist: zur Zeit ist noch nicht klar, warum es
nicht geht. Hier sind die Probleme:



Zwischen zwei Write Befehlen muss man eine Wartepause einfügen. Sonst geht es nicht (Wo liegt das
Problem ? Mit der PC-to-PC file Transfer Anwendung, hat man diese Problem schon gesehen.
Eben mit einer Pause kann man nicht mehr 1 kb Einheiten senden. Nach 12 oder 13 empfangene Pakete
sind die Daten nicht mehr schlüssig. Mit Pakete von grossen 512 bis 700 Bytes geht es besser (Warum
geht es mit 600 und nicht mit 1024 ? Darüber keine Ahnung)
Weil auf dem PC es ein Realtime Operating System gibt, mit vielen Prozessen, kann man nie sicher
sein, wenn genau sind die Dateien gesendet. Um ungefähr das Problem vorzustellen : es gibt in der PC
Anwendung ein "pump" Methode, die Einfach ein Packet sendet. Wenn man das kompiliert und führt :
pump();
wait(100);
pump();
sollte man das auf dem BTnode erhalten: Empfang eines Pakets, Pause, Empfang. Leider zeigt sich das
folgende Verhalten: Pause, dann kommen beide Pakete gleichzeitig, ohne Ordnung. Dahinter versteckt
sich wahrscheinlich ein Threadproblem. Der Befehl "wait" ist aktives Warten. Ein Write-Befehl (in der
Methode pump) erzeugt einen eigenen Thread. Das Warten geschieht unabhängig davon in einem
anderen Thread. Der zweite Write-Befehl wird dann bereits aufgerufen, bevor der zweite abgeschlossen
ist. Das ist also keine Möglichkeit, um Pausen zwischen Paketen zu erzeugen.
Anderseits ist es sehr schwierig, die Flussmenge zu regulieren. Wenn man ein sleep einfügt, um eine Pause zu
machen, geht es schon besser. Sehen wir diese Situation: das Programm kommt an den Sleep Befehl. Wenn der
PC nichts anderes zu tun hat, wird dann der Write Thread ausgeführt. Aber wenn davor den Write Befehl, hat der
PC etwas anders zu tun (Explorer, Outlook, Word, Firewall, etc), werden vielleicht diese Prozesse während der
Sleepzeit ausgeführt, und dann hat man keine Pause.
Um diese Probleme zu lösen, gibt es zwei Wege : Entweder die PC Anwendung wieder zu schreiben, aber dafür
wird es Windows Echtzeit Werkzeuge benutz (Events, Mutex, usw). Oder eine andere Schnitstelle über
Bluetooth zu benutzen, z.B RFCOMM. Aber dann muss man ein RFCOMM Driver zum Btnode schreiben.
3.4.6 Board rev 3
Als endgültige Version wurde das PCB rev 3 entworfen. Dieses PCB wurde so klein wie möglich entworfen mit
SMD-Komponenten, soweit das möglich war, nur mit den nötigsten Anschlüssen (ohne SPDIF und PCM I/O)
und ohne eigene Stromversorgung (3.3 V reicht für alle Funktionen aus). Ausserdem wird die Platine
doppelseitig bestückt.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
32
Da die PCB noch nicht geliefert wurden, lässt sich noch nichts über Entwurfsfehler sagen. Im wesentlichen
entspricht es jedoch der rev 2, mit weniger Komponenten und neuem Routing.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
33
4. Resultate
4.1 Hardware-Schnittstelle
Zur Stunde ist das PCB rev 3 noch nicht da. Man kann trotzdem mit rev 2 eine Bestandsaufnahme der
Hardwareschnittstelle machen. Man hat ein PCB, das ziemlich gross ist, aber gut funktioniert. Das einzige
Problem ist, dass keine RTW Signale vorhanden sind, was verhindert, dass der Encoder benutzt werden kann.
Die Interfaces funktionieren: von I2C bis zur Seriellen und parallelen Schnittstelle laufen alle. Die anderen
(SPDIF, SDO) wurden nicht getestet. Für die I2C-Schnittstelle gibt es eine fast vollständige Bibliothek, die man
auch ohne grosse Vorkenntnisse benutzen kann - ein Resultat dieser Arbeit. Das Senden von Daten über die
serielle Schnittstelle ist wohl die effizienteste Art des Datenaustauschs mit dem MAS.
Die rev 2 kostet noch ziemlich viel. Erstens ist der PCB gross, und mit seinen 8 Molex-Steckern, den SchottkyDioden, den grossen Kapazitäten, kommt man schnell auf hundert Franken. Die rev 2 war noch ein Prototyp, die
rev 3, die demnächst kommt, ist fast schon ein fertiges Produkt!
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
34
4.2 Software-Schnittstelle
Mit der aktuellen Software-Schnittstelle (PC sowie Atmel Anwendungen), wird ein Ziel erreicht: Bis zu einer
Kodierrate von 96 kpbs ist es möglich, ein Mp3 file auf den Btnode zu senden und es dort zum MAS zu senden,
sodass er es spielt. Allerdings ist die Verbindung nicht sehr sicher, da Pakete verloren gehen können und dann
das System sich blocken.
Mit der "Streaming"-Lösung hat man dieses packet-loss Problem nicht mehr, aber es ist zur Zeit nicht möglich,
ein Feedback zum PC zu senden (mehr Daten, weniger, usw).
Mit der I2C Routine sollte es einfach zu sein, Control-Kommandos zum MAS zu senden, z.B lauter oder leiser,
Pause, usw. In zwei Worten: mit dieser Software bekommt der, der dieses Projekt weiterführen möchte, schon
die ersten Bausteine, auf die er aufbauen kann.
4.4 Weitere Probleme
Hier hat man ein Gerät, mit ein Paar "Driver", der MP3 spielen kann, der Daten von einem PC (oder etwas
anderem) empfangen kann, und der die zwei Sachen gleichzeitig machen kann.
Nun gibt es noch viele Fragen über die beiden Bluetooth-Schnitstellen. Warum hat man Paketverluste? Warum
blinkt manchmal der Btnode? Welche Prioritäten hat der Windows Bluetooth Driver? Ist es möglich, RFCOMM
zu benutzen? Lohnt es sich? Kann man ein effizientes Streaming-Protokoll implementieren?
Aber auch: wo steht die Bitraten-Grenze? 96 wie jetzt? Oder 128, 160, eben 256? Kann man den BTnode
Bluetooth Stack optimieren und vielleicht genau für diese Situation verändern?
So viele Frage gibt es, hoffentlich wird es jemanden geben, der daran interessiert ist!
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
35
5. Konklusion
5.1 Was gelernt worden ist
Obwohl ich schon ein bisschen Erfahrung mit Hardware und MP3-Chips hatte, habe ich bei diesem Projeckt viel
gelernt. Das digitale Oszilloskop hatte ich vorher nur ein bisschen benutzt, aber ich kannte fast keine von seinen
Optionen. Zum ersten Mal habe ich eine Win32 C++ Anwendung entwickelt, das war auch etwas neues.
Mit dem Dispatcher konnte man viel lernen: wie kann man leicht eine klein System-Software machen kann, usw.
Mit Bluetooth war es interessant, die Stacks zu entdecken und zu lesen.
Ein PCB hatte ich noch nie gemacht, weder das Schema noch das Routing. Das hat mir gut gefallen. Das
Schematick zu machen, dann das Routing... Man muss aufpassen, keine Fehler zu machen, weil sonst das
bestellte PCB unbenutzbar sein kann. Es ist auch interessant zu sehen, wie viele verschiedene elektronische
Komponenten es gibt. Kapazitäten Keramik, Tantal, Mylar, Metal, Porcelain, Polyester, von 1 pF zu 1 mF, in
SMD-Gehäuse, gross, klein, 1%, 5% usw. Es ist ziemlich schwierig, den billigsten zu finden, der nicht zu gross
ist, sondern einfach zu löten, und verfügbar.
Aber ich habe zwei Hauptsachen gesehen: Erstens, die Programmierung unter Windows ist ein Alptraum, vor
allem wenn man etwas mit Echtzeit macht. Zweitens reicht es nicht, die Komponenten physisch zu verbinden
(ok, ich habe einen MP3 Chip, einen Mikrocontroller, etwas Speicherplatz und eine Bluetooth-Verbindung.
Verbinde ich alles das und dann habe ich Musik). Man muss auch ein Software schreiben, diese analysieren,
sehen was geht und was geht nicht, neue Lösungen finden.
Eine gute Erfahrung!
5.2 Btnode, super aber trotzdem begrenzt
Was überraschend sein kann, sind die Fähigkeiten des Btnode. Er ist so klein, aber man kann sehr viele Sache
damit anfangen. Ich habe trotzdem den Eindruck, dass wir in unserem Fall ein bisschen an der Grenze seiner
Fähigkeiten angekommen sind. Mit 8 Mhz kann er sicher eine serielle Verbindung verwalten, aber mit zwei
Verbindungen, wenn er immer von einer zu der anderen springen muss, kann man sich denken, wird es ein
bisschen knapp. Aber das ist vielleicht mehr ein Eindruck als eine Gewissheit. Und vielleicht gibt es auch eine
ganz andere Lösung, die ich nicht gesehen habe... Die lasse ich andere finden.
5.3 Die möglichen Fortsetzungen
Zur Zeit muss man noch die einfache Basis-Schnittstelle verwenden. Wenn es aber ein verlustfreies Protokoll
gibt, kann man sehr viele verschiedene Sachen damit machen. Ein Plugin für WinAmp, um den Btnode vom PC
mit einem schönen GUI kontrollieren zu können; eine Verbindung zwischen zwei Btnodes (ein Encoder und ein
Decoder - wie ein Walkie-Talkie).
Eine andere Idee wäre alles auf das selbe PCB zu stecken, Mikrocontroller, MP3chip, Bluetooth Modul, eben
noch ein FPGA, das zum Beispiel als Chipset funktionieren könnte, mann könnte auch ein bisschen RAM
einfügen.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
36
Man kann sagen, wir haben hier ein schönes Spielzeug!
5.4 Dank
Ich danke





Harald Vogt, der mich während zehn Wochen beraten, mir geholfen, zugehört und mich ertragen hat.
Harald Vogt, der während zehn Wochen mein schlechtes Deutsch gehört hat.
Harald Vogt, der noch nach allem einverstanden war, mein schlechtes Deutsch zu korriegen (diesen
Bericht).
Luc-André Burdet, der hat mich während zehn Wochen ertragen hat.
Die andere Mitglieder der DSG-Gruppe (Oliver Kasten, Frank Siegemund, Matthias Ringwald).

Und denen, die ich vergesse!
6. Anhänge
Dieses Dokument ist eine Druckbare Version den Bericht. Auf die HTML Version stehen die Linken.
Mp3 für Btnode
Oktober 2003
Sébastien Rumley
Herunterladen