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?
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"
Das EEPROM ist zudem ein I2C und kein ISP-EEPROM! Siehe Datenblatt:
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).
Ist eventuell der Inhalt des Status-Registers = 0x00?
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.
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.
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(); |
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 ;-)
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"
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.