برق و الکترونیک *دانلود پروژه رایگان
2.26K subscribers
840 photos
96 videos
357 files
638 links
بسمه تعالی
دانلود پروژه و پی سی بی رایگان
Download Telegram
مسیرهای انیمیشن (Animation Path) موجود در LVGL:

نوع انیمیشن تابع مربوطه توضیح

خطی (Linear) lv_anim_path_linear ساده‌ترین حالت، سرعت ثابت

نرم (Ease in) lv_anim_path_ease_in شروع آهسته، شتاب‌گیری تدریجی

نرم (Ease out) lv_anim_path_ease_out شروع سریع، پایان آهسته

نرم (Ease in/out) lv_anim_path_ease_in_out شروع و پایان آهسته

Overshoot lv_anim_path_overshoot جلوتر می‌ره بعد برمی‌گرده

Bounce lv_anim_path_bounce مثل توپ بالا پایین می‌پره

Step lv_anim_path_step حالت پله‌ای، بدون حرکت نرم
📘 آموزش دستورات مهم LVGL برای مدیریت ویجت‌ها

🛠 در این راهنما، با مهم‌ترین توابع LVGL برای ساخت، حذف، و مدیریت ویجت‌ها آشنا می‌شوید:

━━━━━━━━━━━━━━━
🔹 دستورات ساخت و حذف اشیاء

lv_obj_create(parent)
➤ ساخت یک ویجت جدید با والد مشخص

lv_obj_del(obj)
➤ حذف کامل یک ویجت همراه با فرزندانش

lv_obj_clean(obj)
➤ حذف همه فرزندان یک ویجت، خود ویجت باقی می‌ماند


━━━━━━━━━━━━━━━
🔹 دستورات تنظیم ظاهر و موقعیت

lv_obj_set_size(obj, w, h)
➤ تعیین اندازه ویجت

lv_obj_set_pos(obj, x, y)
➤ تعیین موقعیت ویجت

lv_obj_align(obj, align, x_ofs, y_ofs)
➤ تراز کردن ویجت نسبت به والد

lv_obj_set_style_bg_color(obj, color, part)
➤ تنظیم رنگ پس‌زمینه

lv_obj_set_style_radius(obj, radius, part)
➤ تنظیم گردی گوشه‌ها (Radius)


━━━━━━━━━━━━━━━
🔹 دستورات تغییر وضعیت و ویژگی‌ها

lv_obj_add_flag(obj, flag)
➤ اضافه کردن ویژگی (مثلاً مخفی بودن)

lv_obj_clear_flag(obj, flag)
➤ حذف ویژگی

lv_obj_add_state(obj, state)
➤ اعمال حالت خاص (مثل Checked)

lv_obj_clear_state(obj, state)
➤ حذف حالت خاص


━━━━━━━━━━━━━━━
🔹 توابع بررسی یا دریافت اطلاعات

lv_obj_get_parent(obj)
➤ دریافت والد ویجت

lv_obj_get_width(obj), lv_obj_get_height(obj)
➤ دریافت اندازه ویجت

lv_obj_has_flag(obj, flag)
➤ بررسی وجود ویژگی خاص

lv_obj_has_state(obj, state)
➤ بررسی وجود حالت خاص

lv_obj_get_child_cnt(obj)
➤ تعداد فرزندان ویجت


━━━━━━━━━━━━━━━
🔹 کنترل رویدادها

lv_obj_add_event_cb(obj, cb, event, user_data)
➤ افزودن تابع واکنش به رویداد

lv_event_get_target(e)
➤ دریافت ویجتی که رویداد روی آن اتفاق افتاده

lv_event_get_code(e)
➤ نوع رویداد (مثل LV_EVENT_CLICKED)
📘 آموزش LVGL: کنترل حرفه‌ای TextArea

در این پست لیستی از دستورات کاربردی برای کنترل TextArea در کتابخانه‌ی LVGL رو می‌تونید ببینید. با این دستورات می‌تونید ورودی‌های کاربر رو به‌شکل حرفه‌ای کنترل و زیبا کنید. 👇

🔹 فرمان‌های مفید برای `lv_textarea`:

lv_textarea_set_text(ta, "متن")  
➤ تعیین متن اولیه داخل TextArea

