Actions

KAmod SPI Flash (PL): Difference between revisions

From Kamamilabs.com - Wiki

Created page with "__jzpdf__ ===== Opis ===== <b>KAmod SPI Flash - Moduł z nieulotną pamięcią typu Flash z interfejsem SPI</b><br> <br> Moduł KAmod SPI Flash zawiera pamięć Flash z interfejsem SPI. Wszystkie sygnały sterujące zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm, tuż przy krawędzi płytki oraz w sposób odpowiadający obudowie do montażu przewlekanego DIL8. Moduł dostępny jest z pamięciami o pojemności 1 MB (..."
 
 
(13 intermediate revisions by the same user not shown)
Line 14: Line 14:
* Sygnały sterujące dodatkowo zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm w sposób odpowiadający obudowie do montażu przewlekanego DIL8
* Sygnały sterujące dodatkowo zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm w sposób odpowiadający obudowie do montażu przewlekanego DIL8
* Zasilanie napięciem 2,7...3,6 V
* Zasilanie napięciem 2,7...3,6 V
* Wymiary płytki: 27 x 18,3 mm
<br><br>
<br><br>
===== Wyposażenie standardowe =====
===== Wyposażenie standardowe =====
<center>
<center>
Line 35: Line 37:
===== Schemat elektryczny =====
===== Schemat elektryczny =====
<center>
<center>
[[File:KAmod_SPI_Flash_sch.png|none|900px|thumb|center]]
[[File:KAmod_SPI_Flash_sch.png|none|700px|thumb|center]]
</center>
</center>
<br>
<br>
Line 47: Line 49:
! style="text-align: center;"|<b>Funkcja</b>
! style="text-align: center;"|<b>Funkcja</b>
|-
|-
| style="text-align: center;"|<b>J2, 0...8</b>
| style="text-align: center;"|<b>CS</b>
| style="text-align: left;"|
*Wejście sygnału CS (Chip Select - aktywowanie interfejsu SPI)
|-
| style="text-align: center;"|<b>SCK</b>
| style="text-align: left;"|
*Wejście sygnału zegarowego/taktującego
|-
| style="text-align: center;"|<b>DI</b>
| style="text-align: left;"|
*Wejście szeregowe danych (Data In)
|-
| style="text-align: center;"|<b>DO</b>
| style="text-align: left;"|
*Wyjście szeregowe danych (Data Out)
|-
| style="text-align: center;"|<b>GND</b>
| style="text-align: left;"|
*Zasilanie – biegun ujemny (masa/GND)
|-
| style="text-align: center;"|<b>V+</b>
| style="text-align: left;"|  
| style="text-align: left;"|  
*8 wyjść z aktywnym stanem niskim (masa zasilania, GND)
*Zasilanie – biegun dodatni, napięcie 2,7...3,6 V
|-
|-
| style="text-align: center;"|<b>J2, VCC</b>
| style="text-align: center;"|<b>WP</b>
| style="text-align: left;"|  
| style="text-align: left;"|  
*wejście zasilania obwodów wyjść, biegun dodatni
*Wejście blokady zapisu (Write Protect) aktywne w stanie niskim, połączone ze zworką Write protect
|-
|-
| style="text-align: center;"|<b>J2, G</b>
| style="text-align: center;"|<b>HOLD</b>
| style="text-align: left;"|  
| style="text-align: left;"|  
*wejście zasilania obwodów wyjść, biegun ujemny (GND)
*Wejście sygnału zatrzymania komunikacji
|-
|-
|}
|}
</center>
</center>
<br>
<br>
Wyjścia modułu zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm, tuż przy krawędzi płytki. Umożliwiają one przylutowanie przewodów lub szpilek goldpin. Przyporządkowanie wyprowadzeń zostało pokazane na poniższym rysunku.
Komunikacja z pamięciami W25Q80/W25Q128 stosowanymi w KAmod SPI Flash jest możliwa poprzez interfejs SPI. Niektóre sygnały pełnią podwójną rolę w trybie komunikacji Dual/Quad SPI. Dokładny opis wszystkich sygnałów, sposobów komunikacji oraz procedur i komend jest zawarty w dokumentacji technicznej układów.
<br><br>
<br><br>
Każde wyjście jest zbudowane z tranzystora N-MOSFET i diody zabezpieczającej. Aktywne wyjście dostarcza masę zasilania (G GND), wyjście nieaktywne jest w stanie wysokiej impedancji (HiZ). Maksymalny prąd wyjścia nie może przekroczyć 1 A, a maksymalne napięcie na wyjściu nie może przekroczyć 50 V. Dzięki zastosowaniu diody zabezpieczającej, wyjścia mogą bezpośrednio sterować obciążeniami indukcyjnymi, np. przekaźnikami, elektrozaworami, silnikami elektrycznymi, jeśli ich parametry nie przekraczają wartości prądu lub napięcia maksymalnego.
Interfejs SPI ukłądów pamieci typu W25Qxxx może działać z bardzo wysokim taktowaniem (sygnał na wejściu SCK) nawet ponad 100 MHz, jednak w przypadku modułu połączonego przewodami nie zaleca się komunikacji z taktowaniem większym niż 50 MHz. W razie problemów z komunikacją należy zmniejszyć częstotliwość taktowania SPI.
<br><br>
<br><br>
Obwód wyjściowy należy połączyć z zasilaniem komponentów dołączonych do wyjść – VCC – biegun dodatni, G – biegun ujemny.
Rozmieszczenie sygnałów sterujących zostało pokazane na poniższych rysunkach. Oznaczenia sygnałów znajdują się na dolnej stronie płytki (bottom), zarówno dla złącza na krawędzi płytki jak i dla obudowy DIL8.
<br><br>
 
<center>
[[File:KAmod_SPI_Flash_r1.png|500px|]]
[[File:KAmod_SPI_Flash_r2.png|500px|]]
[[File:KAmod_SPI_Flash_r3.png|430px|]]
</center>
===== Oznaczenie pojemności pamięci =====
Moduł KAmod SPI Flash dostępny jest z pamięciami o pojemności 1 MB (8Mb) lub 16 MB (128 Mb). W zależności od wersji na płytce zamontowane są układy W25Q80 (1 MB) lub W25Q128 (16 MB).
<br><br>
Wersja pamięci jest zaznaczona na dolnej stronie płytki (bottom) tak, jak pokazano poniżej.
<center>
<center>
[[File:KAmod_I2C-Mini_Out_8_out.jpg|none|600px|thumb|center]]
[[File:KAmod_SPI_Flash_1MB.png|500px|]]
[[File:KAmod_SPI_Flash_1MB.jpg|600px|]]
</center>
<center>
[[File:KAmod_SPI_Flash_16MB.png|500px|]]
[[File:KAmod_SPI_Flash_16MB.jpg|600px|]]
</center>
</center>


 
===== Zabezpieczenie przed zapisem „Write protect” =====
<br>
<center>
{| class="wikitable"  style="width: 1000px;"
|-
! style="text-align: center;"|<b>Oznaczenie (J1)</b>
! style="text-align: center;"|<b>Funkcja</b>
|-
| style="text-align: center;"|<b>WP (J1)</b>
| style="text-align: left;"|
*Podanie stanu niskiego uaktywnia funkcję zabezpieczenia przed zapisem
|-
| style="text-align: center;"|<b>Write protect</b>
| style="text-align: left;"|
*Zamontowanie zworki/szpilek goldpin uaktywnia funkcję zabezpieczenia przed zapisem
|-
|}
</center>
<br>
Funkcja Write protect zabezpiecza pamięć przez skasowaniem lub zmianą jej zawartości.
<br><br>
Aby uaktywnić funkcję zabezpieczającą należy podać stan niski (logiczne 0) na wyprowadzenie WP. Innym sposobem jest przylutowanie kropli cyny w miejscu jumpera SMD lub przylutowanie szpilek goldpin z zamontowanym jumperem, tak jak pokazano na rysunku. Zamontowanie jumpera również wymusza stan niski na wyprowadzeniu WP.
<center>
[[File:KAmod_SPI_Flash_WP.png|none|600px|thumb|center]]
</center>
<br><br>


===== Zasilanie =====
===== Zasilanie =====
Line 89: Line 152:
|}
|}
</center>
</center>
<br>
Moduł KAmod SPI Flash może być zasilany napięciem stałym o wartości 2,7...3,6V, dołączonym do styków V+ oraz GND na złączu J1.
<br><br>
{| style="width: 500px;background-color:#ffffcc;border-left:solid 2px red;border-right:solid 2px red;border-top:solid 2px red;border-bottom:solid 2px red;" align="center"
|
<center>
<span style="color: red"> <b>Nie należy dołączać zasilania o napięciu 5V!</b>
</center><span>
|}


Moduł KAmod SPI Flash może być zasilany napięciem stałym o wartości 2,7...3,6V, dołączonym do styków V+ oraz GND na złączu J1.
<br>
<center>
<center>
[[File:KAmod_I2C-Mini_Out_8_pwr.jpg|none|600px|thumb|center]]
[[File:KAmod_SPI_Flash_PWR.png|none|500px|thumb|center]]
</center>
</center>
<br><br>
<br><br>
Line 101: Line 173:
<br>
<br>
<center>
<center>
[[File:KAmod_I2C-Mini_Out_8_wym.jpg|none|650px|thumb|center]]
[[File:KAmod_SPI_Flash_wym.png|none|650px|thumb|center]]
</center>
</center>
<br><br>
<br><br>
Line 264: Line 336:
*[https://wiki.kamamilabs.com/images/6/64/W25Q80DV.pdf Karta katalogowa W25Q80]
*[https://wiki.kamamilabs.com/images/6/64/W25Q80DV.pdf Karta katalogowa W25Q80]
*[https://wiki.kamamilabs.com/images/4/4a/W25q128jv.pdf Karta katalogowa W25Q128]
*[https://wiki.kamamilabs.com/images/4/4a/W25q128jv.pdf Karta katalogowa W25Q128]
*[https://github.com/KAMAMI-Labs/KAmod-I2C-Mini-Out8.git https://github.com/KAMAMI-Labs/KAmod-SPI-Flash.git]
*[https://github.com/KAMAMI-Labs/KAmod-SPI-Flash.git Przykładowe programy]
*[https://wiki.kamamilabs.com/images/9/91/KAmod-SPI_Flash.zip Model CAD (STEP)]
*[https://wiki.kamamilabs.com/images/9/91/KAmod-SPI_Flash.zip Model CAD (STEP)]

Latest revision as of 05:42, 28 July 2025

Opis

KAmod SPI Flash - Moduł z nieulotną pamięcią typu Flash z interfejsem SPI

Moduł KAmod SPI Flash zawiera pamięć Flash z interfejsem SPI. Wszystkie sygnały sterujące zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm, tuż przy krawędzi płytki oraz w sposób odpowiadający obudowie do montażu przewlekanego DIL8. Moduł dostępny jest z pamięciami o pojemności 1 MB (8Mb) lub 16 MB (128 Mb).

Podstawowe cechy i parametry
  • Pamięć nieulotna Flash o pojemności 1 MB (W25Q80) lub 16 MB (W25Q128)
  • Interfejs SPI o taktowaniu do 50 MHz (praca przy wyższej częstotliwości jest możliwa, ale zależy od jakości/długości połączeń sygnałów interfejsu SPI)
  • Zawartość pamięci można zabezpieczyć przed skasowaniem montując zworkę „Write protect”
  • Sygnały sterujące wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm, tuż przy krawędzi płytki
  • Sygnały sterujące dodatkowo zostały wyprowadzone jako punkty lutownicze z otworami, rozmieszczone ze standardowym rastrem 2,54 mm w sposób odpowiadający obudowie do montażu przewlekanego DIL8
  • Zasilanie napięciem 2,7...3,6 V
  • Wymiary płytki: 27 x 18,3 mm



Wyposażenie standardowe
Kod Opis
KAmod SPI Flash
  • Zmontowany i uruchomiony moduł
  • 1 x prosta listwa goldpin 8-pin raster 2,54 mm
Schemat elektryczny


Sygnały sterujące


Oznaczenie (J1) Funkcja
CS
  • Wejście sygnału CS (Chip Select - aktywowanie interfejsu SPI)
SCK
  • Wejście sygnału zegarowego/taktującego
DI
  • Wejście szeregowe danych (Data In)
DO
  • Wyjście szeregowe danych (Data Out)
GND
  • Zasilanie – biegun ujemny (masa/GND)
V+
  • Zasilanie – biegun dodatni, napięcie 2,7...3,6 V
WP
  • Wejście blokady zapisu (Write Protect) aktywne w stanie niskim, połączone ze zworką Write protect
HOLD
  • Wejście sygnału zatrzymania komunikacji


Komunikacja z pamięciami W25Q80/W25Q128 stosowanymi w KAmod SPI Flash jest możliwa poprzez interfejs SPI. Niektóre sygnały pełnią podwójną rolę w trybie komunikacji Dual/Quad SPI. Dokładny opis wszystkich sygnałów, sposobów komunikacji oraz procedur i komend jest zawarty w dokumentacji technicznej układów.

Interfejs SPI ukłądów pamieci typu W25Qxxx może działać z bardzo wysokim taktowaniem (sygnał na wejściu SCK) – nawet ponad 100 MHz, jednak w przypadku modułu połączonego przewodami nie zaleca się komunikacji z taktowaniem większym niż 50 MHz. W razie problemów z komunikacją należy zmniejszyć częstotliwość taktowania SPI.

Rozmieszczenie sygnałów sterujących zostało pokazane na poniższych rysunkach. Oznaczenia sygnałów znajdują się na dolnej stronie płytki (bottom), zarówno dla złącza na krawędzi płytki jak i dla obudowy DIL8.

Oznaczenie pojemności pamięci

Moduł KAmod SPI Flash dostępny jest z pamięciami o pojemności 1 MB (8Mb) lub 16 MB (128 Mb). W zależności od wersji na płytce zamontowane są układy W25Q80 (1 MB) lub W25Q128 (16 MB).

Wersja pamięci jest zaznaczona na dolnej stronie płytki (bottom) tak, jak pokazano poniżej.

Zabezpieczenie przed zapisem „Write protect”


Oznaczenie (J1) Funkcja
WP (J1)
  • Podanie stanu niskiego uaktywnia funkcję zabezpieczenia przed zapisem
Write protect
  • Zamontowanie zworki/szpilek goldpin uaktywnia funkcję zabezpieczenia przed zapisem


Funkcja Write protect zabezpiecza pamięć przez skasowaniem lub zmianą jej zawartości.

Aby uaktywnić funkcję zabezpieczającą należy podać stan niski (logiczne 0) na wyprowadzenie WP. Innym sposobem jest przylutowanie kropli cyny w miejscu jumpera SMD lub przylutowanie szpilek goldpin z zamontowanym jumperem, tak jak pokazano na rysunku. Zamontowanie jumpera również wymusza stan niski na wyprowadzeniu WP.



Zasilanie
Oznaczenie Funkcja
  • V+ (J1)
  • GND (J1)
  • wejście zasilania obwodów sterujących, biegun dodatni
  • wejście zasilania obwodów sterujących, biegun ujemny (GND)


Moduł KAmod SPI Flash może być zasilany napięciem stałym o wartości 2,7...3,6V, dołączonym do styków V+ oraz GND na złączu J1.

Nie należy dołączać zasilania o napięciu 5V!




Wymiary

Wymiary płytki KAmod SPI Flash to 27x18,3 mm. Na płytce znajdują się 2 otwory montażowe o średnicy 3,2 mm.



Program testowy

Program testowy został napisany w środowisku Arduino dla płytki KAmodESP32 POW RS485.

//example code for KAmod SPI Flash 1MB (W25Q80)
//ino board: ESP32-WROOM-DA Module

#include <SPI.h>
#include "Kamod_SPIFlashBase.h"

//LED
#define LED_PIN       2 
#define MY_DELAY      2000

//SPI
#define SPI_MOSI      13
#define SPI_MISO      12
#define SPI_SCK       14
#define SPI_CS        15
#define SPI_CLOCK     10000000

//INIT
SPIClass spiFlashBus(HSPI);
Kamod_SPIFlashBase spiFlashBase(&spiFlashBus, SPI_CS, SPI_SCK, SPI_MOSI, SPI_MISO);
Kamod_SPIFlash_Device_t MY_W25Q80DV;
uint8_t *data_buff;

int ledi;
int loops;
bool retstat;
bool verify;
int result;

//-------------------------------------------
void setup() {
  Serial.begin(115200);
  while (!Serial) {}
  delay(1000); // wait for native usb
  Serial.println();
  Serial.println();
  Serial.println();
  Serial.println("Hello. KAmod SPI Flash test start");

  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);
  ledi = 0;

  retstat = false;
  while(retstat == false){
    spiFlashBus.begin(SPI_SCK, SPI_MISO, SPI_MOSI, SPI_CS);
    spiFlashBase.setClockSpeed(SPI_CLOCK, SPI_CLOCK);
    retstat = spiFlashBase.begin(&MY_W25Q80DV);
    if (!retstat){
      Serial.println("Init fail ");
      delay(1000);
    } else {
      Serial.print("JEDEC: ");
      Serial.println(spiFlashBase.getJEDECID(), HEX);
    }
  }

  Serial.println("Flash init...OK");
  Serial.println("--- First, erase sector ---");
  spiFlashBase.eraseSector(0);
  delay(500);
  loops = 0;
  result = 0;

  Serial.println();
}

//-------------------------------------------
void loop() {  
  Serial.print("### START at page: ");
  Serial.print(loops);
  Serial.println(" ###");

  Serial.println("--- Clear buff ---");
  data_buff = spiFlashBase.buff();
  for(int n = 0; n<KAMOD_SFLASH80_PAGE_SIZE; n++){
    *data_buff = 0;
    data_buff++;
  }

  Serial.println("--- Read mem ---");
  spiFlashBase.readPageBuff(loops * KAMOD_SFLASH80_PAGE_SIZE);
  data_buff = spiFlashBase.buff();
  for(int n = 0; n<20; n++){
    Serial.print(*data_buff);
    Serial.print(",");
    data_buff++;
  }
  Serial.println("");

  Serial.println("--- Prepare new buff ---");
  data_buff = spiFlashBase.buff();
  for(int n = 0; n<20; n++){
    *data_buff = (uint8_t)(n + (loops*10));
    Serial.print(*data_buff);
    Serial.print(",");
    data_buff++;
  }
  Serial.println("");

  Serial.println("--- Write mem ---");
  //spiFlashBase.eraseSector(0);
  spiFlashBase.writePageBuff(loops * KAMOD_SFLASH80_PAGE_SIZE);
  
  Serial.println("--- Clear buff ---");
  data_buff = spiFlashBase.buff();
  for(int n = 0; n<KAMOD_SFLASH80_PAGE_SIZE; n++){
    *data_buff = 0;
    data_buff++;
  }

  Serial.println("--- Read mem for check content ---");
  spiFlashBase.readPageBuff(loops * KAMOD_SFLASH80_PAGE_SIZE);
  data_buff = spiFlashBase.buff();
  for(int n = 0; n<20; n++){
    Serial.print(*data_buff);
    Serial.print(",");
    data_buff++;
  }
  Serial.println("");

  Serial.print("### Verify ");
  verify = true;
  data_buff = spiFlashBase.buff();
  for(int n = 0; n<20; n++){
    if (*data_buff != (uint8_t)(n + (loops*10))) verify = false;
    data_buff++;
  }
  if (verify) {
    result++;
    Serial.println("OK ###");
  }
  else Serial.println("FAIL !!! ###");

  ledi++;
  digitalWrite(LED_PIN, (ledi&1)); 
  Serial.println();
  Serial.println();
  Serial.println();

  delay(500);
  loops++;
  if (loops >= 3) {
    if (result == 3) Serial.println("### Verify OK 3 times ###");
    else Serial.println("!!! Some things are wrong, some verifications fail !!!!");
    Serial.println("### THATS ALL ###");
    while(1){};
  }
}



Linki