Forum: Mikrocontroller und Digitale Elektronik MP3 / JQ6500 / Stream


von Marco G. (flaschenpost)


Lesenswert?

Hallo,

ein Frohes 2017 noch!

mp3 ist ja schon oft hier diskutiert worden, allerdings finde ich eher 
ältere Beiträge mit eher noch älteren Chips als Lösungsvorschlag.

Beitrag "ARM MP3/AAC Player Web Radio"

Ich hoffe, dass dieses Forum das richtige dafür ist.

Ich habe vor allem erst mal ein Verständnisproblem.

Kleine Boards zum mp3 Abspielen von hart verlötetem Flash oder Microsim 
gibt es ja mehrere, ich habe ein JQ6500 (auf dem Chip steht noch 
JQ6500SS24) für <3 Euro erworben.

In meiner Anfänger-Naivität habe ich nun versucht, einen Arduino an die 
dafür vorgesehene serielle Schnittstelle des Boards zu hängen, um von 
diesem mp3 an den JQ6500 zu senden. Leider musste ich beim Lesen der 
verschiedenen Seiten zum Thema 
(http://www.elecfreaks.com/wiki/index.php?title=JQ6500_Mini_MP3_Module) 
feststellen, dass man per Mikrocontroller nur an die Vor/Pause/Zurück- 
Funktionalitäten rankommt, aber keine Möglichkeit hat, Daten 
einzuspielen.

Wenn man dann nach einem reinen Modul für mp3 -> Audio sucht, kommt man 
bei deutlich teureren Modulen (VS1053, > 10 Euro) raus. Aber der JQ6500 
muss doch auch diese Decoder integriert haben?

Mein Ziel ist, einen Webradioplayer mit Aufnahme und so zumindest mal zu 
entwerfen, vielleicht auch zu basteln. Dort soll ein ESP8266 (Wemos D1 
Mini) statt Arduino zum Einsatz kommen.

Hier gab es in anderen Zusammenhängen mal den Tip, statt 
Zusammenstellung verschiedener Standardcontroller einen passenden 
Gesamtcontroller zu nutzen. Aber mit WiFi und mp3 wird das wohl eher auf 
was "professionelles" hinauslaufen, was Preis, Programmierumgebung und 
zum Programmieren nötige Hardware angeht.

Ich finde zwar Bitschubsen auch mal spannend, aber den Luxus, in Watte 
gepackt die Arduino-IDE- .ino wie ein "Scriptkiddie" zu bedienen, möchte 
ich bei so einem Projekt nicht missen.

Es soll nicht audiophil sein, muss keine besondere Klangqualität haben. 
Kennt denn einer von euch einen Trick, dem JQ6500 doch noch (direkt 
zugespielte) Töne zu entlocken? Oder einen Chip in ähnlicher 
Preisklasse?

Ich bin für jeden Hinweis (oder Kritik am Beitrag) dankbar!

Liebe Grüße
Marco

von R. M. (rmax)


Lesenswert?

Ich habe mich die letzten Wochen auch ein wenig mit dem JQ6500 befaßt. 
Allerdings will ich ihn mit dem internen Flash-Speicher als 
Jingle-Generator bzw. Türklingel verwenden und dafür ist er perfekt.

Du hast richtig erkannt, daß er (zumindest soweit dokumentiert) nicht 
für MP3-Streaming vorgesehen ist, sondern nur zum Abspielen von 
MP3-Dateien, die auf SPI-Flash, SD-Karte oder USB-Stick liegen. Evtl. 
könnte es klappen, mit dem Contoller, der die Streaming-Daten anliefert, 
ein SPI-Flash zu emulieren und darüber die Daten dem JQ6500 zu 
übergeben, die Frage ist nur, ob sich der Aufwand lohnt.

Übrigens habe ich das Format des (Pseudo-)Dateisystems analysiert, in 
dem der JQ6500 seine MP3-Daten auf dem SPI-Flash haben will und ein 
Linux-Programm geschrieben, um die Dateien via USB in diesem Format zu 
flashen, so daß man die mitgelieferte Windows-Krücke nicht mehr braucht.

von Jim M. (turboj)


Lesenswert?

R. M. schrieb:
> Evtl.
> könnte es klappen, mit dem Contoller, der die Streaming-Daten anliefert,
> ein SPI-Flash zu emulieren

Da bräuchte man schon einen FPGA. Mit normalen µC SPI Slave keine Chance 
da zu langsam.

von Marco G. (flaschenpost)


Lesenswert?

Danke für die Infos! Ein Linux-Zugang wäre schon toll, ich finde über 
USB da nur die "CD" auf dem ISO9660.

Zum mp3-Dekodieren werde ich wohl absurderweise eine GPGPU nehmen 
(stm32F10), da das komplette Board nur einen Bruchteil einer VS1053 
kostet. Leider hat gerade dieses STM32 keinen DAC, sonst wäre es noch 
bequemer.

Mein Kollege hat schon die Vermutung geäußert, dass es aus mp3- 
Lizenzgründen billiger ist, einen "gekapselten" mp3-Chip statt eines 
offenen Streaming-Chips zu verkaufen.

Es ist ja so weit ich sehen konnte nicht nur der JQ6500, sondern alles 
preislich unterhalb des VS1053, was so verschlossen ist.

von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe mir den Spaß mal gemacht, ein VS1003-Board (findet man für ca. 
12€ in Deutschland) und einen ESP8266 zusammenzusperren.

Läuft hier lokal als Streamplayer für einen eigenen ICEcast-Stream von 
einem RasPi. Prinzipiell stabil, real nur nutzbar mit ungestörtem WLAN, 
der verfügbare Ram des ESP ergibt eigentlich zu wenig Puffer.
Eine Version mit dem STA013 liegt auch noch rum, den hatte ich von 
früher noch rumliegen.

Die MP3-Decoder-ICs sind einfach am Aussterben weil das heute eben ein 
billiger ARM-Core nebenbai in Software erledigt.
In Software auf dem ESP8266 ist es auch gemacht worden, ist aber auch 
praktisch kaum nutzbar.

Gruß aus Berlin
Michael

von R. M. (rmax)


Lesenswert?

Marco G. schrieb:
> Ein Linux-Zugang wäre schon toll, ich finde über
> USB da nur die "CD" auf dem ISO9660.

Die emulierte CD, die der Chip über USB präsentiert umfaßt nicht nur das 
ISO-Image, sondern den komplettem Flash-Speicher und das sogar mehrfach 
hintereinander. Wenn man das roh einliest, anstatt die CD zu mounten, 
kann man hinter dem ISO weiterlesen und bekommt dann die MP3-Daten zu 
sehen. Einen kompletten Dump der 2MB Flash kann man z.B. so machen:
1
dd if=/dev/sr1 of=JQ6500.dump bs=1024 count=2048

Darin sind die ersten 256kiB für das ISO-Image reserviert (davon werden 
im Auslieferungszustand ca. 170kiB benutzt) und ab Offset 0x40000 
beginnt das "MP3-Dateisystem". Das besteht abgesehen von den 
eigentlichen Daten aus 32Bit Integern mit folgender Funktion:

 0x40000: - Anzahl der Subdirectories
          - Offset1
          - Offset2
          - ...
 Offset1: - Anzahl der Einträge in diesem Dir
          - Offset von Datei1
          - Länge von Datei1
          - ...
 Offset2: ...

Dabei kann man die Metadaten zuerst und dann alle Nutzdaten platzieren 
oder man platziert die Nutdaten des ersten Verzeichnisses direkt hinter 
diesem und dahinter dann die Metadaten des zweiten und so weiter.

Diese Struktur kann man leider nicht direkt auf das Device (z.B. 
/dev/sr1) schreiben, denn als emulierte CD ist das nicht beschreibbar. 
Durch Sniffen des USB-Datenverkehrs des Windows-Programms habe ich aber 
herausgefunden, daß es drei proprietäre SCSI-Kommandos gibt, mit denen 
man den Flash blockweise löschen und mit wahlfreiem Zugriff schreiben 
und zurücklesen kann.

Es wird mit dem SCSI-Generic Device aufgerufen, das der Kernel der 
virtuellen CD zugeordnet hat (z.B. /dev/sg3) und einer oder mehreren 
MP3-Dateien, die es dann hochlädt, falls genug Platz da ist.

Ich will nochmal drüberschauen, bevor ich das Tool hier zur Verfügung 
stelle und kann noch nicht versprechen, daß das heute noch klappt.

Das will ich künftig noch einbauen:

1. Die Möglichkeit ein ISO-Image anzugeben, das dann in die ersten 
256kiB geflasht wird. Auf die Weise kann das Modul so verändert werden, 
daß es auf der CD (auch oder ausschließlich) das Linux-Tool mitbringt.

2. Nachdem sich der Flash-Inhalt im dd-Dump immer wieder wiederholt, 
wenn man das nicht künstlich beschränkt, müßte es eigentlich auch 
möglich sein, den kompletten Specher für MP3s zu nutzen, indem man am 
Ende angekommen einfach vorne weiter macht, aber natürlich nicht über 
die 256kiB-Grenze hinaus. In dem Fall würde ein PC natürlich dann kein 
gültiges ISO-Dateisystem mehr erkennen.

3. Evtl. wäre es sogar möglich, ein hybrides ISO-Image zu bauen, das 
über den ganze Flash-Speicher geht und die MP3s damit auch für den PC 
abspielbar macht. Dazu müßte man es schaffen, innerhalb des ISO bei 
Offset 0x40000 eine hinreichend große Datei zu platzieren, in die 
nachträglich die Struktur des Primitiv-Dateisystems hineingepatcht wird, 
mit den Offsets und Längen, die die MP3s im ISO bekommen haben.

Noch eine Sache, die mir aufgefallen ist: An einigen USB-Hostcontrollen 
wird der Chip nicht komplett initialisiert und kann in der Folge dann 
auch nicht geflasht werden. Ich konnte das durch Zwischenschalten eines 
USB-Hubs (unpowered) lösen. Ich vermute, daß das Device hart am Rand der 
USB-Spezifikation implementiert ist und deshalb nicht jeder 
Host-Controller damit zurecht kommt.

von grundschüler (Gast)


Lesenswert?

der vs1053 kostet aus china 6,25€. Mit Glück ca. 3Wochen. Durch die 
bessere Dokumentation lohnen sich die 3€ Mehrkosten allemal.

von R. M. (rmax)


Lesenswert?

grundschüler schrieb:

> der vs1053 kostet aus china 6,25€. Mit Glück ca. 3Wochen. Durch die
> bessere Dokumentation lohnen sich die 3€ Mehrkosten allemal.

Für den Einsatzzweck des TO gebe ich Dir recht: Wenn man gestreamtes MP3 
von einem eh vorhandenen Controller abspielen will, ist man mit dem 
VS1053 besser bedient.

Für meinen Fall, wo es darum geht, mehrere gespeicherte Sounds auf 
Knopfdruck jeweils einmal abzuspielen, ist der JQ6500 aber besser 
geeignet, weil der das für bis zu 5 Sounds ohne externen Controller kann 
und für 2,50€ auch gleich noch 2MB Flash und einen NF-Verstärker 
mitbringt, so daß man nur noch Stromversorgung, Taster und einen 
Lautsprecher anschließen muß.

von Michael S (Gast)


Lesenswert?

Hi,

und kannst du das Tool mittlerweile bereitstellen?
Ansonsten würde ich mich auch ranmachen ein Tool dafür zu programmieren
da die Windows Software ja mega undurchsichtig ist.

Gruß
Michael

von R. M. (rmax)


Lesenswert?

Michael S schrieb:
> und kannst du das Tool mittlerweile bereitstellen?

Ja, schau mal hier:
http://chiselapp.com/user/rmax/repository/jq6500/home

Punkt 1 meiner Wishlist von oben habe ich inzwischen auch noch eingebaut 
und meine Annahme von Punkt 2 hat sich bestätigt.

Punkt 3 und etwas mehr Dokumentation stehen noch aus.

Für ein eigenes ISO-Image sollte mkisofs übrigens mit -no-pad aufgerufen 
werden, sonst wird das Image zu groß.

: Bearbeitet durch User
von Michael S (Gast)


Lesenswert?

Na das ist doch super. Eventuell kann ich bei den fehlenden Features 
noch aushelfen.

Gruß
Michael

von R. M. (rmax)


Lesenswert?

Jetzt auch mit automatischer Suche nach dem richtigen SG-Device, damit 
man das nicht mehr raten oder es händisch aus den Kernel-Meldungen 
heraussuchen muß.

von R. M. (rmax)


Lesenswert?

Das mit dem hybriden ISO-Image, in dem auch die MP3-Dateien auftauchen 
habe ich jetzt auch hinbekommen, allerdings bisher nur halb geskriptet, 
halb händisch. Ob und wie ich das noch in das Tool einbaue, muß ich mal 
schauen.

Eigentlich ist es ja nur eine Spielerei und treibt die Upload-Zeiten 
unnötig in die Höhe, weil man die ersten 256kiB jedes Mal mitschreiben 
muß. Außerdem geht durch die Blockgröße von 2kiB etwas mehr Platz 
verloren als wenn man die MP3s hinter dem ISO direkt aneinanderkleben 
kann.

: Bearbeitet durch User
von R. M. (rmax)


Lesenswert?

Michael S schrieb:

> Eventuell kann ich bei den fehlenden Features noch aushelfen.

Tja, wie ich gerade sehe, hast Du stattdessen das Projekt 
stillschweigend geforkt und dabei mal eben noch die Lizenz geändert.

Schade, und genau genommen ein Verstoß gegen meine Lizenz, denn da heißt 
es:"As long as you retain this notice [...]", und genau das hast Du 
gelöscht.

: Bearbeitet durch User
von Uli M. (uli_m)


Lesenswert?

Habe zwei Module. Bei beiden taucht ein CD-Laufwerk auf. Auf das kann 
ich jedoch nicht zugreifen, es wäre angeblich beschädigt. So die Windows 
7 Meldung. Was mache ich falsch?
Gibt es das Flashtool auch so zum Download?

Danke

Uli

von R. M. (rmax)


Lesenswert?

Das könnte das USB-Problem sein, das ich auch auf verschiedenen Boards 
unter Linux beobachtet habe. Versuch mal, das Modul über einen USB-Hub 
anzuschließen.

von Uli M. (uli_m)


Lesenswert?

Sorry ich verwende kein Linux, sondern Windows. Auch auf meinem MacBook 
wird es als defekt gezeigt. Kannst Du mir den Inhalt der CD geben

Danke

Uli

von R. M. (rmax)


Angehängte Dateien:

Lesenswert?

Uli M. schrieb:

> Sorry ich verwende kein Linux, sondern Windows.

Das hatte ich schon verstanden, ich gehe aber davon aus, daß es sich um 
ein Hardwareproblem handelt, das vom Betriebssystem unabhängig ist. Die 
Module scheinen an manchen Host-Controllern einfach nicht richtig zu 
funktionieren.
Ich vermute, sie implementieren den USB-Standard so schlampig, daß 
manche Controller damit nicht klarkommen. Die These, daß es am 
Host-Controller und  nicht am OS liegt, konnte ich bisher aber nicht 
überprüfen, weil auf meinen betroffenen Rechnern nur Linux installiert 
ist.

Warum versuchst Du es nicht einfach mal mit einem Hub?
Das schlimmste, was passieren kann ist, daß es damit auch nicht geht. ;)