lv_textarea_set_placeholder_text(ta, "لطفاً وارد کنید...")
➤ نمایش متن راهنما به صورت کم‌رنگ

lv_textarea_set_one_line(ta, true)
➤ تبدیل به حالت تک‌خطی

lv_textarea_set_cursor_pos(ta, n)
➤ تعیین موقعیت مکان‌نما

lv_textarea_add_text(ta, "abc")
➤ اضافه کردن متن در موقعیت فعلی مکان‌نما

lv_textarea_del_char(ta)
➤ حذف یک کاراکتر قبل از مکان‌نما

lv_textarea_set_max_length(ta, n)
➤ تعیین حداکثر طول متن مجاز

lv_textarea_set_accepted_chars(ta, "0123456789")
➤ محدودسازی ورودی فقط به کاراکترهای خاص

lv_textarea_set_password_mode(ta, true)
➤ فعال‌سازی حالت رمز (نمایش کاراکترها به صورت ●)

lv_textarea_set_password_show_time(ta, 1500)
➤ نمایش موقت آخرین کاراکتر برای ۱.۵ ثانیه

lv_textarea_set_align(ta, LV_TEXT_ALIGN_CENTER)
➤ ترازبندی متن (راست، چپ، وسط)

lv_textarea_set_text_selection(ta, true)
➤ فعال کردن قابلیت انتخاب (highlight) متن

lv_textarea_set_scrollbar_mode(ta, LV_SCROLLBAR_MODE_AUTO)
➤ تنظیم نحوه‌ی نمایش scrollbar (مثلاً فقط وقتی نیاز هست)


📌 این توابع کمک می‌کنن TextAreaها در برنامه‌هاتون حرفه‌ای، زیبا و دقیق کار کنن. ترکیب lv_textarea با lv_keyboard باعث ساخت فرم‌های حرفه‌ای مثل فرم ورود، رمز، شماره‌گیری و ... می‌شه.
🟡 پروردگار آنان را از هر فتنه تیره و تاری نجات می‌دهد

🔴 قَالَ آيَةُ اَللهِ اَلْعُظْمَى اَلْإِمَامُ اَلرَّحْمَة سَيِّدُ اَلْمُرْسَلِين رَسُولُ اَللهِ صَلَّى اَلله عَلَيْهِ وَ آلِهِ وَ سَلَّمَ : لَاَحَدُهُمْ اَشَدُّ بَقِیَّةً عَلَی دِینِهِ مِنْ خَرْطِ الْقَتَادِ فِی اللَّیْلَةِ الظَّلْمَاءِ اَوْ کَالْقَابِضِ عَلَی جَمْرِ الْغَضَا اُولَئِکَ مَصَابِیحُ الدُّجَی یُنْجِیهِمُ اللَّهُ مِنْ کُلِّ فِتْنَةٍ غَبْرَاءَ مُظْلِمَة

🟠 حضرت آیت الله العظمی امامِ رحمت رسول الله صلی الله علیه و آله و سلم می فرمایند : ثابت ماندن یکی از آنها [مردم آخر الزمان] بر دین خود، از صاف کردن درخت خاردار (قتاد) با دست در شب ظلمانی، دشوارتر است. و یا مانند کسی است که پاره‌ای از آتش چوب درخت «غضا» را در دست نگاه دارد. آنها چراغ‌های شب تار می‌باشند، پروردگار آنان را از هر فتنه تیره و تاری نجات می‌دهد.

📚بحارالأنوار ج۵۲ ص۱۲۴
## 📘 آموزش کامل و کاربردی تابع lv_obj_align() در LVGL

### 📌 تعریف:

تابع lv_obj_align() در کتابخانه LVGL برای تراز (Alignment) یک شیء گرافیکی (آبجکت) نسبت به والدش استفاده می‌شه.

---

### سینتکس:

lv_obj_align(obj, align_type, x_offset, y_offset);


| پارامتر | توضیح |
| ------------ | ------------------------------------------ |
| obj | شیء موردنظر (مثلاً کانتینر، دکمه، لیبل...) |
| align_type | نوع تراز دلخواه (مثل وسط، راست، بالا...) |
| x_offset | جابه‌جایی افقی نسبت به محل تراز |
| y_offset | جابه‌جایی عمودی نسبت به محل تراز |

