Hallo, ich möchte gerade das erste Design von mir mit einem ATxMega128A1 entwerfen. Dabei habe ich eine Frage zum EBI, vielleicht hat jemand damit schon etwas mehr Erfahrung sammeln können. Die oberen 4 Pins des Ports H sind normalerweise die CS Pins des EBI. Nun nutze ich das CS des XMegas nicht und brauche daher auch keine CS Signale. Laut Datenblatt kann man im CTRLA Register das Chip Select komplett deaktivieren. Wenn ich dies mache, kann ich die entsprechenden Pins nun als ganz normale digital in/out Pins benutzen? Vielleicht hat das ja schon mal jemand getestet, im Datenblatt habe ich speziell zu den CS Signalen keinen Hinweis gefunden. Dann noch eine Frage: Waitstates werden zwar im CTRLB (Chip Select Control Register B) eingestellt, jedoch finde ich hier keinen Hinweis darauf, ob diese nur zur Verfügung stehen wenn Chip Select aktiviert ist. Ich sehe auch keinen Grund, warum Waitstates an CS gekoppelt sein sollten (trotz Registernamen) vielleicht kann mich hier auch jemand kurz bestätigen. Vielen Dank im Voraus, Netbandit
Ich wollte den Beitrag noch einmal nach oben holen. Vielleicht hat ja jemand, der schon etwas mit dem XMega gemacht hat, Erfahrung diesbezüglich (Helmut, Simon, René etc.).
Hallo Netbandit. Im Datenblatt auf Seite 244 ist zu lesen: The EBI will only override value, but not direction for the I/O pins where the EBI address and control lines are placed. These I/O pins must be configured to output when the EBI is used. I/O pins for unused EBI address and control lines can be used as normal I/O pins or for other alter- nate functions on the pins. Ich würde deswegen mal stark davon ausgehen, dass du den CS Pin dann als normalen IO verwenden kannst. (Wenn das nicht so wäre, warum sollte man dann die CS's überhaupt deaktivieren können). Wegen den Waitstates: Du meinst, du fragst dich warum die Waitstates pro Chipselect eingestellt werden. Ich würde mich davon nicht verunsichern lassen. Du stellst in den Registern halt für jeden Speicher einzeln ein, welche Waitstates er benötigt. Wenn du den CS deaktivierst, gehe ich mal nicht davon aus, dass der ganze Speicher deaktiviert ist. Die anderen Einstellungen gelten nach wie vor. Ich muss allerdings gestehen, dass ich mich mit dem EBI noch nicht beschäftigt habe. Leider ist das Datenblatt hier ein bisschen spärlich. Ich konnte auch noch keine Timing Diagrams zum Lesen oder Schreiben auf externen Speicher finden. Es gibt aber eine AppNote von Atmel zum Thema Xmega EBI: http://atmel.com/dyn/resources/prod_documents/doc8058.pdf Vielleicht werden Sie da geholfen.
Hi Simon, danke erst einmal für deine Antwort. Die AppNote und den entsprechenden Teil des Datenblattes hab ich natürlich schon gelesen, aber wie du schon sagst: Es ist nicht allzu aussagekräftig. Je mehr ich mir das durchlese, desto verwirrter werde ich :) Aber ich glaube jetzt ist der Groschen bei mir gefallen: In der AppNote auf Seite 8 steht: "In certain configurations, the Chip Select lines can be used as address lines instead. Say, if only Chip Select Block 2 and 3 is used, the Chip Select lines CS0 and CS1 are used as address lines A16 and A17 instead. Figure 4-1 below shows the possible configurations." Und dann steht unter dem Bild: "The figure shows that if only CS3 is enabled, all four CS lines are used as address lines." Wenn ich das richtig verstehe muss ich also mindestens CS3 einschalten und meine Waitstates dafür definieren. Dadurch, dass nur CS3 aktiviert ist, stehen alle CS Pins (CS0 bis CS3) als Adressleitungen zur Verfügung. Wenn ich nun aber CS3 mit einer Größe von 64KiB definiere, weiß das EBI, dass nur 16 Adressleitungen benutzt werden und so stehen mir die Leitungen A16 bis A19 (welche ja vorher die CS Leitungen wahren) als normale I/Os zur Verfügung. Oh man, das wäre natürlich toll wenn das so geht. Warum schreiben die das nicht etwas deutlicher rein? Ich denke es bleibt mir nichts anderes übrig als es selbst auszuprobieren. Vielleicht entwerfe ich mein Design so, dass ich im Notfall, mit Lötbrücken andere Pins nutzen kann anstatt die CS Pins. Danke dir schon einmal :)
Der XMega an sich ist schon ein toller Controller - die Datenblätter und AppNotes sind allerdings etwas herzlos zusammengetackert und aufgrund fehlender Codesequenzen nicht einfach zu verstehen. An der Stelle hat ATMEL bisher leider gespart oder die falschen Leute eingesetzt.
A. N. wrote: > ich möchte gerade das erste Design von mir mit einem ATxMega128A1 > entwerfen. Wo kriegst Du denn die XMega her? Sind die denn schon in Volume-Production? Ich hab da schon schlechte Erfahrungen gemacht mit ICs, die es noch nicht richtig gibt. Daher lasse ich das lieber. Peter
Das sind immer noch Muster, Peter. Die Serie geht im Juni/Juli2009 los... vorraussichtlich. Wenn Du welche haben möchtest, kann ich Dir 2 Stück schicken. Vielleicht magst Du ja doch mit spielen.
Ja ich hatte auch gehofft, dass ATMEL inzwischen schon etwas weiter damit ist. Aber ich bin zufrieden, dass es sie inzwischen schon zu kaufen gibt: http://shop.embedit.de/browse_010001007_155__.php Irgendwann wird das aber auch besser werden, wenn die Chips weiter verbreitet sind und wir hier ein paar Erfahrungswerte zusammen getragen haben :)
Hallo A.N., Deinen Thread habe ich erst jetzt gesehen. EBI habe ich in Betrieb genommen - um genau zu sein das 3 Port Multiplexed EBI mit 16 Bit Adressen und 8 Bit Daten. Beim EBI gibt es viele viele Ungereimtheiten - das fängt bei fehlendem 4 Port Mode an; geht über das Thema I/O Port Override (warum muss man die Steuerleitungen doch 'von Hand' auf High/Low setzen??) zur fehlenden/unzureichenden Doku der Waitstates. Die Initialisierung kann ich Dir gerne als Codeschnipsel senden - aber wie Du die CS Leitungen freibekommst oder Waitstates einfügst weiss ich nicht. EBI war bei mir trial and error. Nun läufts dank -JTAG ICE (Memory Bereiche ansehen) - Oszi für Steuersignale -viel Geduld Das wünsch ich Dir auch: Geduld und Zähigkeit. :-) Gruß Helmut
Hallo zusammen. Ich weis, das Thema ist in die Tage gekommen, aber ich stehe auch gerade vor dem Problem mit waitstates. Hat irendjemand eine Info, wo diese waitstates eingefügt werden? Wann konkret wird der waitstate eingefügt?
Hallo zusammen, @Helmut: Ich weiß, es ist lange her, aber ich versuche es dennoch. Du schreibst, du hast das EBI im 3 Port Modus in Betrieb nehmen können. Ich designe gerade ein Board mit einem XMEGA64A1 und möchte auch das EBI in diesem Modus verwenden. Leider lese ich gerade (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=79024&start=0&postdays=0&postorder=asc&highlight=sdram), dass dieser Modus angeblich nicht funktioniert. Zumindest, wenn du ALE1 und CS verwendet hast. Bei den anderen Modi mit ALE12 bzw. ohne CS ist es nicht geklärt. Da du 16bit Adressbus hast, vermute ich mal, du verwendest ALE2 nicht. CS bräuchte ich auch nicht, da nur 1 RAM vorgesehen ist. Bin jetzt etwas verunsichert. Vllt. kannst du Klarheit schaffen. Desweiteren würde ich gerne eine CS Leitung als zusätliche Adressleitung A16 verwenden, habe dafür auch schon einen eigenen Thread (Beitrag "XMEGA EBI mit 17bit Adressbus! CS als A16?") aufgemacht, da kann mir leider aber niemand weiterhelfen. Vllt. ja hier? @A. N.: Wie ist es denn bei dir ausgegangen mit den CS Leitungen? Konntest du sie dann als I/O verwenden? Hast du das EBI auch im 3-Port-Mode mit Adress High-Low-Byte-Multiplexing betrieben? Klappte das alles? Danke schon mal an alle, die sich den alten Thread nochmal anschauen. VG Robert
Hallo Robert, das ist jetzt wirklich schon etwas her, aber soweit ich mich erinnert kann, konnte ich die ungenutzten CS-Pins ganz normal verwenden. In meinem Design hatte ich sicherheitshalber andere Pins verwendet, dann aber nach dem Aufbau der Hardware festgestellt, dass die CS-Pins problemlos gegangen wären. Nein ich habe den XMEGA im LPC SRAM Mode betrieben, also kompatibel zum Mega-SRAM Interface. Ich hatte damals einen 512KiB SRAM mit 16x32KiB Speicherseiten dargestellt. Das hatte folgenden Vorteil: Wenn man den 24 Bit Adressbus des XMegas benutzt, dann muss ein entsprechendes Register die obersten 8 Bit beinhalten. Diese 8 Bit geben dann damit an welche der 255 möglichen 64KiB großen Speicherseiten über die normalen X, Y, Z Pointer adressiert werden. Allerdings hat damals der AVRGCC noch keine 24 Bit Adressierung unterstützt (macht der das vielleicht inzwischen?), weswegen dieses "Page"-Register manuell gesetzt werden musste. Hätte ich dann aber von einer Page zur anderen umgeschaltet, dann wäre es schwer gewesen Daten von einer Page in die andere zu übertragen, also Variablen zu benutzen, die über mehrere Seiten verstreut liegen. Ich habe damals damit ein Internetradio realisieren wollen und habe mit relativ großen Datenpaketen gerechnet. Daher wäre es für mich wichtig gewesen auf bestimmte Variablen immer zugreifen zu können (zum Beispiel Variablen zur Programmsteuerung oder zur Ethernet-Steuerung) und dennoch viel Speicher zum Auslagern der Datenpakete zu besitzen. Daher habe ich den 64 KiB Adressraum in zwei Teile unterteilt: Die Adressen 0x0000 bis 0x7FFF haben die Register, den Stackspeicher und die Variablen beinhaltet, auf die andauernd zugegriffen werden musste. Ab Adresse 0x8000 bis 0xFFFF war dann der Empfangspuffer untergebracht. Über 4 zusätzliche Pins konnte ich auswählen welcher 32 KiB große Bereich des SRAMS innerhalb dieses Adressbereiches eingeblendet wird. Die empfangenen Datenpakete konnte ich dann dort unterbringen, wobei ich immer nur dann die Speicherseite umschalten musste, wenn eine 32 KiB Seite voll war (oder vom MP3 Player vollständig ausgelesen wurde). Damit konnte ich das Umschalten der Speicherseiten auf ein Minimum reduzieren und hatte zudem immer Zugriff zu den wichtigen Variablen im unteren Speicherbereich. Viel Erfolg bei deinem Projekt, Netbandit
Danke für deine Antwort. Interessante Lösung, passt bei mir aber nicht so gut. Den normalen 3-Port-SRAM-Modus hat Du noch nicht eingesetzt oder. Ich würde gerne den CS0 als A16 nutzen. Dass das geht, wenn man das manuell steuert, weiß ich jetzt, aber im Datenblatt und in der AVR1312 klingt das so, als könnten die nicht benötigten CSs auch automatisch vom EBI gesteuert werden. Erfahrungen? Danke nochmal! VG Robert
Hi Robert, tut mir echt leid, aber ich habe den XMega noch nie so betrieben wie du dir das jetzt vorstellst und ich bin schon zu sehr aus der Materie raus, um da jetzt aus dem Stehgreif eine geeignete Lösung präsentieren zu können. Ich wünsche dir dennoch viel Erfolg, probiere es doch einfach aus :) Beste Grüße, Netbandit
Robert schrieb: > im Datenblatt und in der > AVR1312 klingt das so, als könnten die nicht benötigten CSs auch > automatisch vom EBI gesteuert werden. Nur eingeschaltete /CS-Pins werden automatisch vom EBI verwendet. Werden sie im betreffenden Control-Register nicht aktiviert, sind es ganz normale Portpins. Allerdings können sie auch als erweiterte Adresspins A16...A19 genutzt werden. Dies muss alles konfiguriert werden. Unkonfiguriert werden die Pins nicht vom EBI benutzt.
Hallo Knut, danke erstmal, dass du dich meiner annimmst. Irgendwie verstehe ich es leider immer noch nicht. Im DS und in der AN steht, dass im Extremfall die ungenutzten /CS0.../CS3 als A16...A19 verwendet werden können. Dafür muss man die ungenutzten deaktivieren, soweit ich das verstanden habe. Aber wie konfiguriere ich sie denn nun als A16...A19. Wie du schreibst, würden sie ja erstmal als normale I/O-Pins zur Verfügung stehen. Das würde aber bedeuten, dass ich sie manuell per S/W als A16...A19 bedienen müsste. Ist das die einzige Möglichkeit oder können sie auch über das EBI also solche genutzt werden. Falls ja, reicht es dann aus, sie entsprechend mit dem SRAM zu verbinden und Basisadresse und Speicherbereich richtig zu konfigurieren und dann nutzt das EBI sie (in Ermangelung eines vierten Ports oder eines zweiten Adresslatches) automatisch richtig als A16...A19? Sorry, irgendwie steh ich auf der Leitung, glaub ich. Habe auch weiter keine Konfigurationsmöglichkeit gefunden. Sollten sie lediglich als I/O-Ports zur Verfügung stehen und so per S/W als Adressleitungen genutzt werden können, wäre die separate Erwähnung im Datenblatt und AppNote m. E. nach überflüssig. Dafür kann ich ja auch jeden anderen GPIO verwenden, warum also nicht auch die. VG Robert
Robert B. schrieb: > Aber wie konfiguriere ich sie denn nun als A16...A19. Wie du schreibst, > würden sie ja erstmal als normale I/O-Pins zur Verfügung stehen. Richtig. Robert B. schrieb: > Das > würde aber bedeuten, dass ich sie manuell per S/W als A16...A19 bedienen > müsste. Entweder das... Robert B. schrieb: > oder können sie auch über das > EBI also solche genutzt werden. Oder das. Robert B. schrieb: > Falls ja, reicht es dann aus, sie > entsprechend mit dem SRAM zu verbinden und Basisadresse und > Speicherbereich richtig zu konfigurieren und dann nutzt das EBI sie (in > Ermangelung eines vierten Ports oder eines zweiten Adresslatches) > automatisch richtig als A16...A19? Das EBI kann das automatisch machen, wenn die Basisadresse und der Speicherbereich richtig definiert sind. Es gibt für A19 einen Sonderfall, dass es nicht einzeln als /CS benutzt werden kann. Man kann maximal 1MB direkt adressieren. Dafür muss das RAM aber über eine extra-Leitung selektiert werden oder dauerhaft selektiert sein. Bei 512kB kann man A19 als /CS missbrauchen, wenn man als Basisadresse 1MB und als Speicherbereich auch 1MB angibt. Wenn man dann auf die unteren 512kB zugreift ist A19 für die Zeit des Zugriffs Low, was einem /CS gleichkommt ;-)
DANKE KNUT! Das ist das, wonach ich schon die ganze Zeit suche. Hast du das durch ausprobieren rausgefunden oder hab ich Tomaten auf den Augen? Habe in den offiziellen Dokumenten von Atmel immer nur gefunden, dass es geht (diese äußerst "hilfreiche" Grafik mit den Kästchen mit A16..A19 und CS0..CS3 ist dir sicher auch bekannt), nicht aber wie. Dass man sich quasi keine Gedanken darüber machen muss, sondern es einfach funktioniert, ist zwar schön, aber wenn man ein Board entwirft, wäre es noch schöner, das würde irgendwo stehen, oder? Aber die Dokumentation der XMegas wird ja des Öfteren in Frage gestellt. Trotzdem nochmal VIELEN DANK für die finale Information! VG Robert [edit] Die Idee, zwei CS-Blöcke zu nutzen, eine offen zu lassen und die zweite als A16 zu nutzen, hatte ich auch schon. Allerdings ist das nicht grad "die feine Art", wie ich finde. Und es geht ja so ohne Weiteres nur mit einem CS (was mir allerdings auch wieder ausreichen würde bei 128k).
Robert B. schrieb: > Das ist das, wonach ich schon die ganze Zeit suche. Hast du das durch > ausprobieren rausgefunden Ja. Es ist immer günstig, alles auf einem EvalBoard mit abgesetzten Modulen zu probieren, bevor man das endgültige Design für die Schaltung macht. Robert B. schrieb: > Dass man sich > quasi keine Gedanken darüber machen muss, sondern es einfach > funktioniert, ist zwar schön... Naja, einfach funktionieren tut´s eben nicht. Nur korrekt konfiguriert funktioniert es. Sehr hilfreich hat sich auch die kleine aber feine Textpassage erwiesen, die dazu auffordert, die Steuerports (/WR, /CS, /RD, ALE...) vor der Init des EBI auf den jeweils inaktiven Zustand zu setzen, also für Low-aktive Pins auf Ausgang High und umgekehrt. Ansonsten werden sie beim EBI-Zugriff falsch gesetzt. Was einerseits eine hohe Flexibilität ermöglicht, ist andererseits eine fiese Falle, wenn man nicht sehen kann, wo es klemmt. Ein Speicheroszi oder Logic-Analyzer bietet beim ersten Umgang mit dem EBI eindeutig Vorteile.
Mittlerweile hilft es auch, die ASF Routinen zu durchforsten, die mit Studio 5 installiert werden. Mir ist zwar nicht ganz klar, warum die alles so verbuddeln müssen, das man ne Stunde braucht um die Wirk-Routinen zu finden, aber immerhin sind se dann da.
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.