Forum: Mikrocontroller und Digitale Elektronik ATXMega32e5 SPI MISO immer 0 mit AT45DB161 Flash IC


von MOBA 2. (Gast)


Lesenswert?

Hallo Leute,

ich habe eine ATXmega32e5 mit AT45DB161 (SPI Flash) verbunden.
Das ganze läuft leider nicht gut. SPI auf PORTC.
Ich habe mir die Sachen angeguckt, die Daten werden vom XMega korrekt 
gesendet (SPI Modus 3), allerdings zieht der Slave (Flash-IC) den MISO 
permanent auf 0, sodass keine Daten ankommen.

Als Bibliothek habe ich die von Atmel genommen, und im Netz habe ich 
eine AT45 lib gefunden. Ich verstehe nicht ganz, warum der Slave nicht 
reagiert.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Mach mal erst mal den Pullup auf dem Miso Pin an. Das DF zieht nur nach 
Masse, wenn es über /CS selektiert ist. Und warum nimmst Du nicht 
SPI-Mode 0? Ansonsten liegt der Fehler wie immer in Zeile 42.

von MOBA 2. (Gast)


Lesenswert?

Der Pullup ist an. Der zieht den auch nach unten, wenn er nicht 
selektiert ist.
Warum sollte ich Mode 0 nehmen? Ist doch egal, oder?

Beim Flash, SO an MISO, SI an MOSI.

Wie ist das eigentlich bei dem Flash mit den Pages, habe ich das richtig 
verstanden dass jede Page 256 Byte hat? Habe den AT45DB161D

von Falk B. (falk)


Lesenswert?

@ Marius Dege (2009marius15)

>Warum sollte ich Mode 0 nehmen?

Weil der sinnvoller ist?

> Ist doch egal, oder?

Nö, denn einige Flash-Kommandos sind abhängig vom SPI-Mode (warum auch 
immer).

>Beim Flash, SO an MISO, SI an MOSI.

Richtig.

>Wie ist das eigentlich bei dem Flash mit den Pages, habe ich das richtig
>verstanden dass jede Page 256 Byte hat? Habe den AT45DB161D

In meinem Datenblatt steht was von 528 Bytes/Page, kann aber auch 
EINMALIG auf 512 geändert werden.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Marius D. schrieb:
> Der zieht den auch nach unten, wenn er nicht
> selektiert ist.

Dann stimmt da etwas nicht. Der Miso-Pin am DF darf erst den Tristate 
verlassen, wenn der Baustein selektiert ist. Hast Du das DF falsch 
eingelötet oder Brücken drin?

von Falk B. (falk)


Lesenswert?

@Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite

>> Der zieht den auch nach unten, wenn er nicht
>> selektiert ist.

>Dann stimmt da etwas nicht. Der Miso-Pin am DF darf erst den Tristate
>verlassen, wenn der Baustein selektiert ist.

Stimmt. Das kann man auch gut messen, indem man einen Spannungsteiler 
10k+10k von VCC/GND an das Pin schaltet. Bei Tristate hat man dann VCC/2 
auf dem Signal.

von MOBA 2. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich habe mir das nochmal genauer angeguckt, und folgendes festgestellt.
Nach dem Initialisieren ist der MISO permanent auf 0V. Wenn ich die 
Initialisierung weglasse, habe ich 3,3V.