Falls es bei Dir mit Hub funktioniert, würde mich interessieren, welche 
Chipsätze in den betroffenen Rechnern verbaut sind.

> Kannst Du mir den Inhalt der CD geben

Ich hänge das ISO hier mal an. Wenn meine Annahme stimmt und es wirklich 
ein USB-Problem ist, wird Dir das aber auch nicht helfen.

: Bearbeitet durch User
von Uli M. (uli_m)


Lesenswert?

Super, danke.
Werde es heute Abend testen und berichten.

von R. M. (rmax)


Lesenswert?

Uli M. schrieb:

> Werde es heute Abend testen und berichten.

Ich warte gespannt... ;)

von Uli M. (uli_m)


Lesenswert?

Weder an meinem MacBook noch an meinem windows Laptop hat es mit dem 
ersten Hub nicht funktioniert. Werde mal noch bei mir im Geschäft 
versuchen

von R. M. (rmax)


Lesenswert?

Für Hubs mag natürlich das gleiche gelten wie für Host-Controller, daß 
manche mit der als grenzwertig angenommenen USB-Implementierung des 
JQ6500 zurecht kommen und andere nicht.

Oder meine komplette Theorie ist Mist und es liegt an was ganz anderem. 
;)

Ach, noch was: man kann den JQ6500 nach dem Anstecken nur so lange per 
USB ansprechen wie er noch nichts abgespielt hat. Beim ersten "Play" 
meldet er sich vom Bus ab und taucht erst wieder auf, wenn man ihn ab, 
und wieder ansteckt.

Deshalb sollte er, wenn man ihn zum Flashen an den Rechner steckt, auch 
nur über USB versorgt werden, damit er nicht aus versehen schon beim 
Anstecken im "USB interessiert mich nicht"-Modus ist.

von Uli M. (uli_m)


Lesenswert?

So gerade eben auf einem neuen Windows 10 Rechner versucht, ohne Erfolg. 
Das sind Müll-Teile. Sollen die Chinesen damit glücklich werden. Da gibt 
es dann JQ6500 süß-sauer.

danke nochmal für deine Hilfe

von R. M. (rmax)


Lesenswert?

Blöde Frage, aber hast Du das Kabel als Fehlerquelle ausgeschlossen?
Ich hatte erst neulich wieder einen Fall, an dem USB-Probleme am Kabel 
lagen.

von Uli M. (uli_m)


Lesenswert?

Drei unterschiedliche Kabe, mehrere Hubs und PC mit diversen BS

von Klaus344 (Gast)


Lesenswert?

Habe mir auch ( blöderweise gleich 10 ) von den Dingern bestellt und das 
gleiche Problem ( unter Windows ). Mehrere Rechner, mehrere Kabel und 
auch das mit dem HUB habe ich probiert, aber bisher verliefen alle 
Versuche negativ. Unter dem für das CD-Laufwerk erzeugten Buchstaben 
lassen sie sich einfach nicht aufrufen und es kommt nur immer die 
bekannte Fehlermeldung.

