MR25H10 per SPI will nicht

Gast #3332336
Lesenswert?

Hi,

hat jemand Erfahrung mit genannten MRAM von Everspin. Ich bekomme keine 
sinnvollen Daten über SPI ausgelesen.

/CS und /WP ist parmanent an High.
WEL-Bit im Status-Register des MRAM wird als erstes gesetzt mit dem 
Steuercode 0x06 Hex

Beim Auslesen des Status oder einer Speicheradresse bekomme ich nur 
Daten die keinen Sinn ergeben.

SPI-Bus sieht auf dem Logik Analysator gut aus.

Hat jemand eine Idee??
Gast #3332454
Lesenswert?

Fehler von mir. Ich meine /HOLD und /WP ist permanent auf High.

/CS wird für die Dauer der Übertragung natürlich auf Low gezogen. Ich 
bekomme ja auch Daten rein nur nicht die Richtigen. Der MRAM sendet 
Daten die nicht nachzuvollziehen sind.
Gast #3337518
Lesenswert?

Init
1
CLEAR_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
2
_delay_us(4);   
3
FASTSPI_TX(MRAM_WREN); // Write Enable
4
SET_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
5
_delay_us(4);

read status
1
CLEAR_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
2
_delay_us(4);  
3
uint8_t temp;
4
FASTSPI_TX(MRAM_RDSR);
5
FASTSPI_RX(temp);
6
uart_putc(temp);    
7
SET_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);

schreiben
1
void MRAM_1_write(uint32_t add, uint8_t *data, uint16_t len)
2
{
3
  add &= 0x00FFFFFF; // max 24 Bit Address
4
  
5
//  uart_puts("\nMRAM write");
6
  
7
  CLEAR_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
8
  
9
  FASTSPI_TX(MRAM_WRITE);
10
  FASTSPI_TX((uint8_t)(add >> 16));
11
  FASTSPI_TX((uint8_t)(add >> 8));
12
  FASTSPI_TX((uint8_t)(add >> 0));
13
  
14
  for (uint16_t i = 0; i < len; i++)
15
  {
16
    FASTSPI_TX(data[i]);
17
  }  
18
  
19
  SET_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
20
}

lesen
1
void MRAM_1_read(uint32_t add, uint8_t *data, uint16_t len)
2
{
3
  add &= 0x00FFFFFF; // max 16 Bit Address
4
  
5
//  uart_puts("\nMRAM write");
6
  
7
  CLEAR_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
8
  
9
  FASTSPI_TX(MRAM_READ);
10
  FASTSPI_TX((uint8_t)(add >> 16));
11
  FASTSPI_TX((uint8_t)(add >> 8));
12
  FASTSPI_TX((uint8_t)(add >> 0));
13
  
14
  for (uint16_t i = 0; i < len; i++)
15
  {
16
    FASTSPI_RX(data[i]);
17
  }
18
  
19
  SET_BIT(SPI_PORT_OUT,SPI_CS_MRAM_1);
20
}
1
#define FASTSPI_WAIT() while(!(SPSR & (1 << SPIF)))
2

3
#define FASTSPI_TX(x) \
4
    do { \
5
        SPDR = x; \
6
        FASTSPI_WAIT(); \
7
    } while (0)
8

9
#define FASTSPI_RX(x) \
10
    do { \
11
        SPDR = 0; \
12
        FASTSPI_WAIT(); \
13
        x = SPDR; \
14
    } while (0)
15

16
#define FASTSPI_RX_o(x) \
17
    do { \
18
        x = SPDR; \
19
    } while (0)
Gast #3337774
Lesenswert?

Ein Screenshot vom Logic Analyzer wo die ganze Sequenz drauf ist wäre 
auch interessant (mit SPI Decoder am besten).

Wie schnell ist deine SPI Clock und hälst du alle Timings des Chips laut 
Datenblatt ein?
Gast #3353491
Lesenswert?

Hi,

ich habe einen neuen MR25H10 jetzt funktioniert alles. Der alte Speicher 
war wohl defekt.

Den Screenshot vom Logic Analyzer habe ich trotzdem mal beigefügt, 
vielleicht hilft es jemanden anderem weiter.

Danke für eure Hilfe
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren