Stránka 5 z 6

Re: Paměťový modul

Napsal: 25 led 2021, 11:30
od Patrik
Objednal jsem si tento.

Kód: Vybrat vše

 https://a.aliexpress.com/_mKDG11j

Re: Paměťový modul

Napsal: 25 led 2021, 11:35
od Patrik
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...

Re: Paměťový modul

Napsal: 25 led 2021, 11:36
od ondraN
To se asi dozvíš, až ti přijde :mrgreen: Ale i 8KB stačí, ne?

Re: Paměťový modul

Napsal: 25 led 2021, 11:45
od Patrik
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...

Re: Paměťový modul

Napsal: 25 led 2021, 11:59
od ondraN
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:

Re: Paměťový modul

Napsal: 25 led 2021, 13:11
od gilhad
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 ... :)

Re: Paměťový modul

Napsal: 10 úno 2021, 17:46
od AstroMiK
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;
  }
  


Re: Paměťový modul

Napsal: 11 úno 2021, 04:11
od gilhad
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?

Re: Paměťový modul

Napsal: 11 úno 2021, 07:59
od AstroMiK
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í.

Re: Paměťový modul

Napsal: 11 úno 2021, 12:24
od ondraN
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.