Forum: Mikrocontroller und Digitale Elektronik Nutzung eines SPI-Flash durch zwei Mikrocontroller


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas E. (Firma: privat) (iseldur)


Lesenswert?

Hallo,

für ein Projekt nutze ich einen PIC24FJ256GA704. Dieser steuert im 
Projekt sämtliche Peripherie inklusive eines JQ8400 Soundchip über UART.
Wenn der der JQ8400 Musik abspielen soll, holt er sich die 
entsprechenden Daten von einem 32 Mbit Flash Speicher.
Im Prinzip läuft das Ganze wie auf einem JQ8400-Fl Board welches man bei 
Ali für wenig Geld kaufen kann. So ein Board funktioniert sehr gut. Das 
ganze habe ich schon getestet. Auch die Ansteuerung via UART ist recht 
einfach.

https://de.aliexpress.com/item/1005005462625040.html

Allerdings möchte ich nun auch mit dem PIC24 auf den Flashspeicher 
zugreifen, um dort vorher abgelegte Bilddateien auf einem TFT 
anzuzeigen.
D.h. ich möchte sowohl mit dem PIC als auch mit dem JQ8400 auf den 
gleichen Flashspeicher zugreifen, allerdings nie zur gleichen Zeit.
Bis jetzt habe ich nur die Lösung gefunden, die einzelnen SPI Leitungen 
vom PIC und dem JQ8400 über zwei 74HC4053 zu führen und den jeweiligen 
Ausgang an den Flashspeicher anzuschließen.

Die einzelnen Komponenten vom JQ8400 Board sollen später auf einem 
gemeinsamen PCB mit dem PIC und dem TFT und ein bisschen Hühnerfutter 
platziert werden, wenn die Patine entsprechend dem Design erstellt ist.

Ich hoffe die Erklärung war verständlich.

Meine Frage ist nun, gibt es eine einfachere Lösung als 2 Mux/Demux 
Chips wie den 74HC4053 zu nehmen?

Beim PIC24 ist es kein Problem die SPI Schnittstelle, wenn Musik 
abgespielt wird, auf Tri-State zu setzen. Beim JQ8400 kann ich das aber 
nicht, es gibt auch nirgendwo ein Datenblatt über den Chip als solches, 
leider nur eines über das Board, in dem nur beschrieben beschrieben 
wird, wie man den JQ8400 über UART ansteuert, um Musik abspielen zu 
können.

Gruß Thomas

von Tic T. (dingsdk)


Lesenswert?

PIC ist bei mir schon länger her, aber könntest du nicht den Flash an 
den PIC hängen und den JQ8400 an die „Configurable Logic Cell“ des PIC 
und dann darüber die Verbindung zum Flash zu steuern?
(KA ob man mit der In und Out durchscahlten kann, war grad so ne Idee)

: Bearbeitet durch User
von Thomas E. (Firma: privat) (iseldur)


Lesenswert?

Tic T. schrieb:
> PIC ist bei mir schon länger her, aber könntest du nicht den Flash an
> den PIC hängen und den JQ8400 an die „Configurable Logic Cell“ des PIC
> und dann darüber die Verbindung zum Flash zu steuern?
> (KA ob man mit der In und Out durchschalten kann, war grad so ne Idee)

Das ist sicher ein guter Ansatz, aber leider habe ich kaum noch Pins 
frei für die Configurable Logic Cell und des weiteren habe ich mich 
damit noch nie beschäftigt. Da muss ich mich erstmal einlesen.
Danke für den Tipp

von Thomas E. (Firma: privat) (iseldur)


Angehängte Dateien:

Lesenswert?

Ich habe mal einen Entwurf eines Schaltbildes gezeichnet. Es sind nur 
die Komponenten drauf auf die es ankommt, alles andere habe ich zur 
Vereinfachung weggelassen.(Auch die Abblockkondensatoren)
Da der JQ8400 nur 3 PIN SPI hat, habe ich das Design mit dem 100 Ohm 
Widerstand vom JQ8400 Board erstmal übernommen.
Der 10k Widerstand ist nur dazu da, um beim Einschalten einen 
definierten Zustand herzustellen.

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> Meine Frage ist nun, gibt es eine einfachere Lösung als 2 Mux/Demux
> Chips wie den 74HC4053 zu nehmen?

1. Du hast zugriff auf die Firmaware und kannst du anpassen.
   Faellt also wohl weg.

2. Du hast zugriff auf die Resetleitung des Moduls und kannst denn
   in Reset halten. Dann sollte er seine Leitungen zum Flash auch
   hochomig haben.

3. Deine Loesung mit dem umschalten aller Signale.