Ich kann mir nicht vorstellen, dass es nicht doch eine Lösung gibt oder 
bleibt nur die Mülltonne?

von R. M. (rmax)


Lesenswert?

Klaus344 schrieb:

> Ich kann mir nicht vorstellen, dass es nicht doch eine Lösung gibt oder
> bleibt nur die Mülltonne?

Falls Du die Dinger noch hast, kann ich Dir anbieten, mal eines davon 
(gerne auch alle) bei mir zu testen, wenn Du es mir zuschickst. Ich habe 
ja mehrere Hosts, an denen meine drei Exemplare direkt funktionieren und 
mindestens einen Hub, der sie an den Hosts zum laufen bringt, an denen 
sie bei direktem Anschluß streiken.

Mit einem Raspberry Pi 3 und meinem Linux-Tool soll es angeblich auch 
funktionieren, selber ausprobiert habe ich es mangels RasPi aber noch 
nicht.
https://askubuntu.com/questions/931173/terminal-do-not-list-jq6500-chip-ubuntu-16-04-2-lts-but-okay-with-ubuntu-mat

Vielleicht wäre das ja noch eine Option für Dich.

: Bearbeitet durch User
von R. M. (rmax)


Lesenswert?

Wie ich inzwischen erfahren habe, werden die Module wohl teilweise auch 
mit leerem Flash ausgeliefert, d.H. das normalerweise enthaltene 
CD-Image mit dem Windows-Tool fehlt.