---

### 🎯 مثال ساده:

lv_obj_align(my_label, LV_ALIGN_CENTER, 0, 0);


→ لیبل دقیقاً وسط والد خودش قرار می‌گیره.

---

## 📐 لیست کامل LV_ALIGN_... ها با توضیح تصویری:

| نام | توضیح | شکل قرارگیری |
| --------------------------- | -------------------- | --------------------------- |
| LV_ALIGN_CENTER | مرکز کامل | 🔲 وسط والد |
| LV_ALIGN_TOP_LEFT | گوشه بالا چپ | ⬉ |
| LV_ALIGN_TOP_MID | بالا وسط | ⬆️ |
| LV_ALIGN_TOP_RIGHT | گوشه بالا راست | ⬈ |
| LV_ALIGN_BOTTOM_LEFT | پایین چپ | ⬋ |
| LV_ALIGN_BOTTOM_MID | پایین وسط | ⬇️ |
| LV_ALIGN_BOTTOM_RIGHT | پایین راست | ⬊ |
| LV_ALIGN_LEFT_MID | وسط سمت چپ | ⬅️ |
| LV_ALIGN_RIGHT_MID | وسط سمت راست | ➡️ |
| LV_ALIGN_OUT_TOP_LEFT | بیرون بالا چپ | بالاتر از گوشه بالا چپ |
| LV_ALIGN_OUT_TOP_MID | بیرون بالا وسط | بالاتر از وسط بالا |
| LV_ALIGN_OUT_TOP_RIGHT | بیرون بالا راست | بالاتر از گوشه بالا راست |
| LV_ALIGN_OUT_BOTTOM_LEFT | بیرون پایین چپ | پایین‌تر از گوشه پایین چپ |
| LV_ALIGN_OUT_BOTTOM_MID | بیرون پایین وسط | پایین‌تر از وسط پایین |
| LV_ALIGN_OUT_BOTTOM_RIGHT | بیرون پایین راست | پایین‌تر از گوشه پایین راست |
| LV_ALIGN_OUT_LEFT_TOP | بیرون سمت چپ بالا | سمت چپ و بالا |
| LV_ALIGN_OUT_LEFT_MID | بیرون سمت چپ وسط | سمت چپ کامل |
| LV_ALIGN_OUT_LEFT_BOTTOM | بیرون سمت چپ پایین | سمت چپ و پایین |
| LV_ALIGN_OUT_RIGHT_TOP | بیرون سمت راست بالا | سمت راست و بالا |
| LV_ALIGN_OUT_RIGHT_MID | بیرون سمت راست وسط | سمت راست کامل |
| LV_ALIGN_OUT_RIGHT_BOTTOM | بیرون سمت راست پایین | سمت راست و پایین |

---

## 🔧 نکته مهم درباره Offset‌ها

مقدار x_offset و y_offset تعیین می‌کنن که چقدر آبجکت از محل تراز اصلی جابه‌جا بشه.

مثلاً:

lv_obj_align(obj, LV_ALIGN_TOP_RIGHT, -10, 5);


یعنی:

* آبجکت رو به گوشه بالا-راست والد بچسبون
* بعدش ۱۰ پیکسل به چپ (منفی) و ۵ پیکسل به پایین (مثبت) جابه‌جا کن.

---

## 🎯 مقایسه با lv_obj_set_pos()

| تابع | ویژگی |
| ------------------ | ----------------------------------------------------- |
| lv_obj_align() | تراز خودکار بر اساس والد، راحت‌تر ولی کمتر کنترل‌پذیر |
| lv_obj_set_pos() | موقعیت دقیق دستی، کنترل کامل روی X/Y |

---

## 📝 نتیجه‌گیری:

* lv_obj_align() ابزاری عالی برای جای‌گذاری سریع و مرتب آبجکت‌هاست
* برای UI منظم و responsive عالیه
* اگه نیاز به دقت پیکسلی داری، از lv_obj_set_pos() استفاده کن

---

## 📢 مناسب برای:

مبتدی‌ها برای شروع راحت
طراحان UI برای ایجاد رابط ریسپانسیو
پروژه‌هایی با زبان RTL مثل فارسی
## تحلیل ساختار جدید تولید کد در SquareLine Studio 1.5.2

### 1. جداسازی واضح صفحات (Screens)

هر اسکرین فایل مخصوص خودش را دارد:

* .c برای پیاده‌سازی اجزا
* .h برای اعلام توابع و اشیاء

این باعث می‌شه کد:

* ماژولارتر (Modular)
* قابل نگهداری‌تر
* و مناسب‌تر برای مدیریت رم و حافظه باشه

### 2. توابع مدیریت حافظه برای هر صفحه

در هر فایل .c توابع زیر دیده می‌شن:

* screen_init() → ساخت کامل اجزا
* screen_destroy() → حذف تمام ویجت‌ها و آزادسازی حافظه با lv_obj_del()

### 3. متغیرهای global فقط برای صفحه مربوطه

مثلاً در ui_Screen1.h فقط اجزای مربوط به همان صفحه تعریف شده‌اند:

extern lv_obj_t * ui_Screen1;
extern lv_obj_t * ui_Button1;


و نه هیچ عنصر از صفحات دیگر.

### 4. ساختار رویدادها (Events) هم منظم شده

برای هر رویداد، تابع خاصی در فایل صفحه تعریف می‌شه:

extern void ui_event_Button1(lv_event_t * e);


که یعنی دیگر نیازی به یک فایل ui_events.c برای همه‌ی رویدادها نیست و همین باعث تفکیک بهتر پروژه شده.

### 5. ورود و خروج صفحه بهینه شده

در فایل ui.c:

_ui_screen_change(&ui_Screen2, ..., &ui_Screen2_screen_init);


با تغییر صفحه:

* صفحه جدید ساخته می‌شه (init)
* صفحه قبلی حذف می‌شه (destroy)

در نتیجه در لحظه فقط یک صفحه در حافظه هست! 💡

---

## نتیجه‌گیری کلی

🔹 SquareLine Studio 1.5.2 واقعاً بهینه‌تر و حرفه‌ای‌تر شده
برای پروژه‌های روی بردهای با RAM پایین (مثل V3s یا STM32)، این ساختار باعث می‌شه رم هدر نره.

🔹 این نسخه به‌شدت برای پروژه‌هایی با چند صفحه توصیه می‌شه، چون:

* ساختار تمیز و جداگانه برای هر صفحه داره
* حافظه به‌درستی آزاد می‌شه
* کد راحت‌تر قابل توسعه و دیباگ هست
🔴 عَنِ الْمُفَضَّلِ قَالَ: قَالَ أَبُو عَبْدِ اللهِ علیه السلام:‏ يَا مُفَضَّلُ، إِيَّاكَ وَ الذُّنُوبَ، وَ حَذِّرْهَا شِيعَتَنَا. فَوَ اللهِ مَا هِيَ إِلَى أَحَدٍ أَسْرَعَ مِنْهَا إِلَيْكُمْ، إِنَّ أَحَدَكُمْ لَتُصِيبُهُ الْمَعَرَّةُ مِنَ السُّلْطَانِ، وَ مَا ذَاكَ إِلَّا بِذُنُوبِهِ، وَ إِنَّهُ لَيُصِيبُهُ السُّقْمُ، وَ مَا ذَاكَ إِلَّا بِذُنُوبِهِ، وَ إِنَّهُ لَيُحْبَسُ عَنْهُ الرِّزْقُ، وَ مَا هُوَ إِلَّا بِذُنُوبِهِ، وَ إِنَّهُ لَيُشَدَّدُ عَلَيْهِ عِنْدَ الْمَوْتِ، وَ مَا هُوَ إِلَّا بِذُنُوبِهِ.