Wenn ich nach der Initialisierung das Flash-IC resette, dann habe ich 
dort ca. 2V ab und zu (Impulse von ca. 5µs). Dort scheint es aber, als 
wenn der Controller gegen das Flash treibt. Ich gebe deswegen mal die 
Funktionen mit.
1
void AT45DB_init(void)
2
{
3
   cli();
4
   
5
   DDR_CTRL;
6
   FLASH_ON;
7
   
8
   /*
9
   Mode 0:  SCLK idles low. Data is setup on falling edge of SCLK.  Data is sampled on rising edge of SCLK.
10
   Mode 1:  SCLK idles low. Data is setup on rising edge of SCLK.  Data is sampled on falling edge of SCLK.
11
   Mode 2:  SCLK idles high. Data is setup on rising edge of SCLK.  Data is sampled on falling edge of SCLK.
12
   Mode 3:  SCLK idles high. Data is setup on falling edge of SCLK.  Data is sampled on rising edge of SCLK.
13
   */
14
15
   SPI_MasterInit(&spiMasterC, &SPIC, &PORTC, FALSE, SPI_MODE_0_gc, FALSE, FALSE, SPI_PRESCALER_DIV128_gc);    /* Initialize SPI */
16
   
17
   MISO_IN;
18
   SET_MISO_PULLED;
19
   
20
   CLEAR_CS;
21
22
   /* Skip any pending bits */
23
   for(uint8_t i = 0; i < 20; i++)
24
      SPI_MasterTransceiveByte(&spiMasterC, 0x00);
25
26
   wdt_reset();
27
28
   _delay_us(25);
29
   SET_CS;
30
   _delay_us(5);
31
32
   sei();
33
}

von MOBA 2. (Gast)


Lesenswert?

Hat jmd. eine Idee, was da falsch läuft?

Takt ist übrigends 32Mhz intern. UART läuft damit.

von MOBA 2. (Gast)


Lesenswert?

Hallo nochmals,

ich habe es hinbekommen, ich habe nun ein Signal auf dem MISO, jedoch 
ist dieses als "High" ca. 2V, ich verstehe nicht, warum ich kein 
richtiges Signal bekomme. Das was gesendet wird bei Anfrage 0xD7 ist 
0xAC, womit ich auch nichts anfangen kann, unabhängig davon das der µC 
das als LOW Signal erkennt.

von Falk B. (falk)


Lesenswert?

@ Marius Dege (2009marius15)


>ich habe es hinbekommen, ich habe nun ein Signal auf dem MISO, jedoch
>ist dieses als "High" ca. 2V, ich verstehe nicht, warum ich kein
>richtiges Signal bekomme.

Dann zieht jemand anders das Pin auf LOW. Entweder ist dein MISO Pin 
nicht auf Eingang gestellt oder du hast eine Lötbrücke auf eine anderes 
Ausgangspin, das LOW treibt. ODer der VCC-Anschluß deines FLASH ist 
nicht angeschlossen ;-)

Siehe Fehlersuche.

von Felix A. (madifaxle)


Lesenswert?

Zu SPI_MasterInit:

du schreibst zwar z. B. "SPI_MODE_0_gc", aber für den INT-Level nutzt du 
nicht "SPI_INTLVL_OFF_gc". Das wäre zumindest schöner...

In der SPI_MasterInit wird MISO auf Input gesetzt, dein MISO_IN, welches 
da drunter steht, würde ich entfernen.

Folgende Macros finde ich nicht, bitte ebenfalls posten:
SET_MISO_PULLED
MISO_IN
CLEAR_CS
SET_CS
DDR_CTRL
FLASH_ON

Und, falls vorhanden, das .lss File anhängen, damit man mal nachschauen 
kann, ob die Whileschleife in deinem "SPI_MasterTransceiveByte" noch da 
ist.
Unwahrscheinlich* zwar, aber sicher ist sicher.

*dass die weg ist

: Bearbeitet durch User
von MOBA 2. (Gast)


Lesenswert?

Hallo Leute,

danke für eure Antwort. Lötbrücke ist nicht der Fall.
Ich verstehe die XMega32e5 gar nicht mehr, ich habe das ganze mal 
genauer Untersucht, und hier einen neuen Thread geöffnet (quasi 
verschoben).

Beitrag "ATXmega32e5 SPI und Timer eliminieren sich gegenseitig?"


Das ganze scheint entweder ein XMEGA32e5 Problem zu sein, oder eine 
Konfiguration. Ich verstehe es einfach nicht.

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.