4. Logicgatter! Den Datenausgang vom Flash kannst du ja problemlos
   an beide Controller anschliessen. Was anderes sind die anderen
   Leitungen. Schau dir den Ruhepegel an und ueberlege dir wie
   du die mit einem And/Nand/Nor Gatter verknueppern kannst.
   Du musst dann den Player nur in einen Modus bringen wo du weisst
   das er gerade nicht zugreift und kannst dann einfach drauf zugreifen.

Vanye

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Fassen wir mal zusammen: Zwei Master an einem SPI-Bus, und über einen 
der Master (JQ8400) hast du keine Kontrolle.

D.h. die Master können gegenseitig die Datenübertragung stören. Das 
Ganze ist nicht in erster Linie ein Hardware-Problem, sondern ein 
Steuerungs-/Timing-Problem und damit ein deinem Fall ein 
Softwareproblem. Da du nur den PIC programmieren kannst musst du dort 
höllisch aufpassen, dass du nicht in die Datenübertragung des JQ8400 
rein pfuschst und irgendwie dafür sorgen dass der JQ8400 nichts versucht 
während der PIC Daten überträgt.

Zur Hardware: Ich würde die Umschaltung (egal ob mit Logikbausteien oder 
analogen Schaltern) über die /CS-Leitung eines der Master steuern. Ich 
sehe keinen Grund eine zusätzlichen Pin des PIC zur Umschaltung zu 
verwenden.

von Harald A. (embedded)


Lesenswert?

Ich würde den Ansatz mit dem Reset des JQ8400 verfolgen. Zusatzaufwand 
nur eine Leitung und neu starten wird man den sowieso müssen, wenn man 
ihm hinter seinem Rücken die Daten ändert.

von Thomas E. (Firma: privat) (iseldur)


Angehängte Dateien:

Lesenswert?

Harald A. schrieb:
> Ich würde den Ansatz mit dem Reset des JQ8400 verfolgen. Zusatzaufwand
> nur eine Leitung und neu starten wird man den sowieso müssen, wenn man
> ihm hinter seinem Rücken die Daten ändert.

Leider kann ich den JQ8400 nicht direkt in einen Reset Status bringen, 
da er keinen Reset Pin hat. Ob man ihn über UART oder 1-Wire in eine Art 
Resethaltung bringen kann, so dass die SPI Pins Tri-State sind weiß ich 
nicht. Darüber gibt es leider nicht genug Informationen von Seiten des 
Datenblatts bzw des Herstellers.

Ich habe mal den Schaltplan von einem JQ8440 MP3 Board und ein ins 
englische übersetztes Datenblatt mit angehängt. Vielleicht habe ich da 
ja was übersehen.

Ansonsten habe ich mal über die CLC des PIC24 etwas schlauer gemacht. 
Das klingt sehr vielversprechend. Durch ein anderes Design des PIC24 
könnte ich die nötigen Pins freischaufeln. Ich werde in den nächsten 
Tagen erstmal diesen Ansatz weiter verfolgen.

Thomas

von Frank K. (fchk)


Lesenswert?

Mal ganz dumm gefragt: Warum nimmst Du nicht für den PIC24 ein extra 
Flash? Damit ist das Problem gelöst.

Meine Vermutung: Über den Audio-Chip werden die ganzen Daten per USB ins 
Flash geladen. Da gibts genug PIC24 und dsPIC33, die auch USB-Hardware 
haben, und Microchip hat für Dich einen kompletten USB-Stack mit CDC, 
HID und Mass Storage. Dann einen 2-Port USB Hub, und die Sache wäre ohne 
Klimmzüge gegessen.

fchk

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> Mal ganz dumm gefragt: Warum nimmst Du nicht für den PIC24 ein extra
> Flash? Damit ist das Problem gelöst.

Man koennte auch noch duemmer fragen wieso man ueberhaubt noch einen 
extra MP3 Mikrocontroller verwenden will. :-D
Ich hab das mal so vor 8-9Jahren mit einer fertigen MP3-Lib auf einem 
200Mhz Controller gemacht der damals zu 50% ausgelastet war wenn er auch 
320kbit MP3 abspielen sollte. Ich denke mal fuer irgendeinen einfachen 
Firlefanz wie Tuerklingel, Spielzeug, bekommt man problemlos auf einen 
aktuellen 50Mhz Controller hin. Ein RP2040 fuer 1Euro sollte das 
muehelos schaffen.

Vanye

von Thomas E. (Firma: privat) (iseldur)


Lesenswert?