🟠 مفضّل بن عمر از امام صادق علیه السّلام نقل می کند که فرمودند : اى مفضّل! تو را از تمام گناهان برحذر می دارم، و تو نیز شيعيان ما را از آن بر حذر بدار. به خدا سوگند! اثر هیچ چیزی سریع تر از اثر گناه به شما نمی رسد. اگر آزار و اذیّتی از سلطان به يكى از شما رسيد، قطعاً به خاطر گناهی است كه انجام داده است. اگر یکی از شما بيمار شد، حتماً به جهت گناهى است كه انجام داده است. اگر رزق و روزى از کسی حبس شد، صرفاً به خاطر گناهى است كه از او صادر گرديده است. اگر هنگام مرگ، کسی به سختی جان داد، فقط به خاطر گناهی است که مرتکب شده است.

📚علل الشرائع ج1، ص297
🔴 قالَ لَهُ الرَّشيدُ حينَ رَآهُ جالساً عِنْدَ الْكَعْبَة ، أنتَ الَّذی تُبايِعُكَ النّاسُ سِرًّا؟ فَقالَ ؛ أنا إمامُ القلوبِ و أنتَ إمامُ الجُسُوم .

🟠 روزی هارون الرشيد لعنة الله علیه وقتی امام موسی کاظم سلام الله علیه را ديد که در کنار کعبه نشسته اند ، به او گفت تو هستی که مردم با تو در پنهان بيعت می‌کنند؟ حضرت در پاسخ فرمودند: من امام قلب ها هستم و تو امام جسم ها .

