Paměťový modul

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Paměťový modul

Příspěvek od Patrik » 25 led 2021, 11:30

Objednal jsem si tento.

Kód: Vybrat vše

 https://a.aliexpress.com/_mKDG11j

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Paměťový modul

Příspěvek od Patrik » 25 led 2021, 11:35

Akorát nechápu, proč tam je v popisku 8 KB.. Neměla by mít 32 KB? Když se podívám I na obsah balení a vyhledá na Internetu, tak má mit 32 KB...

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Paměťový modul

Příspěvek od ondraN » 25 led 2021, 11:36

To se asi dozvíš, až ti přijde :mrgreen: Ale i 8KB stačí, ne?

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Paměťový modul

Příspěvek od Patrik » 25 led 2021, 11:45

Tak uvažuji, že bych tam uložil více věcí...

Asi 200 čísel od 0-50
Asi 400 čísel pouze boolean (log 0 nebo 1)
Pak asi 200 čísel unsigned long
A pokud se dá i řetězec string (nezkoušel jsem) prostě jen jméno (taky 200x)

No, je to zvláštní, že to má být 32 KB a v popisu je 8KB...

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Paměťový modul

Příspěvek od ondraN » 25 led 2021, 11:59

Když se podívám na další fotky modulu, tak je ze zadní strany natištěno 32KB. Tak je buď chyba v popisu, nebo nespávná sada fotek, ale tipnul bych na ten popis :mrgreen:

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Paměťový modul

Příspěvek od gilhad » 25 led 2021, 13:11

Tady by mel byt popis

https://www.google.com/search?q=mb85rc256v+datasheet

a asi pujde o klasicke zmateni typu kapacita 256 K (32 K × 8) cili 32K slov po 8 bitech = 256K bitu - akorat nekdo udela ten krok jeste jednou a nejak to totalne zvoral. Nebo je tam nejaky bud fake, nebo vadny chip, ktery ma tech 8KB, to uvidis, az ti to prijde ... :)

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Paměťový modul

Příspěvek od AstroMiK » 10 úno 2021, 17:46

Jak jsme se tu na druhé stránce vlákna bavili o té SPI EERAM paměti, tak jsem jednu koupil a vyzkoušel.

Bohužel jsem neuspěl.

Přes SPI knihovnu to nedělalo vůbec nic (výstup MISO byl pořád ve vysoké impedanci).
Tak jsem napsal jednoduchý program pro přímé ovládání pinů MOSI, CS a SCK a pro čtení pinu MISO.
Hodně jsem to zpomalil - všude jsem zařadil více než dostatečné pauzy.

Po připojení na analyzátor se zdá, že paměť už reaguje, ale některé bity vrací špatně.

Pro příklad jsem provedl následující činnosti:

- Povolit zápis (příkaz WREN).
- Přečíst Status registr (příkaz RDSR) - tady mi nepochopitelně pořád vrací, že je BUSY.
- Zapsat na adresu 20 číslo 150 (příkaz WRITE)
- Přečíst hodnotu z adresy 20 (příkaz READ) - tady mi místo čísla 150 vrací pořád 159.

Zkoušel jsem zapisovat i jiná čísla, ale vždycky mi to několik bitů zmrší.

Když jsem z programu vyhodil část se zápisem, tak si paměť opravdu při vypnutí napájení trvale zapamatovala hodnotu.
Po dalším zapnutí napájení jí bylo možné přečíst. Přečetla se ale ta špatná hodnota (159 místo 150).


Pro připojení k Arduinu NANO jsem musel použít 4-kanálový převodník úrovní, protože paměť pracuje s 3V úrovněmi.

Ještě to někdy zkusím připojit k STM32F103 (BluePill). Ten pracuje s 3V úrovněmi, takže nebude nutný převodník.

Výstupy z analyzátoru
---------------------------
WREN:
sig_wren.gif

RDSR:
sig_rdsr.gif

WRITE:
sig_write.gif

READ:
sig_read.gif


Kód do Arduina NANO:

Kód: Vybrat vše


#define pin_CS   10
#define pin_MOSI 11
#define pin_MISO 12
#define pin_SCK  13