Frank K. schrieb:
> Meine Vermutung: Über den Audio-Chip werden die ganzen Daten per USB ins
> Flash geladen. Da gibts genug PIC24 und dsPIC33, die auch USB-Hardware
> haben, und Microchip hat für Dich einen kompletten USB-Stack mit CDC,
> HID und Mass Storage. Dann einen 2-Port USB Hub, und die Sache wäre ohne
> Klimmzüge gegessen.

Da hast du vollkommen recht. Ich kann die Musik- und Bilddaten sehr 
einfach vom PC übertragen. Leider sind meine Kenntnisse sehr, sehr 
rudimentär in Bezug auf USB-Stack mit CDC, HID und Mass Storage und 
allgemein ist USB auch nicht wirklich einfach im Gegensatz zu SPI, I2C 
oder UART.
Ich habe mich vor Jahren mal als Autodidakt in die Mikrocontroller Welt 
eingearbeitet, hatte beruflich nie damit zu tun gehabt.

Vanye R. schrieb:
> Ich denke mal fuer irgendeinen einfachen
> Firlefanz wie Tuerklingel, Spielzeug, bekommt man problemlos auf einen
> aktuellen 50Mhz Controller hin. Ein RP2040 fuer 1Euro sollte das
> muehelos schaffen.

Da hast du sicherlich recht. Aber dann müsste ich mich in den RP2040 
einarbeiten. Mit dem habe ich noch nie gearbeitet. Ich weiß auch nicht, 
ob die Hardware besonders geeignet ist um mit Batterien betrieben zu 
werden.
Bei dem Projekt handelt es sich tatsächlich um ein Spielzeug, aber die 
MP3 Files beinhalten sowohl Musik als auch Sprache. Über die USB 
Anbindung des JQ8400  schien der gemeinsame Zugriff auf den Flash für 
meine übersichtlichen Hard und Softwarekenntnisse der geeignete Weg.

Thomas

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Thomas E. schrieb:
> Da hast du vollkommen recht. Ich kann die Musik- und Bilddaten sehr
> einfach vom PC übertragen. Leider sind meine Kenntnisse sehr, sehr
> rudimentär in Bezug auf USB-Stack mit CDC, HID und Mass Storage und
> allgemein ist USB auch nicht wirklich einfach im Gegensatz zu SPI, I2C
> oder UART.
> Ich habe mich vor Jahren mal als Autodidakt in die Mikrocontroller Welt
> eingearbeitet, hatte beruflich nie damit zu tun gehabt.

Mit diesen Voraussetzungen wuerde ich an deiner Stelle stumpf das so mit 
den Multiplexern machen. Vielleich noch mal gucken: Die "normalen" 
Analogschalter sind bei kleinen Betriebsspannungen eher hochohmig. Da 
gibts speziell fuer niedrige Betriebsspannungen gepimpte, pinkompatible 
Alternativen.

Gruss
WK

von Rahul D. (rahul)


Lesenswert?

Thomas E. schrieb:
> Bis jetzt habe ich nur die Lösung gefunden, die einzelnen SPI Leitungen
> vom PIC und dem JQ8400 über zwei 74HC4053 zu führen und den jeweiligen
> Ausgang an den Flashspeicher anzuschließen.

SPI sind Digitalsignale. Zum Schalten derer verwendet man Logik-Gatter 
oder Bus-Transceiver.
Mit Open-Collector-/ -Drain-Ausgängen und Enable-Eingängen, ließe sich 
sowas sicherlich realisieren.
Bei zwei Geräten braucht man auch nur eine Steuerleitung.
Man muss halt detektieren, ob dein Soundchip gerade auf das FLASH 
zugreift ("Busy"-Leitung?!)

Für sowas stellt man Logiktabellen auf...

von Frank K. (fchk)


Lesenswert?

Dergute W. schrieb:

> Mit diesen Voraussetzungen wuerde ich an deiner Stelle stumpf das so mit
> den Multiplexern machen. Vielleich noch mal gucken: Die "normalen"
> Analogschalter sind bei kleinen Betriebsspannungen eher hochohmig. Da
> gibts speziell fuer niedrige Betriebsspannungen gepimpte, pinkompatible
> Alternativen.

Anstelle von Analogschaltern solltest Du das ganze mit einem 74HC125 und 
einem 74HC126 lösen.
https://www.ti.com/lit/ds/symlink/sn74hc125.pdf
https://www.ti.com/lit/ds/symlink/sn74hc126.pdf

In jedem Chip sind 4 Puffer enthalten, die das Signal am Eingang auf den 
Ausgang leiten. Jeder Puffer hat einen Steuereingang, mit dem man den 
Ausgang hochohmig (quasi abschalten) kann. Beim 74HC125 schaltet ein Low 
den jeweiligen Puffer ein und ein High aus, beim 74HC126 ist es 
umgekehrt.