Das würde die Probleme von Uli und Klaus erklären, die trotz 
verschiedener Rechner und zwischengeschalteter Hubs keinen Erfolg 
hatten.

Solche Module können mit dem Linux-Tool natürlich trotzdem bespielt 
werden bzw. kann das Linux-Tool dazu verwendet werden, das CD-Image 
eines intakten Moduls auf ein leeres zu flashen, dann funktioniert es 
auch wieder mit Windows.

: Bearbeitet durch User
von Klausi (Gast)


Lesenswert?

Habe ich das richtig verstanden, dass wenn das "JQ6500-original.iso"
auf das Modul geschrieben wird, das JQ6500  mit dem "Music Update tool" 
dann unter Windows mit Audio-Dateien geflasht werden kann?

Wenn ja,mit welchen Argument-Angaben beim Linux-Tools "JQ6500" kann das 
"JQ6500-original.iso " auf das Modul geflasht werden?

weitere Frage: Mit welchen Argument-Angaben beim Linux-Tools "JQ6500" 
können
die bestehenden Audio-Files des Moduls gelöscht werden?

Vielen Dank

Klausi

von R. M. (rmax)


Lesenswert?

Klausi schrieb:
> Habe ich das richtig verstanden, dass wenn das "JQ6500-original.iso"
> auf das Modul geschrieben wird, das JQ6500  mit dem "Music Update tool"
> dann unter Windows mit Audio-Dateien geflasht werden kann?

