Forum: Mikrocontroller und Digitale Elektronik SPI Verbindung zu EEPROM funktioniert nicht (25AA640A)


von Tom (Gast)



Lesenswert?

Hallo miteinander

Ich habe mir kürzlich ein Analog Discovery 2 Oszilloskop / 
Logic-Analyzer gekauft und wollte damit die SPI Funktion mit einem 
25AA640A Serial EEPROM von Microchip testen.

Als ersten Test wollte ich einfach das Statusregister des Chips auslesen 
(e. auch "read_status_register.png" aus dem Datenblatt 
(https://ww1.microchip.com/downloads/en/DeviceDoc/25AA640A-25LC640A-64K-SPI-Bus-Serial-EEPROM-20001830G.pdf).

Die Bilder "spi_logic_analyzer_0.png" und "spi_logic_analyzer_1.png" 
sind Aufzeichnungen des Logic-Analyzers Outputs welche zum Chip gesendet 
wurden.

Wie man allerdings sieht, erhalte ich keine Antwort auf der MISO 
Leitung.

Die beiden Leitungen ¬WP (Write-Protect) und ¬HOLD ziehe ich auf 5V hoch 
wie im Datenblatt angemerkt.

Die Schaltung ist auf einem breadboard zusammengesteckt und ich dachte 
mir da gäbe es evtl. Kontaktprobleme, habe daher einige Signale auch 
direkt an den Pins des ICs gemessen (also Sonde direkt ans Bein), ist in 
"spi_mosi_clk_scope.png" gezeigt).

Mir ist es zuvor schon misslungen, mit einem SPI Potentiometer zu 
kommunizieren (MCP42100).

Ich weiss daher nicht, ob ich etwas generelles an SPI nicht verstehe 
oder wo der Fehler liegen könnte?

von Falk B. (falk)


Lesenswert?

Tom schrieb:
> Mir ist es zuvor schon misslungen, mit einem SPI Potentiometer zu
> kommunizieren (MCP42100).
>
> Ich weiss daher nicht, ob ich etwas generelles an SPI nicht verstehe
> oder wo der Fehler liegen könnte?

In einem deiner Bilder bleibs CS auf LOW, das geht bisweilen schief. 
Mach es wie im Datenblatt. Zum Begin der Übertragung auf LOW, am Ende 
auf HIGH setzen.

Mit welcher CPU willst du das Dinge denn auslesen? Wenn es ein AVR ist, 
MUSS das Pin SS auf Ausgang konfiguriert sein, siehe Datenblatt "SS pin 
functionality"

von Anita H. (anita1995)


Lesenswert?

Das EEPROM ist zudem ein I2C und kein ISP-EEPROM! Siehe Datenblatt:

von Tom (Gast)


Lesenswert?

Falk B. schrieb:
> Tom schrieb:
>> Mir ist es zuvor schon misslungen, mit einem SPI Potentiometer zu
>> kommunizieren (MCP42100).
>>
>> Ich weiss daher nicht, ob ich etwas generelles an SPI nicht verstehe
>> oder wo der Fehler liegen könnte?
>
> In einem deiner Bilder bleibs CS auf LOW, das geht bisweilen schief.
> Mach es wie im Datenblatt. Zum Begin der Übertragung auf LOW, am Ende
> auf HIGH setzen.
>
> Mit welcher CPU willst du das Dinge denn auslesen? Wenn es ein AVR ist,
> MUSS das Pin SS auf Ausgang konfiguriert sein, siehe Datenblatt "SS pin
> functionality"

Hallo und vielen Dank für die Antwort.

Die CPU wäre schlussendlich ein TMS320F28388D, allerdings benutze ich 
momentan gar keine CPU, die Signale werden vom Analog Discovery 2 
erzeugt.

Mir geht es eigtl. nur darum, dass ich SPI und I2C Chips und deren 
Instruktionen kurz mit einem einfachen Setup testen kann bevor ich den 
entsprechenden C Code auf dem Mikrocontroller meiner Wahl implementiere. 
Ich denke, das könnte beim Prototyping hilfreich sein.

Das Analog-Discovery 2 hat die Möglichkeit, ein Javascript Programm 
auszuführen welches eine Ansteuerung mittels SPI und I2C erlaubt. Der 
folgende Code z.B. erzeugt die obig gezeigten Signale:
1
//pull ¬CS line low
2
Start();
3
//read status register
4
Write(8,[0x05,0xFF]);
5
//pull ¬CS line high
6
Stop();

Das die ¬CS Leitung manuell mit der 'Start()' und 'Stop()' Funktion hoch 
bzw. runtergezogen werden muss entsteht zwischen der Flanke des ¬CS 
Signals und dem SPI CLK meistens eine Verzögerung von etwa 1ms wie in 
"spi_logic_analyzer_0.png" gezeigt. (Die ¬CS Leitung wird auch in 
'spi_logic_analyzer_1.png" von hoch auf tief gezogen, allerdings sieht 
man das bei der Timebase nicht).

von OT2048 (Gast)


Lesenswert?

Ist eventuell der Inhalt des Status-Registers = 0x00?

von uff basse (Gast)


Lesenswert?

Anita H. schrieb:
> Das EEPROM ist zudem ein I2C und kein ISP-EEPROM! Siehe Datenblatt:

So so, ist ein I2C-EEPROM? Na toll! Dann muss ich meine ganzen
Schaltungen mit SPI um-designen. Das wird richtig Arbeit machen.

von Tom (Gast)


Angehängte Dateien:

Lesenswert?

OT2048 schrieb:
> Ist eventuell der Inhalt des Status-Registers = 0x00?

Tatsächlich handelt es sich hierbei um die richtige Antwort, vielen 
Dank!

Wenn ich zunächst mittels
1
//pull ¬CS line low
2
Start();
3
//read status register
4
Write(8,0x06);
5
//pull ¬CS line high
6
Stop();

Das WEL Bit setze messe ich nachher den korrekten Wert, s. angehängtes 
Bild.

von Tom (Gast)


Lesenswert?

Sorry, der Code zum setzen des Write-Enable Bits ist falsch kommentiert, 
das folgende Skript funktioniert:
1
//pull ¬CS line low
2
Start();
3
//set the write enable bit to high
4
Write(8,0x06);
5
//pull ¬CS line high
6
Stop();
7
8
//pull ¬CS line low
9
Start();
10
//read status register
11
Write(8,[0x05,0xFF]);
12
//pull ¬CS line high
13
Stop();

von Falk B. (falk)


Lesenswert?

Anita H. schrieb:
> Das EEPROM ist zudem ein I2C und kein ISP-EEPROM! Siehe Datenblatt:

Selber. Die 24er haben I2C, die 25er SPI. Siehe Datenblatt ;-)

von Wolfgang (Gast)


Lesenswert?

Anita H. schrieb:
> Das EEPROM ist zudem ein I2C und kein ISP-EEPROM! Siehe Datenblatt:

Lies mal die zweite Zeile im Datenblatt: "64K SPI Bus Serial EEPROM"

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Anita H. schrieb:
> Das EEPROM ist zudem ein I2C und kein ISP-EEPROM!
24xx sind I2C Bausteine.

25xx haben ein SPI Interface.

ISP (= In System Programmable) sind zum Glück beide.

Tom schrieb:
> ziehe ich auf 5V hoch
Du versorgt das Ding mit 5V? Da scheint mir der MOSI High-Pegel mit 
seinen 2,8V aber etwas grenzwertig.

von Anita H. (anita1995)


Lesenswert?

Zum EEPROM wurde wohl schon alles gesagt.

Nur nicht von Jedem.

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.