سلام خدمت همه شما مایکروالکامی ها. در مطلب قبلی از نکات طراحی PCB به انتخاب سلف برای مبدل باک و نکات مهم آن پرداخته شد. در این مطلب به بررسی پروتکل های سریال SPI و I2C جهت ارتباط با حافظه های Flash نوع NOR و NAND پرداخته خواهد شد. پس با من تا انتهای مطلب همراه باشید. همچنین شما میتونید سایر مطالب من رو از این لینک مطالعه و بررسی کنید.
مقدمه
پروتکل های SPI و I2C از رایج ترین بستر های ارتباطی دیجیتال هستند که جهت اتصال مدار های دیجیتالی به IC ها در کاربرد های متنوعی به کار میروند. SPI و I2C هر دو از جمله پروتکل های دیجتال هستند که استفاده از آنها ساده میباشد. در عین حال یکپارچگی سیگنال نیز در آنها برقرار است. برخلاف پروتکل های سریال دیفرانسیلی با سرعت بالا که کنترل امپدانس بسیار مهم است، این دو پروتکل اینطور نبوده و کار را آسان تر نموده است. به تعبیر دیگر، در طراحی مدار چاپی یا PCB، وابستگی های طراحی کمتر و ساده تر شده و آزادی عمل بیشتری در سایر مسائل مانند روتینیگ و امثال آن وجود دارد.
کاربرد SPI و I2C
یکی از رایج ترین کاربرد های SPI و I2C استفاده از آنها جهت ارتباط با آیسی های حافظه خارجی جهت تبادل دیتا است. حافظه های Flash از جمله رایج ترین و پر کاربرد ترین قطعات در سیستم های نهفته (Embedded System) ها میباشند. مزیت استفاده از این حافظه ها داشتن ظرفیت های قابل قبول بصورت غیر قابل فرار (non-volatile) است. هنگام انتخاب یک IC حافظه، باید مطابق با نیاز و پروژه خود آن را انتخاب نمود. علاوه بر این باید به درگاه ارتباطی و سرعت عملکرد آن نیز دقت نمود. همچنین نوع حافظه (NOR یا NAND بودن) نیز فاکتور مهمی در انتخاب آن خواهد بود.
مزایای SPI
مزیت های این پروتکل باعث شده که از آن بیشتر در کار هایی که نیاز به خواندن و نوشتن دیتا برروی کارت های SD است نیز استفاده شود. یا سایر کاربرد هایی که سرعت تبادل دیتا مهم باشد. در مقابل I2C برای سیگنال های کنترلی ساده جهت ارسال به چند دستگاه میتواند مفید واقع گردد.
- ارتباط: خط دیتای جداگانه MOSI/MISO بیانگر ارتباط دو طرفه در این پروتکل است.
- سرعت: نرخ تبادل دیتا در SPI به مراتب بیشتر است.
مزایای I2C
- سهولت در استفاده: مشهود ترین تفاوتی که بین I2C و SPI وجود دارد، نوع 2 سیمه بودن ارتباط در I2C میباشد. اما در SPI نیاز به 4 سیم جهت برقراری ارتباط است که خود به نوعی باعث اشغال بیشتر پایه های GPIO خواهد شد.
- افزایش آسان: هنگامی که کاربر نیاز به چندین Slave داشته باشد، در SPI نیاز به یک پایه به نام SS برای هر یک از آن ها خواهیم داشت. در حالی که در I2C با استفاده از یک کد آدرس 7 بیتی به راحتی میتوانیم به هر کدام دسترسی داشته باشیم. البته این کار مستلزم پیکربندی آدرس های هر ماژول است اما در عوض دیگر نیاز به سیم کشی بیشتر یا اشغال پایه های اضافه نخواهد داشت.
مقایسه پروتکل سریال SPI و I2C
SPI مخفف Serial Peripheral Interface به معنی رابط جانبی سریال است. I2C نیز مخفف عبارت Inter-Integrated Circuit میباشد. هر دو این پروتکل ها از پروتکل های دیجیتال و سریال بوده که دارای سرعت عملکرد کم و متوسط میباشند. ویژگی های مشترک این دو پروتکل را میتوان موارد زیر دانست.
- بیشتر از یک سیم برای ارسال و دریافت دیتا استفاده میشود.
- دارای clock مشخص یا همگام که برروی یک سیم دیگر قرار میگیرد.
- گیرنده ها یا دستگاه و قطعات موجود در این بستر ها دارای آدرس خود میباشند.
- اکثر میکروکنترلر ها دارای یک یا هر دو این پروتکل ها هستند.
- سطح ولتاژ سیگنال را میتوان با ولتاژ تراشه تنظیم نمود.
- هیچکدام از این دو پروتکل نیاز به کنترل و مسائل تطبیق امپدانس ندارند.
مقایسه
همانطور که مشخص است، این پروتکل ها بسیار مشابه هستند. اما در عین حال دارای تفاوت هایی نیز هستند که وجه تمایز آنها نسبت به یکدیگر میباشد. در جدول زیر به این موارد مختصرا اشاره شده است.
نوع پارامتر مورد بررسی | پروتکل I2C | پروتکل SPI |
مشخصات دیتا | SDA: Serial Data
SCL or SCK: Serial Clock |
MISO: Master input, Slave output
MOSI: Master output, Slave Input SCK or SCLK: Serial Clock CS: Chip Select |
توپولوژی |
بصورت درگاه پخش یا Broadcast |
MISO/MOSI/SCK مشترک
پایه های CS بصورت ستاره |
نرخ تبادل دیتا | حالت استاندارد: تا 100kbps
حالت Fast: تا 400kbps حالت Fast mode plus: تا 1Mbps حالت High Speed: تا 3.4Mbps |
ثابت با زمان clock، تا 60Mbps |
زمان Rise/Fall | متناسب با ظرفیت درگاه و مقاومت pull-up (استفاده از ثابت زمانی RC) | متناسب با امپدانس بار |
آدرس | آدرس در هر قطعه یا دستگاه ثابت است. | پایه های CS در برد اصلی (Main) برای تغییر چیپ (قابل تغییر با پایه های GPIO یا پایه های CS مشخص) |
نوع ارتباط | نیمه دو طرفه (Half-duplex) | تمام دو طرفه (Full-duplex) |
راه انداز سیگنال | Open-drain | Push-pull (با بافر CMOS) |
SPI دارای نرخ تبادل دیتای بیشتری بوده و میتواند لبه های سریع تری در مقایسه با I2C داشته باشد. در I2C، بدلیل استفاده از مقاومت pull-up، معمولا ظرفیت درگاه بالا بوده و در حقیقت نوع درایو آن بصورت open-drain میباشد. در I2C میتوان زمان صعود یا rise time تا صد ها نانو ثانیه داشت. در SPI برای اجزای پیشرفته که دارای بار های کوچکی اند، زمان صعود میتواند تا 1ns باشد. به دلیل سرعت سوئیچینگ خیلی سریع در SPI، خطوط ارتباطی بسیار شبیه ایجاد crosstalk میباشد.
حافظه های فلش نوع NOR و NAND
در بحث مقایسه این دو مدل حافظه جای صحبت بسیار است. اما بطور کلی دوام و کارایی حافظه NOR به دلیل استفاده از سلول های حافظه جداگانه جهت ذخیره دیتا، معمولا بیشتر از حافظه نوع NAND است. در حافظه NAND سلول های حافظه بین چندین صفحه به اشتراک گذاشته میشوند.
رابط/مبدل I2C به SPI برای دسترسی حافظه
در صورت نیاز برای تبدیل ارتباط I2C و SPI، میتوان از واسط هایی به این منظور استفاده کرد. این مبدل ها، فرمت دیتا را بین این دو پروتکل تبدیل میکنند. لذا میتوان مثلا برای ارتباط یک مدار یا قطعه ای که از I2C پشتیبانی میکند، به IC یا مداری که فقط SPI دارد از آنها استفاده نمود.
شایان ذکر است اگر کنترل کننده فقط از I2C و تراشه حافظه از SPI پشتیبانی کند، ممکن است در سرعت تبادل دچار محدودیت شویم. جهت فائق آمدن به این محدودیت I2C، بهتر است که از یک کنترل کننده با قابلیت SPI استفاده شده و سپس از مبدل برای ارتباط با قطعه دارای I2C استفاده کرد. باید توجه داشت که قسمت SPI باید کلاک کمتری داشته باشد تا از انجام عملیات در I2C اطمینان حاصل نماید.
تغییر سطح یا Level Shifting در SPI و I2C
یکی دیگر از نیاز های رایج در پروتکل سریال که از نوع open-drain و push-pull (سطح سیگنال با ولتاژ مرکزی تنظیم شده باشد) تغییر سطح ولتاژ میباشد. در نمونه های عملی ممکن است میکروکنترلر مثلا با ولتاژ 3.3v ولی تراشه حافظه با ولتاژی کمتر مثلا 1.8v کار کند. در این حالت باید سیگنال SPI یا I2C از مدار Level Shifter عبور نماید. برخی از مبدل های یاد شده خود دارای level shifter بوده به rail تغذیه متصل میشوند.
مواردی که در انتخاب این دو پروتکل نقش دارند میتواند مواردی مانند سرعت تبادل دیتا، ولتاژ مصرفی و کنترلر آن باشد. در ادامه این موارد بررسی شده است.
- سرعت: هنگام انتقال حجم انبوه ای از دیتا و محدود بودن فضا و عملکرد حافظه در کار های حساس و سریع، هر میکرو ثانیه نیز به چشم خواهد آمد و حیاتی میباشد. در صورت نیاز به انجام مکرر فرآیند خواندن و نوشتن بصورت آنی و در لحظه، از SPI میتوان استفاده کرد. اما چنانچه اینگونه نبوده و تعداد خواندن و نوشتن ها خیلی کم و گاها انجام شود، I2C پیشنهاد میشود.
- ولتاژ یا توان مصرفی: در صورتی که مدار تحت عنوان low power طراحی شود و با باتری تغذیه شود، همچنین نیاز به دسترسی به دیتا بصورت مکرر داشته باشد ممکن است نیاز به استفاده از SPI بدلیل مصرف کمتر توان در مقابل I2C باشد.
- کنترلر: در صورت استفاده از میکروکنترلر های کوچک با تعداد GPIO های کم، بهتر است از I2C استفاده شود. در واقع شاید انتخاب دیگری نداشته باشیم. مثلا ATtiny دارای I2C است اما اگر بخواهیم با حافظه ارتباط برقرار کنیم باید تراشه حافظه ای را استفاده کنیم که I2C پشتیبانی کند.
نتیجه گیری
در این مطلب به بیان نکات مهم در انتخاب نوع ارتباط با حافظه های فلش نوع NOR و NAND اشاره شد. آنچه که واضح است این میباشد که اگر نیاز به سرعت عملکرد بالا داشته باشیم SPI انتخاب مناسبی خواهد بود. همچنین حافظه های نوع NOR دوام و ماندگاری بیشتری دارد.
امیدوارم از این مطلب کمال بهره را برده باشید. در صورت داشتن هرگونه نظر یا سوال درباره این مطلب یا تجربه مشابه اون رو در انتهای همین صفحه در قسمت دیدگاه ها قرار بدید. در کوتاه ترین زمان ممکن به اون ها پاسخ خواهم داد. اگر این مطلب براتون مفید بود، اون رو به اشتراک بگذارید تا سایر دوستان هم بتوانند استفاده کنند. همینطور میتونید این مطلب را توی اینستاگرام با هشتگ microelecom# به اشتراک بگذارید و پیج مایکروالکام (microelecom@) رو هم منشن کنید.