Використовуючи обчислювальну техніку ми звикли до великих обсягів пам’яті на ПК для роботи з інформацією, в світі мікроконтролерів та мікрокомп’ютерів кожен байт на вагу золота. Кожному з нас хто працював із розробкою роботів та роботизованих систем відома ситуація коли дорогоцінна пам’ять закінчується в самий непідходящий час.
Більшість МК мають можливість розширення енергонезалежної пам’яті за рахунок шини даних SPI і чіпів пам’яті SPI-flash, зокрема серії W25Qxxx що мають різну ємність від кількох сотень кілобайт до 16Мб і більше.
Тому використавши всього 4 порти та живлення можна розширити можливості по збереженню налаштувань та іншої важливої інформації, наприклад веб-інтерфейсів взаємодії.
Розглянемо схему підключення чіпа пам’яті до МК ESP32 на ній окрім основних ліній даних та живлення потрібно підтягнути до високого рівня(рівня живлення 3,3В) піни WP та HOLD для нормальної роботи.
Складемо простий скрипт, який прочитає виробника, ідентифікатор та обсяг пам’яті мікросхеми
Код
#include <SPI.h>
const int CS_PIN = 5; // Пін CS (підключено до GPIO 5)
void setup() {
Serial.begin(115200);
delay(1000);
// Ініціалізація апаратного SPI на Lolin 32 (SCK=18, MISO=19, MOSI=23)
SPI.begin(18, 19, 23, CS_PIN);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
Serial.println("Опитування W25Q32FVA...");
// Читання JEDEC ID (команда 0x9F)
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x9F);
byte manufacturer = SPI.transfer(0x00); // Має бути 0xEF (Winbond)
byte memType = SPI.transfer(0x00); // Має бути 0x40
byte capacity = SPI.transfer(0x00); // Має бути 0x16 (4MB)
digitalWrite(CS_PIN, HIGH);
Serial.println("-----------------------------------");
Serial.printf("Manufacturer ID: 0x%02X (очікується 0xEF)\n", manufacturer);
Serial.printf("Memory Type: 0x%02X (очікується 0x40)\n", memType);
Serial.printf("Capacity ID: 0x%02X (очікується 0x16)\n", capacity);
if (manufacturer == 0xEF && capacity == 0x16) {
Serial.println("✅ Чіп успішно ідентифіковано як W25Q32!");
} else {
Serial.println("❌ Помилка зв'язку! Перевірте підключення пінів.");
}
}
void loop() {
}
Якщо все правильно підключено, то після перепрошивки ви отримаєте подібний вивід в консолі термінала паралельного порту (перед цим виставте швидкість даних 115200 біт/с).