Genau, vorausgesetzt der Grund für die bisherige Nicht-Funktion unter 
Windows war ein leerer Flash und nicht das weiter oben beschriebene 
USB-Problem.

> Wenn ja,mit welchen Argument-Angaben beim Linux-Tools "JQ6500" kann das
> "JQ6500-original.iso " auf das Modul geflasht werden?

$ jq6500 -r -o 0 JQ6500-original.iso

Der Schalter -r wählt den Raw-Mode, angebenene Datei wird also 1:1 
geschrieben, ohne das Pseudo-Filesystem, das nötig ist, um MP3s zu 
schreiben. Die Option -o 0 sagt dem Tool, dass es den Flash nicht ab 
Adresse 0x40000 beschreiben soll, wo die MP3s anfangen, sondern ab 
Adresse 0, wo das ISO-Image liegt.

> weitere Frage: Mit welchen Argument-Angaben beim Linux-Tools "JQ6500"
> können die bestehenden Audio-Files des Moduls gelöscht werden?

Eine reine Löschfunktion hat das Tool bisher nicht, sollte ich 
vielleicht mal noch einbauen. Das Schreiben neuer Files löscht aber 
immer die bestehenden, bzw. macht die Reste für den Normalbetrieb 
unerreichbar, falls die alten Daten größer waren als die neuen.

Falls Du die Daten(-Reste) aber so aus dem Flash löschen willst, dass 
sie auch per USB nicht mehr auslesbar sind, ohne sie gleich mit neuen 
MP3s zu überschreiben, erzeugst Du am besten eine entsprechend große 
(2MB-256kB = 1792kB) Datei aus Nullbytes und überschreibst damit im 
Raw-Mode den Flash ab 0x40000.

$ dd if=/dev/zero of=nullfile bs=1024 count=1792
$ jq6500 -r nullfile

von R. M. (rmax)


Lesenswert?

Es gibt seit kurzem ein kleines Rescue-Linux, mit dem man menügeführt 
das fehlende ISO-Image auf ein JQ6500-Modul flashen kann, das mit leerem 
Flash geliefert wurde oder wenn man das Image versehentlich 
überschrieben hat:

https://github.com/NikolaiRadke/JQ6500-rescue-tool

Damit läßt sich so ein Modul dann auch wieder unter Windows befüllen.

: Bearbeitet durch User
von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe inzwischen mal etwas mit dem ESP32 rumgespielt.
MP3/FLAC/Amiga-Mod/GM klappen von SD bzw. SPIFFS, Ausgabe auf einen 
I2S-DAC oder mit den internen DACs.
WLAN-Streaming MP3 klappt incl. Webserver und LCD-Display für die 
Anzeige der TAGs.
Alles noch etwas experimetell, läuft aber stabil durch auch in meinem 
hier sehr ausgelasteten WLAN reicht bei MP3 der Buffer bisher aus.
https://github.com/earlephilhower/ESP8266Audio als Spielwiese.

Mein Bekannter hat auch FLAC von SD-karte in 24Bit/192kHz mit I2S-DAC 
stabil abgespielt. :)

Gruß aus Berlin
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.