
SPIFFS - نظام ملفات (Serial Peripheral Interface Flash File System) لنظام ذاكرة الفلاش المتصل عبر واجهة طرفية متسلسلة. بعبارة بسيطة: يوجد متحكم ESP32 (الشكل 1) ، يحتوي على ذاكرة NOR غير قابلة لإعادة الكتابة مضمّنة ، والتي تخزن: التفضيلات ، أداة تحميل التشغيل ، البرامج الثابتة (رسم مترجم) ، نظام الملفات (SPIFFS) وشيء آخر شيء مثل تحديث عبر الأثير (OTA).

الشكل 1. الرسم البياني كتلة وظيفية من متحكم ESP32
تعد ذاكرة NOR نوعًا من الذاكرة القابلة لإعادة الكتابة غير القابلة للتطاير ولديها سرعة قراءة عالية إلى حد ما وسرعة كتابة ومحو منخفضة نسبيًا مقارنة بنوع ذاكرة NAND . يكاد يكون من المستحيل تلبية ذاكرة NOR ذات السعة الكبيرة ، وعادة ما تقتصر على 128 ميغابايت. في حالة ESP32 - أربعة .
اليوم SPIFFS لديه بعض العيوب. القصور بما في ذلك: عدم وجود دعم مجلد ؛ ليس كومة في الوقت الحقيقي ، لذلك قد تستغرق العملية نفسها أوقاتًا مختلفة ؛ عدم القدرة على إيجاد وإصلاح الكتل المكسورة. إذا كانت أوجه القصور المدرجة ليست مهمة بالنسبة لك ، فإننا نواصل قراءة الفقرة التالية.
دعنا نتحدث عن استخدام
لسوء الحظ ، خارج المربع ، لم يتم ترميز ذاكرة متحكم SPIFFS ، من أجل وضع علامة عليها ، تحتاج إلى استخدام ESP32FS في بيئة تطوير Arduino IDE.
بعد تنزيل المكون الإضافي ، يجب تثبيته:
- تأكد من أن لديك أحدث إصدار من بيئة تطوير Arduino IDE وبرنامج تشغيل جهازك المثبت على ESP32 . لديّ برنامج التشغيل M5Stack CP210X الذي أقوم بتنزيله من هذا الرابط ؛
- انسخ مجلد الأداة الذي تم تنزيله مع المكون الإضافي المضمن في المجلد / Arduino / tools / ESP32FS / ؛
- على macOS ، يوجد المجلد في ~ / Documents / Arduino / ؛
- أعد تشغيل الكمبيوتر وتحقق من بيئة التطوير في قائمة " أدوات " ، يظهر عنصر ESP32 Sketch Data Upload (الشكل 2) - وهذا يعني أنك فعلت كل شيء بشكل صحيح ؛

الشكل 2. أدوات القائمة
- انتبه إلى مجلد البيانات الموجود بجانب المخطط. سيتم تحميل جميع الملفات الموجودة في هذا المجلد في ذاكرة الجهاز أثناء التنسيق ؛
- لا تتردد في تحديد العنصر المشار إليه وانتظر حتى نهاية تنسيق منطقة الذاكرة. يرجى ملاحظة أن أقسام أخرى من الذاكرة لن تتأثر ، مما يعني أن البرامج الثابتة ستبقى في ذاكرة الجهاز وستعمل. وبالمثل مع المخطط ، عند تجميعه في البرامج الثابتة وتنزيله على الجهاز ، لن يتأثر نظام الملفات.
إذا كنت تريد الراحة
إذا كنت ترغب في لمس الملفات ورؤية معلومات حول المساحة الحرة ، فقم بتنزيل رسم BRIDGE وفلاش جهازك به.
تحميل أيضا وتجميع مدير الملفات عبر النظام الأساسي A-Explorer (الشكل 3). في GitHub ، ستكون الثنائيات في مجلد bin قريبًا.

الشكل 3 أ. مدير ملفات A-Explorer لنظام التشغيل macOS