Die Signale vom PIC führst Du durch den einen Chip, den vom Musikchip 
durch den anderen. Dann kannst Du mit den Steuersignalen zwischen den 
beiden umschalten, und es ist echt digital.

fchk

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Mal als Idee:

Wenn der Flashspeicher nur an einem µC verbunden wäre.
Dieser erste µC hat einen zweiten SPI oder UART, der dann mit dem 
zweiten µC verbunden ist. Wenn der zweite Daten will, dann werden diese 
über den ersten µC geleitet.

Vorteile:
- Keine extra Bauteile
- Keine Probleme bei möglichem doppeltem Zugriff, bzw. Abgleich wer denn 
nun darf.
- Die Kommunikation Flash <> µC ist immer konsistent, da nur einer das 
managt.

von Frank K. (fchk)


Lesenswert?

Markus M. schrieb:
> Mal als Idee:
>
> Wenn der Flashspeicher nur an einem µC verbunden wäre.
> Dieser erste µC hat einen zweiten SPI oder UART, der dann mit dem
> zweiten µC verbunden ist. Wenn der zweite Daten will, dann werden diese
> über den ersten µC geleitet.
>
> Vorteile:
> - Keine extra Bauteile
> - Keine Probleme bei möglichem doppeltem Zugriff, bzw. Abgleich wer denn
> nun darf.
> - Die Kommunikation Flash <> µC ist immer konsistent, da nur einer das
> managt.

Nachteil: SPI hat keine Flusskontrolle. Wenn der dazwischen hängende 
Controller nicht schnell genug ist, gibt es unweigerlich Datenverlust. 
Du kannst den Musik-Chip nicht ausbremsen und nur bedingt steuern. Dumme 
Idee also.

fchk

von Thomas E. (Firma: privat) (iseldur)


Lesenswert?

Frank K. schrieb:
> Anstelle von Analogschaltern solltest Du das ganze mit einem 74HC125 und
> einem 74HC126 lösen.

Danke, das ist ein guter Tipp. Den 74HC125 u. 74HC126 werde ich mir mal 
näher anschauen.
Wenn das mit der CLC nicht klappt, werde ich es mit den 74HC125/74HC126 
versuchen.

Vielen Dank an alle für die vielen konstruktiven Vorschläge. Mir ist 
durchaus bewusst, dass meine Herangehensweise sicher keine 
Expertenlösung ist, aber ich muss erstmal mit dem arbeiten, was ich an 
Wissen zur Verfügung habe und dazu gehört leider nicht USB im direkten 
Anschluss an einen PIC.

Gruß Thomas

: Bearbeitet durch User
von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Thomas E. schrieb:
> Danke, das ist ein guter Tipp. Den 74HC125 u. 74HC126 werde ich mir mal
> näher anschauen.
> Wenn das mit der CLC nicht klappt, werde ich es mit den 74HC125/74HC126
> versuchen.

Es geht einfacher. Es reicht EIN einfacher Multiplexer, wer hätte DAS 
gedacht?
Siehe Anhang. MISO kann man direkt verbinden, das sind 2 Eingänge, 
welche vom Flash getrieben werden.

von Thomas E. (Firma: privat) (iseldur)


Lesenswert?

Falk B. schrieb:
> Es geht einfacher. Es reicht EIN einfacher Multiplexer, wer hätte DAS
> gedacht?
> Siehe Anhang. MISO kann man direkt verbinden, das sind 2 Eingänge,
> welche vom Flash getrieben werden.

Danke für den Hinweis Falk B. ich werde den 74HC157 mit in meine 
weiteren Überlegungen aufnehmen.

Thomas E.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Falk B. schrieb:

> Es geht einfacher. Es reicht EIN einfacher Multiplexer, wer hätte DAS
> gedacht?
> Siehe Anhang. MISO kann man direkt verbinden, das sind 2 Eingänge,
> welche vom Flash getrieben werden.

Und sogar den Steuerpin am PIC könnte man noch einsparen, indem man 
einfach das CS vom MP3-Chip als Kanalwahlsignal benutzt.

Blöd ist natürlich, dass der PIC dann nicht sicher sein kann, dass er 
gültige Daten liest. Aber besser der PIC, auf den der TO Zugriff hat und 
eine Validitätsprüfung einbauen kann als der MP3-Chip, der beliebigen 
Müll machen kann, wenn er ungültige Daten liest. Und der sich ja nicht 
mal resetten läßt, wenn er sich deswegen aufhängt.

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.