📚الصواعق المحرقة ج۲ ص۵۹۰
📊 تعداد سیم‌های LVDS موردنیاز بر اساس رزولوشن و عمق رنگ
برای اتصال LCDهای LVDS به سیستم‌های پردازشی، تعداد جفت سیم‌های LVDS (Data و Clock) به رزولوشن و عمق رنگ پنل بستگی داره. در ادامه جدول استاندارد اون رو می‌بینید:
📌 رزولوشن و تعداد سیم‌های LVDS:
📌 800×480
🌈 عمق رنگ: 16 یا 18 بیت
🔌 Single Channel
🔸 3 جفت سیم دیتا + 1 جفت کلاک = 8 سیم
📌 1024×600
🌈 عمق رنگ: 18 بیت
🔌 Single Channel
🔸 3 جفت سیم دیتا + 1 جفت کلاک = 8 سیم
📌 1280×800
🌈 عمق رنگ: 16 بیت
🔌 Single Channel
🔸 3 جفت سیم دیتا + 1 جفت کلاک = 8 سیم
📌 1280×800
🌈 عمق رنگ: 24 بیت
🔌 Single Channel
🔸 4 جفت سیم دیتا + 1 جفت کلاک = 10 سیم
📌 1366×768
🌈 عمق رنگ: 24 بیت
🔌 Single Channel
🔸 4 جفت سیم دیتا + 1 جفت کلاک = 10 سیم
📌 1600×900
🌈 عمق رنگ: 24 بیت
🔌 Single Channel
🔸 5 جفت سیم دیتا + 1 جفت کلاک = 12 سیم
📌 1920×1080 (Full HD)
🌈 عمق رنگ: 24 بیت
🔌 Dual Channel
🔸 8 جفت سیم دیتا + 2 جفت کلاک = 20 سیم
📌 1920×1200
🌈 عمق رنگ: 24 بیت
🔌 Dual Channel
🔸 8 جفت سیم دیتا + 2 جفت کلاک = 20 سیم
📌 2560×1440 (QHD)
🌈 عمق رنگ: 24 بیت
🔌 Dual Channel
🔸 8 جفت سیم دیتا + 2 جفت کلاک = 20 سیم
📌 3840×2160 (4K)
🌈 عمق رنگ: 24 یا 30 بیت
🔌 Quad Channel LVDS
🔸 16 جفت سیم دیتا + 4 جفت کلاک = 40 سیم
📌 نکته:
به این سیم‌ها باید چند سیم تغذیه (۳.۳V / ۵V)، Ground و سیگنال‌های کنترلی مثل BL_ON و PWM_DIM رو هم اضافه کنید.
🔴 قالَ: کَانَ رَجُلٌ مِنْ أَبَانِ بْنِ دَارِمٍ یُقَالُ لَهُ زُرْعَةُ شَهِدَ قَتْلَ الْحُسَیْنِ علیه السلام فَرَمَی الْحُسَیْنَ بِسَهْمٍ فَأَصَابَ حَنَکَهُ فَجَعَلَ یَتَلَقَّی الدَّمَ ثُمَّ یَقُولُ هَکَذَا إِلَی السَّمَاءِ فَیَرْمِی بِهِ وَ ذَلِکَ أَنَّ الْحُسَیْنَ علیه السلام دَعَا بِمَاءٍ لِیَشْرَبَ فَلَمَّا رَمَاهُ حَالَ بَیْنَهُ وَ بَیْنَ الْمَاءِ فَقَالَ اللَّهُمَّ ظَمِّئْهُ اللَّهُمَّ ظَمِّئْهُ قَالَ فَحَدَّثَنِی مَنْ شَهِدَهُ وَ هُوَ یَمُوتُ وَ هُوَ یَصِیحُ مِنَ الْحَرِّ فِی بَطْنِهِ وَ الْبَرْدِ فِی ظَهْرِهِ وَ بَیْنَ یَدَیْهِ الْمَرَاوِحُ وَ الثَّلْجُ وَ خَلْفَهُ الْکَانُونُ وَ هُوَ یَقُولُ اسْقُونِی أَهْلَکَنِی الْعَطَشُ فَیُؤْتَی بِعُسٍّ عَظِیمٍ فِیهِ السَّوِیقُ وَ الْمَاءُ وَ اللَّبَنُ لَوْ شَرِبَهُ خَمْسَةٌ لَکَفَاهُمْ قَالَ فَیَشْرَبُهُ ثُمَّ یَعُودُ فَیَقُولُ اسْقُونِی أَهْلَکَنِی الْعَطَشُ قَالَ فَانْقَدَّ بَطْنُهُ کَانْقِدَادِ الْبَعِیرِ. وَ ذَکَرَ أَعْثَمُ الْکُوفِیُّ هَذَا الْحَدِیثَ مُخْتَصَراً قَالَ: اسْمُ الرَّامِی لَعَنَهُ اللَّهُ عَبْدُ الرَّحْمَنِ الْأَزْدِیُّ فَقَالَ لَهُ الْحُسَیْنُ علیه السلام اللَّهُمَّ اقْتُلْهُ عَطَشاً وَ لَا تَغْفِرْ لَهُ أَبَداً قَالَ الْقَاسِمُ بْنُ أَصْبَغَ لَقَدْ رَأَیْتُنِی عِنْدَ ذَلِکَ الرَّجُلِ وَ هُوَ یَصِیحُ وَ الْمَاءُ یُبَرَّدُ لَهُ فِیهِ السُّکَّرُ وَ الْأَعْسَاسُ فِیهَا اللَّبَنُ وَ هُوَ یَقُولُ وَیْلَکُمْ اسْقُونِی فَقَدْ قَتَلَنِیَ الْعَطَشُ فَیُعْطَی الْقُلَّةَ أَوِ الْعُسَّ فَإِذَا نَزَعَهُ مِنْ فِیهِ یَصِیحُ حَتَّی انْقَدَّ بَطْنُهُ وَ مَاتَ شَرَّ مِیتَةٍ لَعَنَهُ اللَّهُ.

⚫️محمد کوفی می‌گوید: مردی از قبیله ابان بن دارم که به او زرعه گفته می‌شد، در قتل حسین علیه السّلام شرکت کرده بود و تیری به سمت امام انداخته بود که به گلوی حضرت اصابت کرده بود! این مرد خون بالا می‌آورد و سپس می‌گفت: این چنین به آسمان می‌رود، پس او را با آن رمی می‌کنند! و علت آن بود که امام حسین علیه السّلام آب طلب کرد تا بنوشد، وقتی به حضرت تیر زد، بین امام و آب جدایی انداخت. پس حضرت عرض کرد: خدایا او را تشنه فرما! خدایا او را تشنه فرما! راوی می‌گوید: کسی که این مرد را در حال مرگ دیده بود، برای من حدیث کرد که از حرارت در شکمش فریاد می‌زد و در مقابلش بادبزن و یخ بود و پشت سرش حرارت بود و می‌گفت: آبم دهید که عطش مرا کشت! برایش قدح عظیمی که آب گوشت و آب و شیر بود می‌آوردند که اگر پنج نفر آن را می‌خوردند برایشان کافی بود! آن مرد این طعام را می‌خورد و سپس می‌گفت: آبم دهید که عطش مرا کشت. راوی می‌گوید: شکمش مثل شکافتن شکم شتر شکافته شد. اعثم کوفی این حدیث را به اختصار نقل نموده و گفته: اسم پرتاب کننده تیر عبدالرحمان ازدی لعنه الله بود. پس امام حسین علیه السّلام در حق او چنین دعا کرد: خدایا او را به عطش بکش و ابدا او را نیامرز! قاسم بن اصبغ می‌گوید: من خویش را نزد آن مرد دیدم که فریاد می‌زد و آب برایش خنک می‌کردند و در آن شکر و ظرفی که شیر داشت می‌آوردند، اما او می‌گفت: وای بر شما! مرا آب دهید که عطش مرا کشت! پس به او کوزه و قدح داده می‌شد. وقتی این ظروف را از دهانش جدا می‌کرد، فریاد می‌زد تا شکمش می‌شکافت و به بدترین مردن جان داد! لعنت خدا بر او باد!

