Hallo, was genau machen diese Pins BLS3 — LOW-active Byte Lane Select signal (Bank 3) bei einem µC? Zihat
Versuch mal, in einen 32bit breiten externen Speicher ein einziges Byte reinzuschreiben ohne die übrigen 3 Bytes zu ändern. Da gibt's zwei Möglichkeiten: du musst erst 32bit lesen dann 32bit schreiben, oder es gibt für jedes Byte ein Enable-Signal.
... leider noch nicht ganz verstanden... also der µC hat einen 32Bit breiten Datenbus... 32Bit = 4 Byte -> 4 Lane Select Signal-Leitungen... ok und mit jeder solcher Leitung aktiviere ich entweder die D0-D7 oder D8-D15 etc. damit Bits in den Speicher geschrieben werden können oder gelesen werden können... ich hoffe das ich bis hier hin richtig liege... aber wie muss ich jetzt diese Pins Lane Select Signals an den externen Speicher anschließen, oder wie funktioniert das in einer Schaltung... hast du vielleicht ein Bsp für mich? Zihat
Der Möglichkeiten sind gar viele. Das hängt jetzt davon ab, was alles an den Bus dranhängt, was für Signal der Bus sonst so hat, wie das Timing aussieht usw. Nicht immer der einfachste Weg, geht aber immer: Irgendwie muss du dem µC enlocken, dass du in den Speicher schreiben willst. Also die WE-Leitung für die Speicherchips erzeugen. Kommt vielleicht schon fertig aus dem µC raus. 4 OR-Gates ('32) an je einem Eingang mit diesem Signal versorgen und die anderen Eingänge mit dem jeweiligen BLSx. Dann kommen hinten 4 WE-Signale für die 4 Speicherbausteine raus.
>4 OR-Gates ('32) an je einem Eingang mit diesem Signal versorgen und die >anderen Eingänge mit dem jeweiligen BLSx. Dann kommen hinten 4 >WE-Signale für die 4 Speicherbausteine raus. -> ok... falsch gedacht mit der WE# -> d.h. mit der einen WE#-Leitung vom µC kann ich nur einen IC ansprechen -> über 4 Or-Gatter kann ich die WE-Leitung für 4 ICs aktivieren indem als Inputs einmal die WE vom µC und ein BLSx in ein OR-Gatter geht und damit den Lese-u-Schreibvorgang ermöglciht... der Chip wird über die CS-Leitungen (da hab ich 4 angewählt) -> und wie funktioniert das mit den OE (output enable)? hier hab ich auch nur einen Pin OE der aus dem µC rauskommt. Zihat
Mangels Info und ersatzweise Glaskugel nehme ich mal an, dass es 4 Speicherbausteine à 8 Bits Breite sind. Und getrennte CS-Signale für getrennte Adressräume stehen. Dann: CS: Ein einziges CS für alle 4 Speicherbausteine. Sonst hast du hintereinander 4 getrennte Speicherbereiche à 1 Byte Breite. OE: Ebenso an alle Bausteine dran. Der µC sucht sich die passenden Bytes schon selber raus und ignoriert die übrigen. Gating ist hier erst interessant, wenn jedes kleinste bischen Strom gespart werden muss.
> und ein BLSx in ein OR-Gatter geht und damit den Lese-u-Schreibvorgang > ermöglciht... Den Schreibvorgang wohlgemerkt. Auf den Lesevorgang hat das keinen Einfluss.
an meinem µC hängt ein Flash-Speicher mit 8 Datenleitungen und 17 Addressleitungen, ein SRAM 15 Addressleitungen und 8 Datenleitungen, ein weitere IC mit 2 Adressleitungen und 8 Datenleitungen... -> ich wollte auch erstmal nur das System, welches dahinsteckt verstehen... deshalb vorher keine exakten werte gesagt... ------------------------------------------------------------------------ d.h. WE# vom µC in einen IC (OR-Gatter) in welches auch die drei BLSx Signale reingehen und dadurch der WE# von einem der angeschlossenen ICs (Flash RAM etc.) angewählt wird (lese-u-schreib-zugriff ermöglicht wird). Die ICs haben Inputs wie WE, OE und CE. Über die CE des µC sage ich welchen IC ich ansteuern möchte über den Address- u. Datenbus. Wenn ich nur ein CE für mehrere ICs verwende (in meinem oberen Bsp. würde ja jeder IC sein eigenes CS bekommen) dann könnte ich also einen zusammenhängenden speicher darstellen über mehrere ICs. Und OE wird vom µC an jeden IC geleitet OE[µC]----IC1 | ---IC2 | ---IC3 etc. WE[µC]-----| |-------WE--> erster IC BLS0[µC]---|OR-Gatter-IC|-------WE--> zweiter IC BLS1[µC]---| |-------WE--> dritter IC BLS2[µC]---| |-------WE--> vierter IC --> je nach dem welche BLSx-Leitung Low ist, wird der entsprechende IC angesprochen... wie heißen z.B. solche ICs (mit Or-Gattern)? CE0[µC]-------------------CE IC1 CE1[µC]-------------------CE IC2 etc. das müsste es sein, oder? Zihat
> an meinem µC hängt ein Flash-Speicher mit 8 Datenleitungen und 17 > Addressleitungen, ein SRAM 15 Addressleitungen und 8 Datenleitungen, ein > weitere IC mit 2 Adressleitungen und 8 Datenleitungen... Aha! Jetzt wird die Sache langsam interessant. Dein µC hat zwar 32 Datenleitungen, dein Speicher aber nicht. Vielleicht in Summe, aber nicht pro Typ. Vergiss alles was ich bisher geschrieben habe. Ich ging davon aus, dass du mit 32 Bit breitem Speicher arbeitest. Mehr Info gibts nur im Austausch gegen Information (nämlich: WELCHER CONTROLLER???)
>Vergiss alles was ich bisher geschrieben habe. Ich ging davon aus, dass >du mit 32 Bit breitem Speicher arbeitest. jetzt bin ich noch mehr verwirrt als zuvor.... ich verwende den LPC2220 Controller von Phillips www.keil.com/dd/docs/datashts/philips/lpc2210_2220.pdf Zihat
Wenn alles 8 Bits breit ist, sind die BLS-Leitungen nicht erforderlich. Statt dessen werden die Banks auf 8 Bits Breite konfiguriert und fertig. Einen Haken hat die Sache jedoch: Jeder 32bit-Zugriff wird in 4 8bit-Speicherzugriffe übersetzt. Eilig solltest du es also nicht haben. Und BOOT beachten, immerhin muss er schon beim Start weg wissen dass der Speicher etwas schmal ist. Übrigens steht der ganze Kram schön säuberlich im Manual. Sogar mit Bildchen drin, für jede Variante. Wie wär's mit Lesen?
da stehen die timing-geschichten drinnne, aber nicht wie es Leitungstechnisch verlegt werden muss... und das interessiert mich... Zihat
Ach ja: Warum hast du dir ausgerechnet einen Typ ganz ohne internem Flash ausgesucht? LPC2212/2214 hat Flash drin, ist sonst offenbar identisch (lies: der 2220 hat auch Flash drin, aber abgeschaltet/defekt). Hast du dir schon überlegt, auf welchem Weg du den Inhalt ins externe Flash kriegst?
> da stehen die timing-geschichten drinnne, aber nicht wie es > Leitungstechnisch verlegt werden muss... und das interessiert mich... Guck nochmal rein. Kapitel 3.
oh ok... im user manual stehts drinnen... dann ist es klar... >Einen Haken hat die Sache jedoch: Jeder 32bit-Zugriff wird in 4 >8bit-Speicherzugriffe übersetzt. Eilig solltest du es also nicht haben. >Und BOOT beachten, immerhin muss er schon beim Start weg wissen dass der >Speicher etwas schmal ist. d.h. der Controller arbeitet gar nicht 32bittig? aber die register sind 32Bit?!? Zihat
>Hast du dir schon überlegt, auf welchem Weg du den Inhalt ins externe >Flash kriegst? eigentlich wollte ich das über das JTAG-Interface machen... mit OpenOCD sollte das funktionieren... -> die anderen LPC2xxx haben zwar Flash, aber der RAM ist mir zuwenig... ich brauche mehr als 16kB... Zihat
während des betriebs brauch ich keinen Zugriff auf das flash tätigen - wird zu beginn alles vom externen flash in das interene Ram über den Datenbus geschaufelt... damit sollte alles schnell erreichbar sein... Zihat
> d.h. der Controller arbeitet gar nicht 32bittig? aber die register sind > 32Bit?!? Der Controller schon. Aber wenn dein Speicher nunmal nur 8 Leitungen hat, brauchts halt 4 Zugriffe, um da 32 Bits rauszuholen. Mit ISP kriegst du den Code nur ins RAM. Ob OpenOCD externes Flash programmieren kann weiss ich nicht. > während des betriebs brauch ich keinen Zugriff auf das flash tätigen Das heisst der ganze Code und die wichtigsten Live-Daten passen in 16KB?
hab mir grad mal die bilder im user manual angeschaut... da wird aber stets eigentlich nur ein IC an den µC gehängt (wie ein zusammenhängender speicher über mehrere ICs)... wenn ich einen IC mit CS anwähle möchte ich ja nicht das alle anderen auch aktiv sind... oder funktioniert das so? bei mir haben die einzelnen ICs ja nichts miteinander zutun... -> ich muss dann die einzelnen Chips mit CS[0..3] ansprechen und nicht alle mit dem gleichen CS... CS, OE, WE arbeiten unabhängig voneinander oder? Also sprich,ich kann OE immer enablen von jedem IC egal ob ich diesen IC mit CS enabled habe, oder? Und WE wird dann mit den BLS[0..3] verbunden? - ok.. und wozu dient dann der einzelne WE im µC? Zihat
> brauchts halt 4 Zugriffe, um da 32 Bits rauszuholen.
Um Missverständnissen vorzubeugen: Die 4 Zugriffe macht der Controller
automatisch, d.h. aus einem LDR macht er 4 externe Zugriffe. Nur dauerts
halt entsprechend lang.
>Mit ISP kriegst du den Code nur ins RAM. Ob OpenOCD externes Flash >programmieren kann weiss ich nicht. wird unterstützt... >Das heisst der ganze Code und die wichtigsten Live-Daten passen in 16KB? ebend nicht, der LPC2220 hat 64kB RAM --> da passt alles rein! Zihat
> bei mir haben die einzelnen ICs ja nichts miteinander zutun... -> ich > muss dann die einzelnen Chips mit CS[0..3] ansprechen und nicht alle mit > dem gleichen CS... Korrekt. > CS, OE, WE arbeiten unabhängig voneinander oder? Also sprich,ich kann OE > immer enablen von jedem IC egal ob ich diesen IC mit CS enabled habe, > oder? Ja. > Und WE wird dann mit den BLS[0..3] verbunden? - ok.. und wozu dient dann > der einzelne WE im µC? Steht zwar netterweise nirgends in der Doku, aber BLSx scheint nur bei Schreibzugriffen aktiv zu werden, das von mir oben skizzierte Gating ist da schon drin. Insofern dürfte es schnuppe sein, ob man für WE nun BLS0 oder WE verwendet.
Mal rekapituliert: 1x externes Flash, 17xA = 128KB. 1x externes RAM, 15xA = 32KB. Da du mit 64KB für Code und die aktiven Daten auskommst, sollte ein Device mit 128KB Flash und 64KB Daten doch ausreichen, wenn der Code im Flash bleibt und nicht ins RAM wandert. Also wozu der ganze Zirkus? Kennst du übrigens Atmels AT91RM3400? 96KB RAM und serielles Dataflash für den Code (wird beim Start ins RAM kopiert).
ok, dann ist mir CS klar... und OE wird an jeden IC gesendet ohne irgendwas dazwischen - also das OE[µC] wird an jedes OE von jedem Controller angeschlossen wird CS1 enabled so wird im µC automatisch BLS1 auch enabled -> BLS1 wird an WE vom IC angeschlossen und ich kann Daten in das externe Flash schreiben oder Daten rauslesen... - ok das ist schlüssig.. das mit dem OE ist mir aber noch nicht so schlüssig... ich dachte eigentlich, dass man nur bei dem IC WE oder OE enablen kann, welcher auch über CS ausgewählt worden ist -> das würde auch erklären warum der µC ein WE und ein OE besitzt --> es wird zwar an alle angschlossenen ICs das Write-Signal geschickt (wie bei UDP) aber nur der IC der auch das CS enable erhalten hat, kann WE oder OE auch wirklich enablen... so müsste es funktionieren -> d.h. in dieser version benötigt man die BLSx gar nicht... Zihat
bei Atmel ist man schon so festgelegt in manchen sachen - wie z.B. serielles interface TWI - hat sonst kein Hersteller... und ich weiß nicht ob die kompatibel zu I²C ist... Live-Daten hab ich stets 16kB (im SRAM stehen immer schon zwei Zyklen drinnen -> 32kB... der Flashspeicher ist etwas größer gewählt... -> wenn alles im RAM ist, geht die Verarbeitung schneller und man braucht keine Zugriffe über den Datenbus... -> also einfach wegen der Verarbeitungsgeschwindigkeit... Zihat
Das Kapitel sollte man ruhig mehrmals und in allen Varianten lesen. Steht jedesmal was neues drin. Insbesondere sollte man die Rolle von BLSx abhängig von RBLE genau betrachen, denn abhängig davon haben die völlig unterschiedlichen Bedeutung. Mit RBLE=0 werden diese Leitungen von Byte-Lane-Selects zu getrennzen WE-Leitungen für die 4 CS-Banks.
der AT91RM3400 ist halt schon etwas überdimensioniert für die anwendung, finde ich... die ganzen UARTS, SSCs SPI, USB brauch ich halt nicht... Der µC bekommt daten über das externe RAM (8Bit pro Addresse) wandelt diese in eine andere Reihenfolge und schiebt die Daten wieder raus (was noch extern synchronisiert wird... )... ein paar Pausen etc. mit den Timern und das wars... da fand ich dann den LPC2220 besser ausgewählt und dazu ein externes Flash... geht ja schnell bis die Daten im interne Ram sind (man kann ja das gleich zu beginn machen und alles andere disablen und erst wenn das gemacht ist, können daten vom SRAM (Extern) gelesen werden (über interrupt wird angekündigt, wann neue daten da sind...) >das mit dem OE ist mir aber noch nicht so schlüssig... ich dachte >eigentlich, dass man nur bei dem IC WE oder OE enablen kann, welcher >auch über CS ausgewählt worden ist -> das würde auch erklären warum der >µC ein WE und ein OE besitzt --> es wird zwar an alle angschlossenen ICs >das Write-Signal geschickt (wie bei UDP) aber nur der IC der auch das CS >enable erhalten hat, kann WE oder OE auch wirklich enablen... Hab ich das eigentlich so richtig verstanden? Zihat
CS0[µC]---------------------------IC0 CS1[µC]---------------------------IC1 OE[µC]-----------ICO | ----------IC1 WE[µC]----------ICO | ---------IC1 richtig beschaltet? über CS0 wird dann der IC0 aktiviert -> ich kann ein WE-enable-Signal vom µC rausschicken, welches an alle ICs gesendet wird, aber nur der der über CS (nämlich CS0) angewählt worden ist, kann WE wirklich enablen so dass ich beim IC0 Daten schreiben oder empfangen kann... bei den anderen ICs (hier IC1) nicht... Zihat
> der AT91RM3400 ist halt schon etwas überdimensioniert für die anwendung, > finde ich... die ganzen UARTS, SSCs SPI, USB brauch ich halt nicht... Ein LQFP100 mit 8pin-Dataflash und sonst nix ist überdimensioniert. Ein LQFP144 mit externem 32pin Flash und 32pin RAM ist nicht überdimensioniert. Sorry, aber diese Logik erinnert mich an jenen legendären Forenteilnehmer, der ein Handy selber bauen wollte, weil ihm die ganze Funktionen da drin zu viel waren und er das ohne die sicher kleiner hinkriegt. > Der µC bekommt daten über das externe RAM (8Bit pro Addresse) wandelt > diese in eine andere Reihenfolge und schiebt die Daten wieder raus (was > noch extern synchronisiert wird... )... ein paar Pausen etc. mit den > Timern und das wars... Klingt eigentlich massiv nach FPGA statt Controller. > Hab ich das eigentlich so richtig verstanden? Weiss ich nicht, weil ich deinen Text nicht verstanden habe.
> WE[µC]----------ICO > | > ---------IC1 Halt dich lieber ans Manual. Also BSL0 => WE0, BSL1 => WE1. > richtig beschaltet? Ja. Bei jedem solchen Baustein gilt, dass OE/WE uninteressant ist, wenn CS=1.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.