Forum: Mikrocontroller und Digitale Elektronik Lane Select signal


von Zihat (Gast)


Lesenswert?

Hallo,

was genau machen diese Pins

BLS3 — LOW-active Byte Lane Select signal (Bank 3)

bei einem µC?

Zihat

von Andreas K. (a-k)


Lesenswert?

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.

von Zihat (Gast)


Lesenswert?

... 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

von Andreas K. (a-k)


Lesenswert?

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.

von Zihat (Gast)


Lesenswert?

>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

von Andreas K. (a-k)


Lesenswert?

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.

von Andreas K. (a-k)


Lesenswert?

> 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.

von Zihat (Gast)


Lesenswert?

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





von Andreas K. (a-k)


Lesenswert?

> 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???)

von Zihat (Gast)


Lesenswert?

>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

von Andreas K. (a-k)


Lesenswert?

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?

von Andreas K. (a-k)


Lesenswert?

Als Manual empfehle ich eher das User Manual (UM10114), nicht das 
Datasheet.

von Zihat (Gast)


Lesenswert?

da stehen die timing-geschichten drinnne, aber nicht wie es 
Leitungstechnisch verlegt werden muss... und das interessiert mich...


Zihat

von Andreas K. (a-k)


Lesenswert?

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?

von Andreas K. (a-k)


Lesenswert?

> da stehen die timing-geschichten drinnne, aber nicht wie es
> Leitungstechnisch verlegt werden muss... und das interessiert mich...

Guck nochmal rein. Kapitel 3.

von Zihat (Gast)


Lesenswert?

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

von Zihat (Gast)


Lesenswert?

>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

von Zihat (Gast)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

> 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?

von Zihat (Gast)


Lesenswert?

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

von Andreas K. (a-k)


Lesenswert?

> 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.

von Zihat (Gast)


Lesenswert?

>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

von Andreas K. (a-k)


Lesenswert?

> 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.

von Andreas K. (a-k)


Lesenswert?

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).

von Zihat (Gast)


Lesenswert?

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

von Zihat (Gast)


Lesenswert?

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



von Andreas K. (a-k)


Lesenswert?

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.

von Andreas K. (a-k)


Lesenswert?

TWI=I2C, Atmel hatte bloss keine Lust für den Namen Lizenzen zu zahlen.

von Zihat (Gast)


Lesenswert?

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

von Zihat (Gast)


Lesenswert?


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

von Andreas K. (a-k)


Lesenswert?

> 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.

von Andreas K. (a-k)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.