📚مناقب ابن شهر آشوب ۴: ۵۷
امروز می‌خوام براتون خیلی ساده و شفاف تفاوت eMMC و SD Card رو از نظر اتصال به میکروکنترلر و سرعت و کاربرد توضیح بدم.
📦 eMMC چیه؟
eMMC یک چیپ حافظه فلش داخلیه که مستقیم روی برد لحیم می‌شه و از طریق رابط SDMMC (یا eMMC interface) به میکروکنترلر یا پردازنده وصل می‌شه.
✔️ کنترلر داخلی داره
✔️ باس دیتا ۸ بیتی داره
✔️ سرعت بالا و تاخیر پایین
✔️ مخصوص ذخیره سیستم عامل و دیتاهای حیاتی
📦 SD Card چیه؟
SD Card حافظه‌ایه که همه می‌شناسیم.
✔️ از طریق اسلات SD Card و باس SDMMC به میکرو وصل می‌شه
✔️ معمولاً ۱ یا ۴ خط دیتا داره
✔️ سرعت پایین‌تر
✔️ قابل جابجایی
📌 نحوه اتصال به میکروکنترلر:
eMMC → به پایه‌های
CMD
CLK
DAT0-DAT7
VCC
VCCQ
GND
RST_N
SD Card → به پایه‌های
CMD
CLK
DAT0-DAT3
VCC
GND
در هر دو، از Peripheral SDMMC یا SDIO میکرو استفاده می‌شه (مثل STM32H743)
📊 مقایسه سرعت:
سرعت خواندن eMMC: حدود 200MB/s
سرعت نوشتن eMMC: حدود 100MB/s
سرعت خواندن SD Card (UHS-I): حدود 100MB/s
سرعت نوشتن SD Card: حدود 30MB/s
تاخیر در eMMC کمتره چون روی بورد لحیم شده و باس اختصاصی داره.
📌 پایداری و طول عمر:
eMMC: بسیار بالا (مخصوص سیستم‌های صنعتی و سیستم‌عامل)
SD Card: متوسط (مناسب دیتاهای غیرحیاتی)
📌 کجا از کدوم استفاده کنیم؟
eMMC:
برای بوت سیستم‌عامل
برای ذخیره دیتای حیاتی
برای دیتالاگرهای صنعتی
SD Card:
برای ذخیره عکس و فیلم
برای ذخیره دیتاهای موقت
برای دستگاه‌های ساده و ارزان
📣 نکته مهم
eMMC توی میکروکنترلرهایی که SDMMC دارند خیلی راحت راه‌اندازی می‌شه.
همون دستوراتی که برای SD Card می‌فرستی (مثل CMD0 و CMD1) می‌تونی به eMMC هم بفرستی.
فقط باید پایه‌های DAT0-DAT7 رو هم آماده کنی.
در SD Card معمولاً فقط تا ۴ خط دیتا (DAT0-DAT3) استفاده می‌شه.
نتیجه
اگه سرعت و پایداری برات مهمه و سیستم‌عامل یا دیتای حیاتی داری → eMMC
اگه ارزونی و قابلیت جابجایی می‌خوای → SD Card