الشكل 3 ، ب. مدير ملفات مستكشف ويندوز
سيسمح لك مدير الملفات هذا باكتشاف معلومات حول المساحة الحرة وتحميل / تنزيل / حذف الملفات. هناك إشارة إلى التقدم المحرز في العملية.
كما ترون من الشكل 3 ، خصص المكون الإضافي حوالي 1.38 ميغابايت من الذاكرة ضمن SPIFFS.
من هو هذا الجسر؟
BRIDGE عبارة عن رسم ، وقبل كل شيء ، دالة تحمل نفس الاسم تعمل مع نظام ملفات SPIFFS و A-Explorer عبارة عن غلاف رسومي له. يرسل الأخير أمرًا واحدًا أو آخر ، وهذه الوظيفة تعالجها على الجهاز نفسه باستخدام مكتبات FS و SPIFFS . دعونا نرى ما هو مثير للاهتمام في هذه المكتبات.
لنبدأ بالنظر إلى الأساليب العامة لفئة SPIFFS :
Bool start method (bool formatOnFail = false، const char * basePath = "/ spiffs"، uint8_t maxOpenFiles = 10). يحاول هذا الأسلوب تهيئة مثيل للفئة. الوسيطة الأولى صحيحة أو خاطئة في حالة تنسيق نظام الملفات إذا لم يتم تنسيق نظام الملفات. تأخذ الوسيطة الثانية المسار حيث سيتم تحديد موقع جذر نظام الملفات. ستحدد الوسيطة الثالثة عدد الملفات المفتوحة في وقت واحد. من الأفضل ترك المعلمتين الأخيرتين افتراضيًا وعدم تغييرهما. إذا كان نظام الملفات مفقودًا (لم يتم استخدام المكون الإضافي أعلاه). ثم سوف تعود وظيفة كاذبة.
سوف تتحقق طريقة التنسيق المنطقي () من أن نظام الملفات مهيأ - إرجاع صحيح ، وإلا - خطأ.
الحجم size_t totalBytes (). تقوم هذه الطريقة بإرجاع size_t-number لإجمالي عدد البايتات المخصصة لنظام الملفات.
أسلوب Size_t usedBytes (). هذا الأسلوب بإرجاع size_t عدد البايتات المستخدمة في نظام الملفات.
نهاية باطلة () طريقة. هذه الطريقة تلغي هذه الفئة. بعد استدعاء هذه الطريقة ، لا معنى لاستدعاء طرق أخرى.
كل شيء في هذه الفئة ، لا يوجد شيء مثير للاهتمام بشكل خاص. دعنا ننتقل إلى فئة FS ونرى ما يمكن أن يكون مفيدًا من هناك.
أول ما يلفت انتباهك هو طريقة التهيئة لفئة البداية (). لا تتطلب هذه الطريقة وسيطات وليست هناك حاجة للاتصال بها ، لأننا سنستخدم الطريقة التالية فورًا.
طريقة فتح الملف ( مسار const char ، وضع const char ) وملفه الشقيق مفتوح (const string & path ، const char * mode). تأخذ هذه الطرق وسيطين ، أولهما مؤشر رمزي وسلسلة إلى مسار الملف ، والثاني هو وضع الفتح ، والذي يمكن أن يكون الثابت التالي:
FILE_READ - مفتوح للقراءة فقط ؛
FILE_WRITE - مفتوح للكتابة فقط ؛
FILE_APPEND - مفتوح للكتابة.
بعد أن فتحنا الملف ، يمكننا الآن إجراء أي عمليات عليه.
- تتيح لك طريقة كتابة size_t (uint8_t) كتابة عدد صحيح واحد غير موقّع من 8 بت في نهاية الملف.
- تتيح لك طريقة كتابة size_t (const uint8_t * buf ، size_t size) كتابة سلسلة من الأعداد الصحيحة غير الموقعة من الطول المحدد في الوسيطة الثانية.
- تحسب الطريقة int () المتوفرة عدد الأحرف من النهاية إلى المؤشر.
- تقرأ طريقة int read () حرفًا واحدًا من الملف وتعيده على شكل عدد صحيح ، بينما يغير المؤشر وحدة واحدة إلى اليمين.
- يقرأ الأسلوب size_t readBytes (char * buffer ، size_t length) الأحرف في المخزن المؤقت المشار إليه بواسطة الوسيطة الأولى ، وعدد الأحرف التي تم تمريرها بواسطة الوسيطة الثانية. إرجاع عدد الأحرف المقروءة.
- قراءة الأسلوب String readString () سطر من ملف.
- تعمل طريقة int peek () بشكل مشابه لطريقة int read () ، يبقى المؤشر في مكانه فقط.
- يعين أسلوب البحث المنطقي (uint32_t pos ، وضع SeekMode) وطريقة البحث المنطقي (uint32_t pos ، وضع SeekMode) المؤشر إلى الموقع المحدد. يتم تمرير الموضع كالوسيطة الأولى ، والقاعدة الثانية ( SeekSet - تعيين المؤشر). إذا نجحت - إرجاع صحيح ، وإلا - خطأ.
- ترجع طريقة size_t position () موضع المؤشر.
- ترجع الأسلوب size_t size () حجم الملف بالبايت.
- ترجع الأسلوب const char * name () اسم الملف.
- أسلوب const char * fullName () ، مع مراعاة المسار الكامل.
- إرجاع الأسلوب isFile () bool صحيحاً إذا كان الكائن المفتوح ملف. خلاف ذلك - كذبة.
- إرجاع الأسلوب isDirectory () bool صحيحاً إذا كان الكائن المفتوح مجلد. خلاف ذلك - كذبة.
- إرجاع الأسلوب openNextFile () File مؤشر إلى الملف التالي في الجذر ، وإلا NULL.
- يوجد bool (const char * path) ويوجد bool (const String & path) تأخذ الطرق الاسم الكامل للملف كوسيطة ، وإذا كان مثل هذا الملف موجودًا ، فإنه يعود صحيحًا أو خطأ.
- محاولة إزالة bool (const char * path) وطرق إزالة bool (const سلسلة ومسار) حذف الملف الذي تم تمرير اسمه بواسطة وسيطة. إذا نجحت ، ترجع صواب ، وإلا - خطأ.
- إعادة تسمية الأسلوب المنطقي (const char pathFrom ، const char pathTo) وإعادة تسمية bool (const String & pathFrom، const String & pathTo)؛ يقبل اسم الملف الكامل كوسيطة أولى ، والثاني اسم ملف جديد كامل وإعادة تسميته.
نعم ، نعم ، يمكنك القيام بهذه الوظيفة وتشغيلها في سلسلة رسائل منفصلة في أي رسم آخر
شكرا جزيلا على وقتك! سأكون سعيدا إذا كان هذا المقال يفيدك.
المراجع و (أو) المصادر:
- نظام ملفات SPIFFS هنا
- العمل مع نظام الملفات في الملحق ESP8266 في Arduino IDE هنا
- اردوينو ESP32 نظام الملفات رافع هنا