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 (..." |
|||
| Line 35: | Line 35: | ||
===== Schemat elektryczny ===== | ===== Schemat elektryczny ===== | ||
<center> | <center> | ||
[[File:KAmod_SPI_Flash_sch.png|none| | [[File:KAmod_SPI_Flash_sch.png|none|600px|thumb|center]] | ||
</center> | </center> | ||
<br> | <br> | ||
Revision as of 06:18, 4 June 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
Wyposażenie standardowe
| Kod | Opis |
|---|---|
| KAmod SPI Flash |
|

Schemat elektryczny

Sygnały sterujące
| Oznaczenie (J1) | Funkcja |
|---|---|
| J2, 0...8 |
|
| J2, VCC |
|
| J2, G |
|
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.
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.
Obwód wyjściowy należy połączyć z zasilaniem komponentów dołączonych do wyjść – VCC – biegun dodatni, G – biegun ujemny.

Zasilanie
| Oznaczenie | Funkcja |
|---|---|
|
|
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.

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){};
}
}