void setup(void)
  {
    Serial.begin(9600);
    
    pinMode(pin_SCK,OUTPUT);
    pinMode(pin_MOSI,OUTPUT);
    pinMode(pin_MISO,INPUT);
    pinMode(pin_CS,OUTPUT);

    digitalWrite(pin_CS,HIGH);
    digitalWrite(pin_MOSI,LOW);

    delay(1000);

    delay(100);                             // zapis WREN
    digitalWrite(pin_CS,LOW);
    delay(10);
    posli_data(0x06);                       // WREN = Write Enable
    delay(10);
    digitalWrite(pin_CS,HIGH);


    delay(200);                             // cteni STATUS registru
    digitalWrite(pin_CS,LOW);
    delay(10);
    posli_data(0x05);                       // RDSR = Read Status Register
    byte status_reg = posli_data(0);        // jen 8x tiknuti hodinami   
    digitalWrite(pin_CS,HIGH);

    Serial.println(status_reg);

    
    
    delay(200);                             // zapis hodnoty
    digitalWrite(pin_CS,LOW);
    delay(10);
    posli_data(0x02);                       // WRITE = zapis do RAM
    posli_data(0);                          // Adresa MSB
    posli_data(20);                         // Adresa LSB
    posli_data(150);                        // data
   
    digitalWrite(pin_CS,HIGH);



    delay(200);                             // cteni hodnoty
    digitalWrite(pin_CS,LOW);
    delay(10);
    posli_data(0x03);                       // READ = cteni RAM
    posli_data(0);                          // Adresa MSB
    posli_data(20);                         // Adresa LSB
    byte dataread = posli_data(0);          // jen 8x tiknuti hodinami pro precteni dat
   
    digitalWrite(pin_CS,HIGH);
    Serial.println(dataread);

  }


void loop(void)
  {
  }





//--------------------------------------------
byte posli_data(byte vstupniBajt)
  {
    byte vystup = 0;
    for (byte i=8; i > 0 ; i--)                                       // prochazi se od nejvyssiho bitu k nejnizsimu
      {
        boolean databit = bitRead(vstupniBajt,i-1);
        delay(1);
        
        if (databit == false)     digitalWrite(pin_MOSI,LOW);        // MOSI se nastavi podle aktualniho databitu
        else                      digitalWrite(pin_MOSI,HIGH);
        
        delay(1);
        digitalWrite(pin_SCK,HIGH);                                 // jedno kladne tiknuti hodinami
        delay(2);
        if(digitalRead(pin_MISO) == HIGH)       bitSet(vystup,i-1); // pri SCK v HIGH se testuje stav pinu MISO
        digitalWrite(pin_SCK,LOW);                                  // navrat hodin do LOW
        delay(1);
      }
    return vystup;
  }
  


Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Paměťový modul

Příspěvek od gilhad » 11 úno 2021, 04:11

To mi zni, ze by klidne taky ten prikaz WRITE mohl byt spatny (zapsat tam spatnou hodnotu, kterou ten chip proste "pochopi jinak"), kdyz read vraci to same hned i po restartu. Meril jsi to u te RAM, nebo u Arduina?

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Paměťový modul

Příspěvek od AstroMiK » 11 úno 2021, 07:59

gilhad píše:
11 úno 2021, 04:11
... Meril jsi to u te RAM, nebo u Arduina?
Ty záznamy průběhů jsou nasnímané až u RAM - za tím převodníkem úrovní.
Mám to na nepájivém poli, tak jsem myslel, že by to mohlo být nějaké rušení.
Ta hodnota je ale pokaždé stejná. I když zkouším několikrát zapsat číslo 150 tak vždycky dostanu 159.

Možná je problém už v tom, že paměť hlásí "BUSY" ve status registru.

Ještě si nejsem úplně jistý tím /HOLD pinem. Napojil jsem ho přímo na Vcc.
Těsně u paměti mám ještě mezi Vcc a GND vykrývací kondenzátor.

Jak jsem psal, ještě to o víkendu vyzkouším na STM32, jestli do toho nevnáší nějaké problémy ten převodník úrovní.

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Paměťový modul

Příspěvek od ondraN » 11 úno 2021, 12:24

AstroMiK píše:
11 úno 2021, 07:59
gilhad píše:
11 úno 2021, 04:11
... Meril jsi to u te RAM, nebo u Arduina?
Ty záznamy průběhů jsou nasnímané až u RAM - za tím převodníkem úrovní.
Mám to na nepájivém poli, tak jsem myslel, že by to mohlo být nějaké rušení.
Ta hodnota je ale pokaždé stejná. I když zkouším několikrát zapsat číslo 150 tak vždycky dostanu 159.

Možná je problém už v tom, že paměť hlásí "BUSY" ve status registru.

Ještě si nejsem úplně jistý tím /HOLD pinem. Napojil jsem ho přímo na Vcc.
Těsně u paměti mám ještě mezi Vcc a GND vykrývací kondenzátor.

Jak jsem psal, ještě to o víkendu vyzkouším na STM32, jestli do toho nevnáší nějaké problémy ten převodník úrovní.
HOLD napojeny na Vcc je OK a vůbec se s ním nemusíš zabývat. Slouží k řešení prioritního konkurenčního přístupu k SPI.
Zkus u toho svého testovacího bastlu zapnout pullupy, převodníky pak lépe fungují.
Pokusím se sem večer hodit knihovnu co jsem dělal na STM32, ale je s použitím HAL.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů