دوره آموزشی AVR. کار با ماژول SPI خواندن و نوشتن داده ها. فصل 2. نحوه کار با SPI - ورودی تئوری Spi

رابط های انتقال

بسیاری از رابط های انتقال داده برای انتقال داده ها از یک دستگاه به دستگاه دیگر یا از یک تراشه به تراشه دیگر توسعه یافته اند. هر رابط دارای جنبه های مثبت و منفی است، بنابراین باید بدانید چه رابط هایی وجود دارد، مزایا و معایب آن ها، و از رابط مناسب برای انتقال داده ها در یک موقعیت خاص استفاده کنید.

رابط ها با انتقال داده های ناهمزمان و همزمان ارائه می شوند. با انتقال داده همزمان، یک سیگنال ساعت همزمان با داده ها مخابره می شود و به گیرنده و فرستنده اجازه می دهد همگام شوند. نمونه ای از این پروتکل ها رابط SPI است.

در انتقال داده های ناهمزمان سیگنال ساعت وجود ندارد. در چنین خطوطی خطر عدم تطابق بین گیرنده و فرستنده وجود دارد که در نتیجه اطلاعات بیشتر به درستی دریافت نمی شود. برای جلوگیری از این امر، رابط های ناهمزمان همگام سازی دوره ای را در امتداد خطوط داده انجام می دهند. مزیت چنین رابط هایی تعداد کمتر هادی های مورد نیاز برای انتقال است.

بیایید نگاهی دقیق‌تر به چند تا از محبوب‌ترین رابط‌ها بیندازیم.

رابط USART.

رابط USART یک فرستنده و گیرنده همزمان-ناهمزمان سریال جهانی است. داده ها در فواصل منظم به USART منتقل می شوند. این بازه زمانی با سرعت مشخص شده USART تعیین می شود و به صورت baud مشخص می شود (برای کاراکترهایی که فقط می توانند مقادیری برابر با صفر یا یک بگیرند، baud معادل بیت در ثانیه است). محدوده ای از سرعت استاندارد به طور کلی پذیرفته شده است: 300، 600، 1200، 2400، 4800، 9600، 19200، 38400، 57600، 115200، 230400، 460800، 921.

علاوه بر بیت های داده، USART به طور خودکار علائم همگام سازی را در جریان قرار می دهد، به اصطلاح بیت های شروع و توقف. پس از دریافت، این بیت های اضافی حذف می شوند. به طور معمول، بیت های شروع و پایان یک بایت اطلاعات (8 بیت) را از هم جدا می کنند، اما پیاده سازی های USART وجود دارند که اجازه می دهند 5، 6، 7، 8 یا 9 بیت منتقل شوند. بیت هایی که توسط سیگنال های شروع و توقف از هم جدا می شوند، حداقل ارسال هستند. USART به شما امکان می دهد دو بیت توقف را در حین انتقال وارد کنید تا احتمال عدم هماهنگی گیرنده و فرستنده در ترافیک سنگین کاهش یابد. گیرنده بیت دوم را نادیده می گیرد و آن را به عنوان یک مکث کوتاه در خط تلقی می کند.

قرارداد این است که حالت غیرفعال (در صورت عدم وجود داده) ورودی و خروجی USART یک "1" منطقی است. بیت شروع همیشه یک "0" منطقی است، بنابراین گیرنده USART منتظر انتقال از "1" به "0" است و از آن فاصله زمانی نصف مدت بیت (وسط انتقال بیت شروع) را محاسبه می کند. . اگر در این لحظه ورودی هنوز "0" باشد، فرآیند دریافت حداقل بسته شروع می شود. برای انجام این کار، گیرنده 9 بیت مدت زمان را پشت سر هم می شمارد (برای داده های 8 بیتی) و وضعیت ورودی را در هر لحظه ثبت می کند. 8 مقدار اول داده های دریافتی هستند، آخرین مقدار یک مقدار تست (بیت توقف) است. مقدار بیت توقف همیشه "1" است، اگر مقدار واقعی دریافت شده متفاوت باشد، USART یک خطا را ثبت می کند.

برای تشکیل فواصل زمانی، USARTهای فرستنده و دریافت کننده دارای منبع زمان دقیق (ساعت) هستند. دقت این منبع باید به حدی باشد که مجموع خطاهای (گیرنده و فرستنده) در تنظیم فاصله زمانی از ابتدای شروع پالس تا وسط پالس توقف از نصف (یا بهتر است بگوییم حداقل یک) بیشتر نباشد. یک چهارم) بازه بیت. برای یک پیام 8 بیتی 0.5/9.5 = 5٪ (در واقعیت بیش از 3٪). از آنجایی که این مجموع خطاهای گیرنده و فرستنده به اضافه اعوجاج سیگنال احتمالی در خط است، تحمل توصیه شده برای دقت کلاک USART بیش از 1.5٪ نیست.

از آنجایی که بیت های ساعت بخشی از جریان بیت را اشغال می کنند، خروجی UART حاصل با سرعت اتصال برابر نیست. به عنوان مثال، برای ارسال های 8 بیتی با فرمت 8-N-1، بیت های ساعت 20 درصد از جریان را اشغال می کنند، که برای سرعت فیزیکی 115200 باود نرخ بیت داده 92160 bps یا 11520 بایت بر ثانیه را می دهد.

برابری

پروتکل USART این قابلیت را دارد که به طور خودکار یکپارچگی داده ها را با استفاده از روش برابری بیت کنترل کند. هنگامی که این ویژگی فعال است، آخرین بیت داده ("بیت برابری") همیشه 1 یا 0 است، به طوری که تعداد آنها در یک بایت همیشه زوج است.

کنترل جریان

در قدیم، دستگاه‌های USART می‌توانستند آنقدر کند باشند که نمی‌توانستند با جریان داده‌های دریافتی هماهنگی داشته باشند. برای حل این مشکل، ماژول های USART با خروجی ها و ورودی های کنترل جریان مجزا ارائه شدند. هنگامی که بافر ورودی پر شد، منطق USART دریافت کننده سطح بازدارندگی را در خروجی مربوطه تنظیم کرد و USART ارسال کننده انتقال را به حالت تعلیق درآورد. بعداً کنترل جریان به پروتکل های ارتباطی اختصاص یافت و نیاز به خطوط کنترل جریان جداگانه به تدریج از بین رفت.

اجرای فیزیکی

USART یک پروتکل تبادل است، یعنی. روش تشکیل بیت، پارامترهای انتقال بایت، سرعت انتقال و غیره را تعیین می کند.

اما اجرای فیزیکی USART ممکن است متفاوت باشد. به عنوان مثال، برای انتقال داده ها در یک برد، سیگنال ها در سطوح 5+ و 0 ولت ارسال می شوند. برای انتقال داده ها در فواصل طولانی و بین دستگاه ها از سایر سطوح و استانداردهای ولتاژ فیزیکی مانند: حلقه جریان (4-20 میلی آمپر)، RS-232 (پورت COM)، RS-485 و موارد مشابه استفاده می شود.

برای تبدیل سطوح "کنترل کننده" 0-5 ولت به سطوح "استاندارد"، تعداد زیادی ریزمدار تخصصی وجود دارد، به عنوان مثال ADM202 برای RS-232.

رابط سریال SPI

نام SPI مخفف "Serial Peripheral Bus" است که هدف آن را نشان می دهد - گذرگاهی برای اتصال دستگاه های خارجی. اتوبوس SPI بر اساس اصل ارباب-برد سازماندهی شده است. باس اصلی معمولا یک میکروکنترلر است، اما می تواند منطقی قابل برنامه ریزی، یک کنترل کننده DSP یا یک ASIC نیز باشد. دستگاه های متصل به Master Slave هستند. نقش آنها توسط انواع مختلفی از ریز مدارها، از جمله. دستگاه های ذخیره سازی (EEPROM، حافظه فلش، SRAM)، ساعت واقعی (RTC)، ADC/DAC، پتانسیومترهای دیجیتال، کنترلرهای تخصصی و غیره.

بلوک اصلی رابط SPI یک شیفت رجیستر معمولی است که همزمان سازی و سیگنال های ورودی/خروجی بیت استریم سیگنال های رابط را تشکیل می دهند. بنابراین، صحیح تر است که پروتکل SPI را نه یک پروتکل انتقال داده، بلکه یک پروتکل تبادل داده بین دو ثبات ثبت نام کنیم، که هر کدام به طور همزمان هم عملکرد یک گیرنده و هم یک فرستنده را انجام می دهند. یک پیش نیاز برای انتقال داده در گذرگاه SPI، تولید سیگنال همگام سازی باس است. فقط رهبر حق تولید این سیگنال را دارد و کار برده کاملاً به آن بستگی دارد.

ارتباط.

سه نوع اتصال به گذرگاه SPI وجود دارد که هر کدام شامل چهار سیگنال است. هدف سیگنال های SPI در جدول 7.1 توضیح داده شده است.

ساده ترین اتصال، که فقط شامل دو ریز مدار است، در شکل 7.2 نشان داده شده است. در اینجا، bus master داده ها را در امتداد خط MOSI به طور همزمان با سیگنال SCLK تولید شده توسط آن ارسال می کند، و Slave بیت های داده ارسال شده را در لبه های خاصی از سیگنال همگام سازی دریافتی می گیرد. در همان زمان، Slave بسته داده خود را ارسال می کند. مدار ارائه شده را می توان با حذف خط MISO ساده کرد اگر آی سی برده استفاده شده برای ارسال داده پاسخ را فراهم نکند یا نیازی به آن نباشد. انتقال اطلاعات یک طرفه را می توان در تراشه هایی مانند DAC، پتانسیومتر دیجیتال، تقویت کننده های قابل برنامه ریزی و درایورها یافت. بنابراین، گزینه در نظر گرفته شده برای اتصال یک آی سی برده به 3 یا 4 خط ارتباطی نیاز دارد.

برای اینکه آی سی slave بتواند داده ها را دریافت و ارسال کند، علاوه بر داشتن سیگنال ساعت، خط SS نیز باید به سمت پایین هدایت شود. در غیر این صورت آی سی Slave غیر فعال خواهد بود. هنگامی که فقط از یک آی سی خارجی استفاده می شود، ممکن است وسوسه انگیز باشد که خط SS را با پایین آوردن ورودی انتخابی آی سی برده به شدت کم کنیم. این راه حل بسیار نامطلوب است و می تواند منجر به خرابی و یا حتی عدم امکان انتقال داده شود، زیرا ورودی انتخاب تراشه برای بازنشانی آی سی به حالت اولیه کار می کند و گاهی اوقات خروجی اولین بیت داده را آغاز می کند.

در صورت نیاز به اتصال چندین ریز مدار به باس SPI، یا از یک اتصال مستقل (موازی) استفاده می شود (شکل 7.3) یا یک اتصال آبشاری (سریال) (شکل 7.4). اتصال مستقل رایج تر است، زیرا هنگام استفاده از هر تراشه سازگار با SPI به دست می آید. در اینجا، تمام سیگنال ها، به جز انتخاب ریز مدارها، به صورت موازی به هم متصل می شوند و باس اصلی، با انتقال یک یا آن سیگنال SS به حالت پایین، مشخص می کند که با کدام آی سی برده داده ها را مبادله کند. عیب اصلی این اتصال نیاز به خطوط اضافی برای آدرس دهی تراشه های برده است (تعداد کل خطوط ارتباطی 3+n است که n تعداد تراشه های برده است).

اگر پایه های میکروکنترلر به اندازه کافی وجود ندارد، می توانید از تراشه دممولتی پلکسر استفاده کنید. دم مولتی پلکسر بسته به کد روی پایه های کنترل، یک سیگنال ورودی را به یکی از سیگنال های خروجی متصل می کند. شکل 7.4 نمودار اتصال دی مولتی پلکسر را نشان می دهد. سیگنال SS به ورودی آن ارسال می شود که در صورت نیاز به انتخاب یکی از ریز مدارها، مقداری برابر با 0 می گیرد. تعداد ریز مدار مورد نیاز در کد باینری به پایه های Am-A0 ارائه می شود. این به شما امکان می دهد تعداد پایه های استفاده شده در میکروکنترلر را به m=log 2 n کاهش دهید. جایی که n تعداد تراشه های برده است. آن ها برای اتصال 128 دستگاه، 8 پین میکروکنترلر مورد نیاز است. یکی برای تنظیم سیگنال فعال و 7 برای تنظیم تعداد تراشه که باید روشن شود. لازم به ذکر است که روی پایه های غیر متصل دم مولتی پلکسر باید یک منطقی وجود داشته باشد. در غیر این صورت از یک اینورتر سیگنال استفاده می شود که یک صفر منطقی را به یک منطقی تبدیل می کند.

سوئیچینگ آبشاری عاری از این اشکال است، زیرا در اینجا چندین تراشه یک شیفت رجیستر بزرگ را تشکیل می دهند. برای انجام این کار، خروجی داده ارسالی یک آی سی به ورودی دریافت داده دیگری متصل می شود، همانطور که در شکل 3 نشان داده شده است. ورودی های انتخاب تراشه در اینجا به صورت موازی به هم متصل می شوند و بنابراین، تعداد کل خطوط ارتباطی برابر نگه داشته می شود. تا 4. با این حال، استفاده از اتصال آبشاری تنها در صورتی امکان‌پذیر است که پشتیبانی آن در مستندات مربوط به تراشه‌های مورد استفاده نشان داده شده باشد. برای پی بردن به این موضوع، مهم است که بدانید به چنین ارتباطی در انگلیسی "daisy-chaining" گفته می شود.

پروتکل انتقال

پروتکل انتقال از طریق رابط SPI اساساً با منطق شیفت رجیستر (شکل 7.6) یکسان است، که شامل انجام عملیات جابجایی و بر این اساس، ورودی و خروجی بیت داده در لبه های خاصی از سیگنال همگام سازی است. تنظیم داده در حین انتقال و نمونه برداری در حین دریافت همیشه در لبه های ساعت مخالف انجام می شود. این برای اطمینان از اینکه داده ها پس از اینکه به طور قابل اعتماد ایجاد شدند، نمونه برداری می شوند، ضروری است. اگر در نظر بگیریم که اولین لبه در چرخه انتقال می تواند یک لبه افزایش یا سقوط باشد، چهار گزینه منطقی ممکن برای عملکرد رابط SPI وجود دارد. این گزینه ها حالت SPI نامیده می شوند و با دو پارامتر توصیف می شوند:

· CPOL - سطح اولیه سیگنال همگام سازی (اگر CPOL=0، پس خط همگام سازی قبل از شروع چرخه انتقال و پس از پایان آن سطح پایینی دارد (یعنی لبه اول در حال افزایش است و آخرین لبه در حال سقوط است) در غیر این صورت، اگر CPOL=1، - بالا (یعنی اولین جبهه در حال سقوط است و آخرین جلو در حال افزایش است)).

· CPHA - مرحله همگام سازی. این پارامتر توالی نصب و بازیابی داده ها را تعیین می کند. اگر CPHA=0 باشد، در لبه افزایشی چرخه ساعت از داده ها نمونه برداری می شود و سپس در لبه سقوط داده ها تنظیم می شود. اگر CPHA=1 باشد، نصب داده ها در لبه افزایشی در چرخه همگام سازی انجام می شود و نمونه برداری در لبه سقوط انجام می شود.

اطلاعات مربوط به حالت های SPI در شکل های 7.7 و 7.8 ارائه شده است.

تراشه‌های Master و Slave که در حالت‌های مختلف SPI کار می‌کنند ناسازگار هستند، بنابراین، قبل از انتخاب تراشه‌های برده، مشخص کردن حالت‌هایی که توسط bus master پشتیبانی می‌شوند، مهم است. ماژول‌های SPI سخت‌افزاری که در میکروکنترلرها ادغام شده‌اند، در بیشتر موارد، از توانایی انتخاب هر حالت پشتیبانی می‌کنند و بنابراین، هر تراشه SPI Slave را می‌توان به آنها متصل کرد (فقط برای یک گزینه اتصال مستقل اعمال می‌شود). علاوه بر این، پروتکل SPI در هر یک از حالت ها به راحتی در نرم افزار پیاده سازی می شود.

رابط RS-485

رابط RS-485 (نام دیگر EIA/TIA-485) یکی از رایج ترین استانداردهای لایه ارتباط فیزیکی است. لایه فیزیکی یک کانال ارتباطی و یک روش انتقال سیگنال است (لایه 1 مدل اتصال سیستم های باز OSI).

شبکه ای که بر روی رابط RS-485 ساخته شده است از فرستنده گیرنده های متصل با استفاده از یک جفت پیچ خورده - دو سیم پیچ خورده تشکیل شده است. رابط RS-485 بر اساس اصل انتقال دیفرانسیل (متعادل) داده است. ماهیت آن انتقال یک سیگنال از طریق دو سیم است. علاوه بر این، یک سیم (مشروط A) سیگنال اصلی را حمل می کند و سیم دیگر (به شرط B) کپی معکوس خود را حمل می کند. به عبارت دیگر، اگر روی یک سیم "1" وجود داشته باشد، روی سیم دیگر "0" و بالعکس. بنابراین، همیشه یک اختلاف پتانسیل بین دو سیم یک جفت پیچ خورده وجود دارد: در "1" مثبت است، در "0" منفی است (شکل 7.9).

این تفاوت پتانسیل است که سیگنال را منتقل می کند. این روش انتقال ایمنی بالایی در برابر تداخل حالت رایج ایجاد می کند. تداخل حالت مشترک تداخلی است که هر دو سیم خط را به یک اندازه تحت تأثیر قرار می دهد. به عنوان مثال، یک موج الکترومغناطیسی که از بخشی از یک خط ارتباطی عبور می کند، پتانسیل را در هر دو سیم القا می کند. اگر سیگنال با پتانسیل در یک سیم نسبت به سیم مشترک منتقل شود، مانند RS-232، تداخل روی این سیم می تواند سیگنال را نسبت به مشترک (زمین) که تداخل را به خوبی جذب می کند، مخدوش کند. علاوه بر این، اختلاف پتانسیل زمین در مقاومت یک سیم مشترک طولانی کاهش می یابد - منبع اضافی اعوجاج. و با انتقال دیفرانسیل، اعوجاج رخ نمی دهد. در واقع، اگر دو سیم نزدیک به هم قرار بگیرند، و حتی در هم تنیده شوند، آنگاه پیکاپ روی هر دو سیم یکسان است. پتانسیل در هر دو سیم با بار مساوی به یک اندازه تغییر می کند، در حالی که تفاوت پتانسیل اطلاعاتی بدون تغییر باقی می ماند.

پیاده سازی سخت افزاری رابط RS485.

اجرای سخت افزاری رابط - تراشه های فرستنده گیرنده با ورودی/خروجی های دیفرانسیل (به خط) و پورت های دیجیتال (به پورت های UART کنترلر). دو گزینه برای این رابط وجود دارد: RS-422 و RS-485.

RS-422 یک رابط تمام دوبلکس است. دریافت و انتقال از طریق دو جفت سیم جداگانه انجام می شود. روی هر جفت سیم فقط یک فرستنده می تواند وجود داشته باشد.

RS-485 یک رابط نیمه دوبلکس است. دریافت و انتقال از طریق یک جفت سیم با جدایی زمانی انجام می شود. ممکن است فرستنده های زیادی در یک شبکه وجود داشته باشد، زیرا می توان آنها را در حالت دریافت خاموش کرد (شکل 7.10).

توضیح نمادها در شکل 7.10

D (راننده) - فرستنده؛
R (گیرنده) - گیرنده؛
DI (ورودی درایور) - ورودی دیجیتال فرستنده؛
RO (خروجی گیرنده) - خروجی دیجیتال گیرنده؛
DE (فعال کردن راننده) - اجازه کار با فرستنده؛
RE (فعال کردن گیرنده) - اجازه کار با گیرنده.
الف - ورودی/خروجی دیفرانسیل مستقیم.
ب - ورودی/خروجی دیفرانسیل معکوس.
Y - خروجی دیفرانسیل مستقیم (RS-422)؛
Z - خروجی دیفرانسیل معکوس (RS-422).

بیایید نگاهی دقیق تر به فرستنده گیرنده RS-485 بیندازیم. خروجی دیجیتال گیرنده (RO) به پورت UART گیرنده (RX) متصل است. ورودی دیجیتال فرستنده (DI) به درگاه فرستنده UART (TX). از آنجایی که گیرنده و فرستنده در سمت دیفرانسیل به هم متصل هستند، فرستنده باید در حین دریافت خاموش شود و گیرنده باید در حین ارسال خاموش شود. برای این منظور از ورودی های کنترلی استفاده می شود - مجوز گیرنده (RE) و مجوز فرستنده (DE). از آنجایی که ورودی RE معکوس است، می توان آن را به DE متصل کرد و گیرنده و فرستنده را با یک سیگنال از هر پورت کنترلر سوئیچ کرد. در سطح "0" - کار برای دریافت، در "1" - برای انتقال (شکل 7.11).

گیرنده با دریافت اختلاف پتانسیل (UAB) در ورودی های دیفرانسیل (AB)، آنها را به سیگنال دیجیتال در خروجی RO تبدیل می کند. حساسیت گیرنده ممکن است متفاوت باشد، اما سازندگان تراشه های فرستنده گیرنده، محدوده آستانه تضمین شده برای تشخیص سیگنال را در اسناد می نویسند. به طور معمول این آستانه ها ± 200 میلی ولت هستند. یعنی وقتی UAB > +200 میلی ولت - گیرنده وقتی UAB "1" را تشخیص می دهد< -200 мВ - приемник определяет "0". Если разность потенциалов в линии настолько мала, что не выходит за пороговые значения - правильное распознавание сигнала не гарантируется. Кроме того, в линии могут быть и не синфазные помехи, которые исказят столь слабый сигнал.

همه دستگاه ها به یک کابل به یک جفت پیچ خورده متصل می شوند: خروجی های مستقیم (A) به یک سیم، خروجی های معکوس (B) به سیم دیگر.

امپدانس ورودی گیرنده سمت خط (RAB) معمولاً 12KΩ است. از آنجایی که قدرت فرستنده نامحدود نیست، محدودیتی در تعداد گیرنده های متصل به خط ایجاد می کند. با توجه به مشخصات RS-485، با در نظر گرفتن مقاومت های پایان دهنده، فرستنده می تواند تا 32 گیرنده را هدایت کند. با این حال، تعدادی ریز مدار با امپدانس ورودی افزایش یافته است که به شما امکان می دهد به طور قابل توجهی بیش از 32 دستگاه را به خط متصل کنید.

حداکثر سرعت ارتباط با توجه به مشخصات RS-485 می تواند به 10 Mbaud/sec برسد. حداکثر فاصله 1200 متر است. در صورت نیاز به سازماندهی ارتباط در فاصله بیش از 1200 متر یا اتصال دستگاه های بیشتر از ظرفیت بار فرستنده، از تکرار کننده های ویژه استفاده می شود.

رابط I2C.

این رابط توسط فیلیپس پیشنهاد شد که از آن برای سازماندهی ارتباط بین تراشه‌ها در تلویزیون‌های خود استفاده می‌کرد. I 2 C (مخفف Inter-Integrated Circuit) یک گذرگاه سریال ناهمزمان دو جهته است. از نظر فیزیکی، گذرگاه I 2 C از دو خط سیگنال تشکیل شده است که یکی از آنها (SCL) برای انتقال سیگنال ساعت و دیگری (SDA) برای تبادل داده در نظر گرفته شده است. برای کنترل خطوط، از مراحل خروجی با کلکتور باز استفاده می شود، بنابراین خطوط اتوبوس باید از طریق مقاومت هایی با مقاومت 1...10 کیلو اهم به یک منبع تغذیه +5 ولت بسته به طول فیزیکی خطوط وصل شوند. سرعت انتقال داده طول خطوط اتصال در حالت استاندارد می تواند به 2 متر برسد، سرعت انتقال داده 100 کیلوبیت بر ثانیه است.

همه مشترکین اتوبوس به دو کلاس "لیدر" و "برده" تقسیم می شوند. دستگاه اصلی یک سیگنال ساعت (SCL) تولید می کند. این می تواند به طور مستقل به اتوبوس دسترسی داشته باشد و به هر دستگاه برده به منظور انتقال یا دریافت اطلاعات آدرس دهد. همه دستگاه های برده برای شناسایی آدرس خود به اتوبوس "گوش می دهند" و با شناسایی آن، عملیات تعیین شده را انجام می دهند. علاوه بر این، حالت به اصطلاح "MultiMaster" زمانی امکان پذیر است که چندین دستگاه اصلی در اتوبوس نصب شده باشند که یا به طور مشترک از دستگاه های Slave مشترک استفاده می کنند یا به طور متناوب هنگامی که خود مبادله اطلاعات را آغاز می کنند به عنوان استاد عمل می کنند یا زمانی که به عنوان برده عمل می کنند. آنها منتظر دسترسی از یک دستگاه اصلی دیگر هستند. حالت "MultiMaster" نیاز به نظارت مداوم و شناسایی درگیری ها دارد. از این نظر پیاده سازی این حالت دشوارتر است (منظور اجرای نرم افزار است) و در نتیجه کمتر در محصولات واقعی استفاده می شود.

در لحظه اولیه زمان - در حالت آماده به کار - هر دو خط SCL و SDA در یک حالت منطقی قرار دارند (ترانزیستور مرحله خروجی کلکتور باز بسته است). در حالت انتقال (شکل 7.12)، بیت داده SDA توسط لبه بالارونده SCL کلاک می شود. زمانی که خط SCL در حالت صفر باشد اطلاعات روی خط SDA تغییر می کند. دستگاه slave می تواند خط SCL را در حالت صفر نگه دارد، به عنوان مثال، در حالی که بایت دریافتی بعدی را پردازش می کند، در حالی که دستگاه اصلی باید منتظر بماند تا خط SCL قبل از ادامه انتقال اطلاعات، آزاد شود.

برای همگام سازی بسته های اتوبوس I 2 C، دو شرط متمایز می شود - "START" و "STOP" که ابتدا و انتهای بسته اطلاعات را محدود می کند (شکل 7.13). برای رمزگذاری این شرایط، از تغییر وضعیت خط SDA با یک حالت تک خط SCL استفاده می شود که در هنگام انتقال داده ها غیرقابل قبول است. شرط "START" زمانی تشکیل می شود که یک لبه نزولی روی خط SDA ظاهر می شود، زمانی که خط SCL در یک حالت واحد است، و بالعکس، شرایط "STOP" زمانی تشکیل می شود که یک لبه بالارونده روی خط SDA ظاهر شود. خط در یک حالت واحد است.

انتقال داده از اولین لبه بالارونده در خط SCL آغاز می شود، که مهم ترین بیت از اولین بایت اطلاعات را ساعت می کند. هر بایت اطلاعاتی (8 بیت) شامل 9 دوره ساعت از خط SCL است. در چرخه نهم، دستگاه دریافت کننده یک تصدیق (ACK) صادر می کند - یک لبه سقوط که نشان دهنده دریافت داده است. لازم به ذکر است که هر مشترک اتوبوس، اعم از master و slave، در زمان های مختلف می تواند هم فرستنده و هم گیرنده باشد و مطابق با حالت، ملزم به دریافت یا صدور سیگنال ACK است که عدم وجود آن تفسیر می شود. به عنوان یک خطا

برای شروع یک عملیات تبادل داده، دستگاه اصلی یک شرط "START" را در اتوبوس صادر می کند. شرط "START" با یک بایت با آدرس دستگاه برده (شکل 7.14)، متشکل از یک آدرس دستگاه هفت بیتی (بیت های 1...7) و یک پرچم عملیات خواندن و نوشتن یک بیتی دنبال می شود - " R/W” (بیت 0). بیت R/W جهت مبادله را تعیین می کند که 0 به معنای انتقال داده از master به slave (شکل 7.14a) و 1 به معنای خواندن از برده (شکل 7.14b) است. تمام بیت های گذرگاه I 2 C به ترتیب از زیاد به پایین منتقل می شوند، یعنی بیت 7 اول و 0 آخرین بیت ارسال می شود. آدرس ممکن است با یک یا چند بایت اطلاعاتی (در جهت مشخص شده توسط پرچم R/W) دنبال شود که بیت های آن توسط Master در گذرگاه SCL کلاک می شوند.

هنگام انجام عملیات خواندن، میزبان اگر می خواهد بایت بعدی را بخواند باید بایت خوانده شده را ACK کند، و اگر می خواهد بسته را به پایان برساند ACK صادر نکند (شکل 7.14b را ببینید).

مجاز است آدرس دستگاه برده را چندین بار در یک چرخه انتقال از سر بگیرد، یعنی یک شرط "START" مکرر را بدون شرط "STOP" قبلی ارسال کند (شکل 7.14c).

لازم است به برخی از ویژگی های تراشه های حافظه که از طریق رابط I 2 C کار می کنند و روش های تبادل داده با آنها توجه کنید. ابتدا حافظه داده های غیر فرار این ریزمدارها به صفحات حافظه تقسیم می شود، بنابراین وقتی یک بایت نوشته می شود، ابتدا کل صفحه در رم داخلی میکرو مدار کپی می شود، جایی که سلول مورد نظر تغییر می کند. پس از این، صفحه قدیمی پاک می شود و یک صفحه جدید به جای آن نوشته می شود. ویژگی دیگر این است که مهم ترین چهار بیت آدرس برده همیشه باید برابر با 1010 باشد. این الزام توسط خود فیلیپس تنظیم می شود.

باس 1 سیم تنها از یک هادی برای ارتباط و برق استفاده می کند. حالت ارتباط ناهمزمان و نیمه دوبلکس است که کاملاً از الگوی master-slave پیروی می کند. یک یا چند دستگاه Slave را می توان به طور همزمان به یک اتوبوس متصل کرد. فقط یک دستگاه اصلی را می توان به یک اتوبوس متصل کرد.

حالت بیکار اتوبوس مربوط به سطح بالایی است که توسط یک مقاومت کششی ایجاد می شود. مقدار مقاومت pull-up در مستندات مربوط به آی سی slave آورده شده است. تمام تراشه های متصل به باس باید بتوانند سطح پایینی تولید کنند. اگر خروجی میکروکنترلر از سه حالت پشتیبانی نمی کند، باید درایوری تهیه کرد که کلکتور باز یا خروجی تخلیه باز داشته باشد.

انتقال سیگنال از طریق گذرگاه 1 سیم به شکاف های زمانی 60 میکرو ثانیه تقسیم می شود. در هر شکاف زمانی فقط یک بیت داده ارسال می شود. دستگاه های برده مجاز هستند که تفاوت های قابل توجهی با تاخیرهای زمانی رتبه بندی شده داشته باشند. با این حال، این نیاز به زمان بندی دقیق تر توسط رهبر برای اطمینان از برقراری ارتباط صحیح با زیردستانی که پایگاه های زمانی متفاوتی دارند، دارد.

سیگنال های اصلی اتوبوس

استاد هر ارتباط را در سطح بیت آغاز می کند. این بدان معنی است که انتقال هر بیت، صرف نظر از جهت، باید توسط استاد آغاز شود. این با تنظیم گذرگاه در سطح پایین، که منطق همه دستگاه‌های دیگر را همگام‌سازی می‌کند، به دست می‌آید. 5 دستور اصلی برای برقراری ارتباط از طریق گذرگاه 1-Wire وجود دارد: "Write log. 1، «نوشتن گزارش. 0، «خواندن»، «بازنشانی» و «حضور».

سیگنال "نوشتن گزارش. 1"

سیگنال "نوشتن گزارش. 1" در شکل نشان داده شده است. 7.15. استاد سطح پایین را برای 1...15 میکرو ثانیه تنظیم می کند. پس از این، اتوبوس را برای باقی مانده زمان آزاد می کند.

برنج. 7.15 - سیگنال "نوشتن گزارش. 1"

سیگنال "نوشتن گزارش. 0"

سیگنال "نوشتن گزارش. 0 اینچ در شکل 7.16 نشان داده شده است. Master سطح پایینی را برای حداقل 60 میکرو ثانیه تولید می کند، اما بیش از 120 میکرو ثانیه نیست.

شکل 7.16 - سیگنال "نوشتن گزارش. 0"

سیگنال خواندن

سیگنال "خواندن" در شکل نشان داده شده است. 7.17. استاد سطح پایین را برای 1...15 میکرو ثانیه تنظیم می کند. سپس برده اگر بخواهد گزارشی را ارسال کند، اتوبوس را پایین نگه می دارد. 0. در صورت لزوم انتقال لاگ. 1، سپس به سادگی خط را آزاد می کند. اسکن اتوبوس باید در فاصله 15 میکروثانیه از پایین آمدن اتوبوس انجام شود. هنگامی که از سمت استاد مشاهده می شود، سیگنال "Read" در اصل یک سیگنال "Write log" است. 1" وضعیت داخلی واقعی برده توسط سیگنال "Record log" تعیین می شود. 1" یا "خواندن".

شکل 7.17 - سیگنال "خواندن".

ریست/سیگنال حضور

سیگنال های "تنظیم مجدد" و "حضور" در شکل 7.18 نشان داده شده است. لطفا توجه داشته باشید که فواصل زمانی پالس متفاوت است. استاد برای 8 شکاف زمانی (480 میکروثانیه) پایین می کشد و سپس گذرگاه را رها می کند. این دوره طولانی از وضعیت کم، سیگنال "تنظیم مجدد" نامیده می شود.

اگر Slave در گذرگاه وجود داشته باشد، باید ظرف 60 میکروثانیه پس از آزاد کردن گذرگاه توسط Master، سطح پایینی را برای حداقل 60 میکروثانیه تنظیم کند. این پاسخ "حضور" نامیده می شود. اگر چنین سیگنالی تشخیص داده نشود، استاد باید فرض کند که هیچ دستگاهی به گذرگاه متصل نیست و امکان ارتباط بیشتر وجود ندارد.

USB (گذرگاه سریال جهانی) برای اتصال سریع دستگاه های خارجی به رایانه شخصی و سپس یافتن و نصب نرم افزارهای لازم توسعه داده شد. دستگاه های کم مصرف مستقیماً از طریق رابط تغذیه می شوند.

استاندارد USB به معنای وجود تنها یک دستگاه Master (Host) در شبکه است. علاوه بر این، این استاندارد از 127 دستگاه برده در شبکه پشتیبانی می کند. برای تمایز بین دستگاه‌های master و slave، انواع مختلفی از کانکتورها ایجاد شده‌اند (شکل 7.19): نوع A برای Master و نوع B برای Slave. پذیرفته شده است که ولتاژ 5 ولت فقط در کانکتور نوع A که کانکتور اصلی است وجود دارد. بقیه دستگاه ها مستقیماً از آن تغذیه می شوند.

استاندارد USB از 4 سیم محافظ استفاده می کند که دو تای آنها قدرت را انتقال می دهند (+5v و GND) (شکل 7.19 و جدول 7.2). دو مورد دیگر نشان دهنده سیگنال های داده دیفرانسیل جفت پیچ خورده هستند. طرح رمزگذاری استفاده شده است NRZI(Non Return to Zero Invert) برای انتقال داده با یک فیلد همگام سازی برای همگام سازی ساعت اصلی و slave.

استاندارد USB 2.0 استاندارد On-The-Go (OTG) را معرفی کرد که پروتکل مذاکره میزبان را معرفی کرد که به دو دستگاه USB اجازه می دهد در مورد اینکه چه کسی به عنوان استاد عمل می کند توافق کنند. این در نظر گرفته شده و محدود به اتصالات نقطه به نقطه، مانند تلفن همراه به رایانه شخصی است.

USB از اتصال "hot" (plug'n'play) با درایورهای بارگذاری شده و بدون بارگذاری پویا پشتیبانی می کند. کاربر به سادگی دستگاه را به برق وصل می کند و در نتیجه آن را به اتوبوس متصل می کند. میزبان اتصال را تشخیص می دهد، دستگاه تازه وارد شده را نظرسنجی می کند و درایور مناسب را بارگیری می کند و لحظه بارگیری با ساعت شنی روی صفحه نمایش را نشان می دهد (اگر درایور دستگاه USB قبلاً روی سیستم نصب شده باشد). کاربر نهایی به فسخ یا IRQ(وقفه ها) و آدرس های پورت، و نه در مورد راه اندازی مجدد کامپیوتر (بدون نیاز به راه اندازی مجدد). هنگامی که کاربر کار با دستگاه USB را تمام کرد، آنها به سادگی آن را جدا می کنند (یا کابل را جدا می کنند)، میزبان عدم وجود دستگاه را تشخیص داده و به طور خودکار درایور را تخلیه می کند.

SB نسخه 1.1 از دو سرعت پشتیبانی می کند - حالت سرعت کامل با سرعت 12 مگابیت بر ثانیه و حالت سرعت کم با سرعت 1.5 مگابیت بر ثانیه. حالت 1.5 مگابیت بر ثانیه کندتر است و نسبت به EMI (تداخل) کمتر حساس است، که هزینه دانه های فریت را کاهش می دهد و الزامات کیفیت قطعه را کاهش می دهد.

کابل اتوبوس با سرعت کامل یک کابل جفت پیچ خورده است که توسط یک محافظ محافظت می شود و همچنین می تواند برای عملکرد با سرعت کم استفاده شود. کابلی که فقط با حداقل سرعت کار می کند (مثلاً برای اتصال ماوس) می تواند بدون محافظ باشد.

استاندارد USB 2.0 حالت High Speed ​​را با سرعت انتقال داده 480 مگابیت بر ثانیه معرفی می کند.

انتقال اطلاعات.

تمام انتقال داده ها از طریق رابط توسط میزبان آغاز می شود. داده ها در قالب بسته ها منتقل می شوند. رابط USB از چندین نوع بسته استفاده می کند:

الف) بسته را امضا کنید (بسته توکن) نوع و جهت انتقال داده، آدرس دستگاه و شماره سریال نقطه پایانی را توصیف می کند (CT بخش قابل آدرس دهی دستگاه USB است). انواع مختلفی از بسته های ویژگی وجود دارد: که در, خارج, SOF, برپایی;

ب) بسته داده (بسته داده) حاوی داده های ارسال شده است.

ب) بسته تایید (بسته دست دادن) برای گزارش نتایج انتقال داده در نظر گرفته شده است. انواع مختلفی از بسته های هماهنگی وجود دارد: ACK, N.A.K., توقف.

انتقال اطلاعات از طریق USB به شرح زیر انجام می شود:

اولین بسته، به اصطلاح رمز، توسط دستگاه اصلی تولید می شود تا نوع داده های در حال انتقال، عملیات انتقال (خواندن یا نوشتن)، آدرس دستگاه و نقطه پایانی را توصیف کند. مورد بعدی که معمولاً ارسال می شود، یک بسته داده ای است که اطلاعات مفیدی را حمل می کند، به دنبال آن یک بسته دست دادن است که نشان می دهد داده یا نشانه با موفقیت دریافت شده است، یا نقطه پایانی متوقف شده یا برای پذیرش داده ها در دسترس نیست.

نقاط پایانی در استاندارد USB منابع و مخزن داده ها هستند. همه دستگاه‌ها باید از نقطه پایانی 0 پشتیبانی کنند. این نقطه پایانی است که تمام درخواست‌های کنترل و وضعیت را در حین شمارش (یک درخواست دسته برای تعیین نوع دستگاه متصل شده) و تا زمانی که دستگاه در گذرگاه فعال است، می‌پذیرد.

نقاط پایانی شماره گذاری شده از 1 برای انتقال اطلاعات کاربر استفاده می شود. بیایید به چند نمونه نگاه کنیم.

درایور دستگاه به نقطه پایانی دستگاه اصلی EP1 ارسال می کند. زیرا این دستگاه اصلی است، سپس داده ها به بافر OUT EP1 می رود. در این حالت یک توکن OUT ارسال می شود که نشان می دهد داده ها آماده ارسال هستند. با دریافت این نشانه، دستگاه برده می تواند داده ها را از بافر OUT بخواند.

اگر دستگاه Slave نیاز به انتقال داده به master داشته باشد، آن را در بافر IN قرار می دهد. این بافر داده ها را تا زمانی که دستگاه اصلی یک توکن IN ارسال کند و از نقطه پایانی درخواست داده باشد، نگه می دارد. همه بافرهای نقطه پایانی نسبت به Master نامگذاری می شوند، یعنی. بافر خروجی دستگاه برده IN نامیده می شود زیرا این بافر ورودی برای دستگاه اصلی است.

انتقال داده از یک نقطه پایانی به نقطه دیگر از طریق جریان ها انجام می شود. جریان - یک ارتباط منطقی بین یک میزبان و یک نقطه پایانی (ها).

جریان ها همچنین دارای مجموعه ای از پارامترها مانند نوع انتقال (کنترل، حجیم، ایزو یا وقفه)، جهت جریان داده و حداکثر اندازه بسته/بافر هستند.

به عنوان مثال، جریان پیش‌فرض یک جریان دو طرفه است که از نقطه پایانی IN 0 و نقطه پایانی OUT 0 با کنترل نوع انتقال تشکیل شده است.

USB دو نوع لوله را تعریف می کند

الف) لوله های جریانفرمت USB از پیش تعریف شده ندارید، بنابراین می توانید هر نوع داده ای را از طریق لوله جریان ارسال کنید و داده ها را در انتهای دیگر بازیابی کنید. جریان های داده متوالی هستند و جهت از پیش تعیین شده دارند - IN یا OUT. لوله های جریان از انواع انتقال فله، هم زمان و وقفه پشتیبانی می کنند. لوله های جریان را می توان از میزبان یا از دستگاه کنترل کرد.

ب) لوله های پیامیک فرمت USB از پیش تعریف شده داشته باشید. آنها توسط میزبان کنترل می شوند و با درخواست ارسال شده از میزبان آغاز می شوند. داده ها در جهت دلخواه مشخص شده در درخواست ارسال می شوند. بنابراین، لوله های پیام اجازه می دهند داده ها در هر دو جهت منتقل شوند، اما فقط از انتقال کنترل پشتیبانی می کنند.

استاندارد USB چهار نوع انتقال داده را توصیف می کند:

الف) حمل و نقل را کنترل کنید (انتقال کنترل) برای پیکربندی دستگاه و همچنین سایر اهداف خاص دستگاه استفاده می شود.

ب) استریمینگ (انتقال فله) برای انتقال حجم نسبتاً زیادی از اطلاعات استفاده می شود.

ب) فوروارد را قطع کنید (انتقال قطعی) برای انتقال مقدار نسبتاً کمی از اطلاعات استفاده می شود که انتقال به موقع آن مهم است. مدت زمان محدود و اولویت بالاتری نسبت به سایر انواع انتقال دارد.

د) ارسال هم زمان (انتقال هم زمان) جریان بلادرنگ نیز نامیده می شود. اطلاعاتی که در چنین انتقالی منتقل می شوند، در زمان ایجاد، ارسال و دریافت به یک مقیاس زمان واقعی نیاز دارند.

نقل و انتقالات جریانی مشخصه انتقال داده بدون خطا تضمین شده بین میزبان و عملکرد با شناسایی خطاها در حین انتقال و درخواست مجدد اطلاعات است. هنگامی که میزبان برای دریافت داده از یک تابع آماده می شود، یک بسته پرچم به تابع ارسال می کند که در-کیسه پلاستیکی. در پاسخ به این، تابع در فاز انتقال داده، یک بسته داده را به میزبان یا در صورت وجود ارسال می کند

SPIدر آردوینو یکی از پروتکل های اصلی برای تبادل اطلاعات بین برد آردوینو و دستگاه های متصل است. این پروتکل همراه با I2C و UART اغلب برای بسیاری از انواع دستگاه های جانبی استفاده می شود، بنابراین آگاهی از اصول عملکرد SPI برای هر مهندس آردوینو ضروری است. در این مقاله به طور خلاصه به اصول اولیه، طرح تعامل و روش اتصال سنسورها و صفحه نمایش های SPI به آردوینو خواهیم پرداخت.

SPI یک پروتکل انتقال داده پرکاربرد بین میکروکنترلر (Master) و دستگاه های جانبی (Slave) است. در پروژه های ما، یک برد آردوینو اغلب به عنوان Master استفاده می شود. رابط SPI توسط موتورولا اختراع و استفاده شد، اما با گذشت زمان به یک استاندارد صنعتی تبدیل شد. مزیت اصلی کار با این رابط سرعت بالای آن و قابلیت اتصال چند دستگاه در یک گذرگاه داده است.

پین و پین SPI

ارتباط از طریق رابط آردوینو SPI بین چندین دستگاه که در نزدیکی یکدیگر قرار دارند انجام می شود. بردهای آردوینو مجهز به پین ​​های مجزا برای SPI هستند. جفت شدن با استفاده از چهار مخاطب انجام می شود:

  • MOSI - اطلاعات از طریق این خط به Slave از Master منتقل می شود.
  • MISO - برای انتقال اطلاعات به Master از Slave استفاده می شود.
  • SCLK - ایجاد پالس های ساعت برای انتقال داده های همزمان.
  • SS - انتخاب دستگاه برده.

تعامل دستگاه های SPI

تعامل دستگاه زمانی شروع می شود که خروجی SS کم شود.

قبل از شروع کار باید تعیین کنید:

  • شیفت باید از کدام بیت شروع شود - بالا یا پایین؟ ترتیب با استفاده از تابع PI.setBitOrder () تنظیم می شود.
  • سطحی که خط SCK باید در غیاب پالس ساعت باشد را تعیین کنید. با تابع SPI.setDataMode() قابل تنظیم است.
  • نرخ انتقال داده را انتخاب کنید. توسط تابع SPI.setClockDivider() تعیین می شود.

مرحله بعدی این است که مشخص کنید اطلاعات در چه حالتی منتقل می شود. انتخاب حالت با شاخص هایی مانند قطبیت و فاز پالس ساعت تعیین می شود. اگر سطح پایین باشد، 0 ثبت می شود، بالا - 1. در کل 4 حالت وجود دارد:

  • حالت 0 – SPI_MODE0: قطبیت (CPOL) 0، فاز (CPHA) 0.
  • حالت 1: قطبیت 0، فاز 1.
  • حالت 2: قطبیت 1، فاز 0.
  • حالت 3: قطبیت 1، فاز 1.

در ابتدا، آردوینو برای انتقال داده ها با مهم ترین بیت ابتدا طراحی شده بود، اما قبل از شروع، باید این موضوع را در مستندات روشن کنید. می توانید حالت های موجود در تصویر را نشان دهید.

دو نوع اتصال در رابط SPI امکان پذیر است: مستقل و آبشاری. در حالت اول، هنگام اتصال، Master به هر Slave به صورت جداگانه آدرس می دهد، در حالت دوم، اتصال یک به یک اتفاق می افتد، یعنی. آبشار

اتصال SPI به آردوینو

هر مدل آردوینو پین های SPI مخصوص به خود را دارد. این نتایج:

  • Uno: MOSI مربوط به پین ​​11 یا ICSP-4، MISO – 12 یا ICSP-1، SCK – 13 یا ICSP-3، SS (slave) – 10 است.
  • Mega1280 یا Mega2560: MOSI – 51 یا ICSP-4، MISO – 50 یا ICSP-1، SCK – 52 یا ICSP-3، SS (slave) – 53.
  • لئوناردو: MOSI – ICSP-4، MISO – ICSP-1، SCK – ICSP-3.
  • سررسید: MOSI – ICSP-4، MISO –ICSP-1، SCK –ICSP-3، SS (master) – 4، 10، 52.

آخرین کنترلر Arduino Due قابلیت های کاربر را گسترش می دهد و به شما اجازه می دهد تا وظایف بیشتری را نسبت به سایر میکروکنترلرها اجرا کنید. به عنوان مثال، امکان کنترل خودکار دستگاه برده و انتخاب خودکار تنظیمات مختلف (سرعت ساعت، حالت و غیره) وجود دارد.

کتابخانه آردوینو SPI

برای کار بر روی آردوینو، یک کتابخانه جداگانه ایجاد شده است که SPI را پیاده سازی می کند. قبل از شروع کد باید #include را اضافه کنید برای فعال کردن کتابخانه

توابع اصلی:

  • begin() و end() – کار را روشن و خاموش کنید. در طول مقداردهی اولیه، خطوط SCLK، MOSI و SS در خروجی پیکربندی می شوند و سطح پایین را به SCLK، MOSI و سطح بالا را به SS ارسال می کنند. تابع end() سطوح خط را تغییر نمی‌دهد و برای خاموش کردن بلوک مرتبط با اینترفیس روی برد آردوینو لازم است.
  • setBitOrder(order) – تنظیم ترتیب ارسال بیت های اطلاعاتی (MSBFIRST – اولویت مهم ترین بیت، LSBFIRST – اولویت کم اهمیت ترین بیت).
  • setClockDivider(divider) – تنظیم تقسیم کننده های فرکانس اصلی ساعت. می توانید مقسوم علیه های 2، 4، 8، 16، 32، 64 و 128 را تنظیم کنید. به صورت زیر نوشته شده است - SPI_CLOCK_DIVn، که در آن n مقسوم علیه انتخاب شده است.
  • setDataMode (حالت) - یکی از چهار حالت عملیاتی را انتخاب کنید.
  • transfer(value) - یک بایت را از دستگاه اصلی منتقل می کند و بایتی را که از دستگاه Slave دریافت می شود برمی گرداند.
  • shiftIn(miso_pin، sclk_pin، bit_order) و shiftOut (mosi_pin، sclk_pin، order، value) – پذیرش و ارسال داده‌ها را می‌توان به هر پین دیجیتالی متصل کرد، اما قبل از آن باید خودتان آن‌ها را پیکربندی کنید.

مزایا و معایب SPI

مزایای رابط SPI:

  • امکان انتقال داده های بزرگ، نه محدود به 8 بیت.
  • پیاده سازی آسان نرم افزار.
  • سادگی اجرای سخت افزار.
  • پین های کمتری نسبت به رابط های موازی مورد نیاز است.
  • فقط سرعت دستگاه ها حداکثر فرکانس ساعت را محدود می کند.

ایرادات:

  • تعداد پین های زیاد در مقایسه با I2C.
  • Slave نمی تواند جریان اطلاعات را کنترل کند.
  • عدم وجود پروتکل تشخیص خطای استاندارد
  • تعداد زیادی روش برای پیاده سازی رابط.
  • عدم تایید دریافت اطلاعات.

نمونه ای از استفاده از Arduino SPI در پروژه با سنسور فشار

برای اجرای پروژه به آردوینو، سنسور فشار، برد برد و سیم نیاز داریم. نمونه ای از اتصال سنسور در شکل نشان داده شده است.

با استفاده از سنسور SCP1000 می توان پارامترهایی مانند فشار و دما را تشخیص داد و این مقادیر را از طریق SPI انتقال داد.

عناصر اساسی طرح برنامه

اول از همه، رجیسترهای حسگر با استفاده از setup() در کد ثبت می شوند. چندین مقدار از دستگاه برگردانده می شود - یک در 19 بیت برای فشار دریافتی، دیگری در 16 بیت برای دما. پس از این، دو بایت دما خوانده می شود و فشار در دو مرحله خوانده می شود. ابتدا برنامه سه بیت مهم و سپس 16 بیت بعدی را می گیرد و پس از آن با استفاده از یک bit shift این دو مقدار در یکی ترکیب می شوند. فشار واقعی مقدار 19 رقمی تقسیم بر 4 است.

const int PRESSURE = 0x1F; // مرحله اول تعیین فشار (سه بیت مهم شناسایی می شود)

const int PRESSURE_LSB = 0x20; // مرحله دوم که 16 بیت را برای فشار تعریف می کند

const int TEMPERATURE = 0x21; //16 بیت برای دما

برای خواندن داده های دما و تبدیل آن به سلسیوس از عنصر کد زیر استفاده می شود:

int tempData = readRegister(0x21, 2);

float realTemp = (float)tempData / 20.0; // برای تعیین مقدار دمای واقعی بر حسب سانتیگراد، باید عدد حاصل را بر 20 تقسیم کنید

Serial.print("Temp

Serial.print(realTemp);

خواندن بیت های فشار و ترکیب آنها:

بایت press_data_high = readRegister(0x1F, 1);

فشار_داده_بالا &= 0b00000111;

int unsigned press_data_low = readRegister(0x20, 2);

فشار طولانی = ((pressure_data_high<< 16) | pressure_data_low) / 4; //определение давления в Паскалях.

نتیجه گیری مختصر در مورد SPI

سپرها و حسگرهای SPI اغلب در پروژه های آردوینو یافت می شوند، بنابراین باید بدانید که این پروتکل چگونه کار می کند. در اصل، هیچ چیز پیچیده ای در مورد اتصال دستگاه های SPI وجود ندارد. نکته اصلی این است که سیم ها را به درستی وصل کنید و از روش های کتابخانه استاندارد در ترتیب درست استفاده کنید. برای برخی از دستگاه ها، به عنوان مثال، کارت های SD یا صفحه نمایش OLED، در اصل، هیچ جایگزینی وجود ندارد.

روز خوب! مقاله امروز یک انحراف نظری کوچک است که در تسلط بر دوره برنامه نویسی آردوینو به ما کمک می کند. ما در مورد رابط SPI صحبت خواهیم کرد. چه چیزی است و با چه چیزی خورده می شود، در این مقاله سعی می کنیم آن را بفهمیم.

برای شروع، تعریف. SPI(Serial Peripheral Interface - رابط محیطی سریال) یک استاندارد انتقال داده همزمان سریال است که برای برقراری ارتباط بین کنترلر با تجهیزات جانبی مختلف طراحی شده است. این رابط کاربری ساده و راحت است. یک کتابخانه ویژه برای کار با SPI برای آردوینو نوشته شد.

ارتباطات مبتنی بر اصل "ارباب-برده" است. کنترلر معمولاً دستگاه اصلی است. تمام دستگاه های دیگر که به سیستم متصل هستند برده هستند. داده ها از دستگاه اصلی از طریق گذرگاه داده به یکی از Slave انتخاب شده یا برعکس از دستگاه Slave به Master به طور همزمان با استفاده از سیگنال ساعت اصلی منتقل می شود.

پین اوت گذرگاه داده SPIشامل 4 خط: MOSI، MISO، CS و SCLK:

  • MOSI(Master Out Slave In - Master-output، Slave-input) یا به سادگی S.I.– انتقال داده از دستگاه اصلی به دستگاه برده انجام می شود.
  • میسو(Master In Slave Out - Master-input، Slave-output) یا به سادگی بنابراین– انتقال داده از دستگاه برده به دستگاه اصلی انجام می شود.
  • C.S.(انتخاب تراشه - انتخاب تراشه) یا اس اس(Slave Select - انتخاب برده) – انتخاب یک دستگاه برده.
  • SCLK(ساعت سریال) یا به سادگی SCK- انتقال سیگنال ساعت از Master به Slave.

برای انتقال داده از یک دستگاه اصلی به یک Slave، لازم است که Master سطح سیگنال را در خط CS Slave که قرار است با آن ارتباط برقرار کند، پایین تنظیم کند. سپس بیت ها روی خط MOSI منتقل می شوند. برای متوقف کردن انتقال داده، Master خط CS را با تنظیم سطح سیگنال بالا بر روی آن، همانطور که بود، "آزاد" می کند.

برای اتصال چندین دستگاه برده به گذرگاه داده SPI، هر یک از آنها باید خط CS جداگانه خود را داشته باشند. هنگامی که این کار انجام شد، دستگاه اصلی می تواند به طور متناوب خطوط را بکشد و بین دستگاه های برده سوئیچ کند. برده های متعدد را می توان به روش های مختلف متصل کرد: به صورت موازی یا سری.

اتصال موازی دستگاه های برده از طریق گذرگاه داده SPI

ویژگی اتصال موازی چندین دستگاه برده این است که از خطوط مشترک SCLK، MOSI و MISO برای ایجاد ارتباط استفاده می شود. در این حالت، هر دستگاه Slave خط SS(CS) خود را دارد. دستگاه اصلی با تولید یک سطح سیگنال پایین در خط SSn مربوطه (جایی که n – 1،2...) با کدام «برد فعلی» تبادل داده برقرار کند، تعیین می‌کند.

برای اتصال n عدد دستگاه های برده به کنترلر از طریق رابط SPI، باید آنها را برای این منظور اختصاص دهید. n+3پین های میکروکنترلر

اتصال سریال دستگاه های برده به گذرگاه SPI

در مورد اتصال سریال دستگاه های برده از خطوط مشترک SCLK و SS استفاده می کنند و خروجی یکی به ورودی دیگری متصل می شود. خط MOSI master به اولین Slave و خط MISO به آخرین متصل است. اگر از دیدگاه دستگاه اصلی به این اتصال نگاه کنید، یک دستگاه برده از طریق گذرگاه داده SPI متصل می شود.

لازم به ذکر است که مزیت این نوع اتصال این است که می توانید تنها با استفاده از 4 پین میکروکنترلر، nامین دستگاه را به این منظور متصل کنید.

فعلاً همین است، ادامه دارد...

امروز آشنایی خود را با تایر آغاز می کنیم SPI (رابط سریالی جانبی).

این اتوبوس در الکترونیک بسیار مورد استفاده قرار می گیرد. این بسیار راحت است، همزمان و تمام دوبلکس است، بنابراین، در بسیاری از مدارها برای ارتباط بین دستگاه های دیجیتال مختلف - سنسورها، کنترلرها، درایورها و سایر دستگاه ها استفاده می شود.

یکی دیگر از عوامل مهم در لزوم آشنایی ما با آن، سازماندهی سخت افزاری این باس در کنترلرها است. AVR.

علاوه بر این، چه بخواهیم چه نخواهیم، ​​مدت زیادی است که به محض شروع فلش کردن کنترلر خود برای اولین بار، از آنجایی که از طریق این رابط فلش ​​می شود، با رابط SPI ارتباط برقرار کرده ایم.

بنابراین، من می خواهم با این لاستیک بیشتر آشنا شوم.

بیایید مستندات فنی کنترلر Atmega8 را باز کنیم، صفحه ای را که پین ​​اوت این کنترلر نشان داده شده است باز کنیم و ببینیم که از پایه های 16 تا 19، پین های گذرگاه SPI وجود دارد.

اکنون کمی بیشتر در مورد این یافته ها

SS (انتخاب تراشه)- این پای انتخاب دستگاه است. اگر دستگاه Slave روی این پین روی سطح پایین تنظیم شده باشد، آنگاه این دستگاه از طریق گذرگاه SPI پاسخ می دهد و در صورت بالا بودن، اطلاعات را مبادله می کند.

MOSI (ورودی اصلی خروجی برده)- این پین خروجی دستگاه اصلی و ورودی دستگاه برده است.

MISO (خروجی برده اصلی ورودی)- برعکس، خروجی غلام، ورودی ارباب.

SCK- پای همگام سازی تمام دستگاه های شرکت کننده در تبادل اطلاعات در این اتوبوس با پالس ساعت در فرکانس مشخصی عرضه می شوند.

در اینجا نموداری از اجرای گذرگاه SPI در کنترلر Atmega8 آورده شده است

مانند هر اتوبوس، تعدادی رجیستر وجود دارد که اطلاعات خاصی را ذخیره می کند.

ما به SHIFT REGISTER علاقه مند هستیم، اطلاعات از طریق آن رد و بدل می شود. به محض اینکه لبه خاصی روی پین همگام سازی وجود داشته باشد، نزولی یا صعودی، بسته به تنظیمات، این رجیسترهای دستگاه های Slave و Master اطلاعات را مبادله می کنند و نه همه اطلاعات، بلکه فقط یک بیت. این ثبات ها به سمت چپ جابه جا می شوند و مهم ترین بیت ها از هر رجیستر به کم اهمیت ترین بیت های همان ثبات دستگاه مربوطه می روند. یعنی Slave مهم ترین بیت خود را از طریق پین MOSI به لیدر ارسال می کند، که به دلیل جابجایی به چپ آن را در بیت مرتبه پایین خالی می نویسد و Slave بیت مرتبه بالا جابجا شده خود را از طریق MISO منتقل می کند. به بیت درجه پایین رهبر سنجاق کنید. تبادل به این صورت پیش می‌رود، یعنی در 8 سیکل ساعت کامل بایت‌ها را رد و بدل می‌کنند

به محض اینکه تمام 8 بیت از یک بایت اطلاعات منتقل شد، یک ثبات خاص به ما سیگنال می دهد که این فرآیند تکمیل شده است. یا بهتر است بگوییم، یک بیت مشخص از یک ثبات خاص.

همچنین در بلوک دیاگرام یک تقسیم کننده را می بینیم که ورودی آن پالس های ساعت را دریافت می کند و سپس با مقدار مشخصی تقسیم می شود، از طریق یک زنجیره به پایه SCK ارسال می شود و از آنجا به دستگاه Slave در همان پایه عرضه می شود. این امر عملکرد هماهنگ دستگاه ها را تضمین می کند. فرکانس ساعت از کمترین فرکانس پشتیبانی شده توسط همه دستگاه های شرکت کننده در تبادل انتخاب می شود.

من جمع را می گویم زیرا می تواند بیش از دو دستگاه در یک مدار معین وجود داشته باشد. چگونه این تضمین می شود، به شرطی که دستگاه ها هیچ آدرسی نداشته باشند، اکنون به شما خواهم گفت.

روش های مختلفی برای تبادل اطلاعات بین چندین دستگاه وجود دارد، یعنی زمانی که در هر دستگاه اصلی چندین Slave وجود دارد. ما به دو مورد از رایج ترین آنها خواهیم پرداخت.

روش اول شعاعی است (برای بزرگنمایی روی عکس کلیک کنید)

در اینجا Master داده ها را به یک دستگاه خاص ارسال می کند و 0 منطقی را روی پین SS روشن می کند با این روش می توان تنها یک دستگاه را انتخاب کرد و چندین پین آزاد از پورت های کنترلر نیز مورد نیاز خواهد بود.

روش جالب دیگری وجود دارد - حلقه یا آبشار (برای بزرگنمایی تصویر روی تصویر کلیک کنید)

در اینجا می بینیم که پاهای انتخاب همه موازی هستند و تبادل به صورت دایره ای انجام می شود. بنابراین، سرعت کاهش می یابد به دلیل این واقعیت که دایره انتقال افزایش می یابد، اما پایه های پورت ذخیره می شوند.

در درس های بعدی، زمانی که از دستگاه های خاصی در پروژه های خود استفاده می کنیم، همه اینها را با جزئیات بیشتری مطالعه خواهیم کرد.

خوب، به نظر می رسد با مدار انتقال داده از طریق اتوبوس SPIما آن را فهمیدیم

حال بیایید نحوه کنترل این فرآیند را در سطح رجیسترهای سخت افزاری کنترلر AVR دریابیم.

ما این ثبات ها را در بلوک دیاگرام بالا در صفحه می بینیم.

Atmega8 دارای رجیسترهای زیر برای سرویس گذرگاه SPI است.

SPDR (SPI Data Register)- ثبت داده، در بلوک دیاگرام DATA BUFFER است. یک بایت را برای ارسال بعدی آن به دستگاه برده وارد این ثبات می کنیم و از آن بایت اطلاعاتی را که از دستگاه برده آمده است می خوانیم. همچنین لازم نیست که کنترل کننده ما دستگاه اصلی باشد. متعاقباً مداری متشکل از دو کنترلر را مونتاژ می کنیم که یکی از آنها Slave خواهد بود. بنابراین در این رجیستر است که بایت ارسال و دریافت هر دو قرار می گیرد.

SPCR (SPI Control Register)- ثبت کنترل

این رجیستر شامل بیت های زیر است:

SPIE (فعال کردن وقفه SPI)- بیتی که وقفه ها را فعال می کند.

SPE (فعال کردن SPI)- بیتی که گذرگاه SPI را فعال می کند.

DORD (ترتیب داده ها)- بیتی که ترتیب ارسال بیت ها را تنظیم می کند اگر روی 1 تنظیم شود، ابتدا بیت کم اهمیت ارسال می شود، اگر روی 0 تنظیم شود، ابتدا مهم ترین بیت ارسال می شود.

MSTR (Master/Slave Select)- بیتی که دستگاهی را به عنوان استاد یا برده مشخص می کند. وقتی این بیت روی 1 تنظیم شود، دستگاه اصلی خواهد بود.

CPOL (قطب ساعت)- قطبیت همگام سازی، تعیین می کند که حالت آماده به کار در کدام لبه پالس همگام سازی آغاز می شود.

اگر این بیت 1 باشد، حالت آماده به کار با لبه صعودی و اگر 0 باشد، با لبه نزولی خواهیم داشت.

CPHA (فاز ساعت)- کمی مسئول فاز ساعت است، یعنی بیت در کدام لبه منتقل می شود.

بیایید بسته به نصب CPOL و CPHA به نمودارهای انتقال داده نگاه کنیم

این یک وابستگی جالب است. گاهی اوقات در مشخصات فنی یک دستگاه می بینیم که مثلاً می تواند در حالت SPI 0:0 و SPI 1:1 کار کند و این دقیقاً همان چیزی است که به تنظیم این بیت ها مربوط می شود.

SPR1، SPR0 (انتخاب نرخ ساعت SPI)- این بیت ها مسئول مقدار تقسیم کننده فرکانس همگام سازی هستند که با بیت کار می کنند SPI2Xواقع در ثبت وضعیت همچنین یک کنترل است، زیرا هشت بیت در رجیستر کنترل برای همه تنظیمات کافی نبود و تعداد زیادی بیت رایگان در ثبات وضعیت وجود دارد.

SPSR (ثبت وضعیت SPI)- ثبت وضعیت

SPI2X (دو بیت سرعت SPI)- بیتی که سرعت را دو برابر می کند و در ارتباط با بیت های SPR1 و SPR0 رجیستر کنترل کار می کند.

بیایید وابستگی فرکانس به این سه بیت را ببینیم

SPIF (پرچم وقفه SPI)- پرچم وقفه ما منتظریم تا این بیت روی یک تنظیم شود. وقتی یک بایت دریافت می کنیم. به محض اینکه بایت دستگاه دیگری به طور کامل در بافر ما ظاهر شد، این پرچم تنظیم می شود. این پرچم فقط در صورتی کار می کند که بیتی که وقفه ها را فعال می کند تنظیم شده باشد و همچنین وقفه های سراسری فعال باشند.

WCOL (نوشتن پرچم برخورد)- اگر در حین انتقال داده تداخل بیتی وجود داشته باشد، اگر در حین انتقال داده تلاش برای نوشتن در رجیستر داده شود، پرچم تداخل یا برخورد تنظیم می شود.

خب حالا می توان گفت که کمی با رابط SPI آشنا هستیم.

تماشای ویدیو آموزشی(روی عکس کلیک کنید)

بازدید پست: 6294

با رتبه بندی از 10 اهم تا 1 MOhm)؛

  • سیم های اتصال (به عنوان مثال، این مجموعه خوبی است)؛
  • کامپیوتر شخصی با محیط توسعه Arduino IDE.
  • 1 توضیحات سریالرابط SPI

    SPI - رابط جانبی سریال یا "رابط جانبی سریال"یک پروتکل انتقال داده همزمان برای جفت شدن است دستگاه اصلیبا دستگاه های جانبی (Slave). دستگاه اصلی اغلب یک میکروکنترلر است. ارتباط بین دستگاه ها از طریق چهار سیم انجام می شود، به همین دلیل است که SPI گاهی اوقات "رابط چهار سیم" نامیده می شود. این لاستیک ها هستند:

    چهار حالت انتقال داده وجود دارد ( SPI_MODE0، SPI_MODE1، SPI_MODE2، SPI_MODE3، ناشی از ترکیب قطبیت پالس های ساعت (ما در سطح HIGH یا LOW کار می کنیم) قطبیت ساعت، CPOL، و فاز پالس های ساعت (همگام سازی در لبه افزایش یا سقوط پالس ساعت)، فاز ساعت، CPHA.

    شکل این جدول را توضیح می دهد.

    رابط SPI چندین گزینه برای اتصال دستگاه های برده ارائه می دهد: مستقلو آبشار. هنگامی که به طور مستقل به گذرگاه SPI متصل می شود، دستگاه اصلی به هر دستگاه Slave جداگانه دسترسی دارد. با اتصال آبشاری، دستگاه های برده یک به یک مانند یک آبشار عمل می کنند.


    انواع اتصال دستگاه برای عملکرد از طریق رابط SPI: مستقل و آبشاری

    2 پیاده سازی رابط SPIروی بردهای خانواده آردوینو

    در آردوینو، اتوبوس های رابط SPI روی پورت های خاصی قرار دارند. هر تخته تخصیص پین مخصوص به خود را دارد. برای راحتی، نتیجه گیری ها تکرار شده و همچنین در یک جداگانه قرار می گیرند کانکتور ICSP(در برنامه نویسی سریال مداری، برنامه نویسی دستگاه موجود در مدار با استفاده از پروتکل سریال). لطفاً توجه داشته باشید که کانکتور ICSP یک پین انتخاب برده - SS ندارد، زیرا فرض بر این است که آردوینو به عنوان یک دستگاه اصلی در شبکه استفاده خواهد شد. اما در صورت لزوم، می توانید هر پین دیجیتال آردوینو را به عنوان SS اختصاص دهید.

    شکل، مطابقت استاندارد پین ها با اتوبوس های SPI برای آردوینو UNO و نانو را نشان می دهد.


    3 کتابخانه برای کاربا رابط SPI

    یک کتابخانه ویژه برای آردوینو نوشته شده است که پروتکل SPI را پیاده سازی می کند. به این صورت متصل می شود: در ابتدای برنامه اضافه می کنیم #شامل SPI.h.

    برای شروع استفاده از پروتکل SPI، باید تنظیمات را تنظیم کنید و سپس با استفاده از رویه پروتکل را مقداردهی اولیه کنید SPI.beginTransaction(). شما می توانید این کار را با یک دستور انجام دهید: SPI.beginTransaction(SPISsettings(14000000، MSBFIRST، SPI_MODE0))

    این بدان معنی است که ما پروتکل SPI را در فرکانس 14 مگاهرتز مقداردهی اولیه می کنیم، انتقال داده از MSB (مهمترین بیت) در حالت SPI_MODE0 شروع می شود.

    پس از مقداردهی اولیه، با حرکت دادن پین SS مربوطه به حالت، دستگاه Slave را انتخاب کنید کم.

    سپس با دستور داده ها را به دستگاه Slave منتقل می کنیم SPI.transfer().

    پس از انتقال ما SS را به حالت برمی گردانیم بالا.


    کار با پروتکل با دستور کامل می شود SPI.endTransaction().

    توصیه می‌شود زمان انتقال بین دستورالعمل‌های SPI.beginTransaction() و SPI.endTransaction() را به حداقل برسانید تا اگر دستگاه دیگری سعی می‌کند انتقال داده را با استفاده از تنظیمات مختلف آغاز کند، دچار مشکل نشوید.

    4 اتصال یک شیفت رجیستربه آردوینو

    بیایید کاربرد عملی رابط SPI را در نظر بگیریم. ما LED ها را با کنترل یک شیفت رجیستر 8 بیتی از طریق گذرگاه SPI روشن می کنیم. بیایید به آردوینو وصل شویم شیفت رجیستر 74HC595. ما یک LED با مقدار اسمی 220 اهم را از طریق یک مقاومت محدود کننده به هر یک از 8 خروجی رجیستر متصل می کنیم. نمودار در شکل نشان داده شده است.


    5 طرحی برای کنترل شیفت رجیستراز طریق رابط SPI

    بیایید طرحی مانند این بنویسیم.

    #عبارتند از const int pinSelect = 8; // ثبت پین انتخاب کنید void setup() ( SPI.begin(); // مقداردهی اولیه pinMode رابط SPI (pinSelect, OUTPUT); // digitalWrite(pinSelect، LOW); // انتخاب دستگاه های برده (ثبت نام) SPI.transfer(0); // محتویات رجیستر را پاک کنید digitalWrite(pinSelect, HIGH); // پایان انتقال Serial.begin(9600); } حلقه خالی() (برای (int i=0; i)

    ابتدا، بیایید کتابخانه SPI را به هم متصل کنیم و رابط SPI را مقداردهی کنیم. بیایید پایه 8 را به عنوان پین انتخاب slave تعریف کنیم. بیایید شیفت رجیستر را با ارسال مقدار "0" به آن پاک کنیم. پورت سریال را راه اندازی کنید.

    برای روشن کردن یک LED خاص با استفاده از یک شیفت رجیستر، باید یک عدد 8 بیتی را به ورودی آن اعمال کنید. به عنوان مثال، برای اینکه LED اول روشن شود، عدد باینری 00000001، برای دوم - 00000010، برای سوم - 00000100 و غیره را ارائه می کنیم. این اعداد باینری وقتی به سیستم اعداد اعشاری تبدیل می شوند دنباله زیر را تشکیل می دهند: 1، 2، 4، 8، 16، 32، 64، 128 و توان های دو از 0 تا 7 هستند.

    بر این اساس، در چرخه حلقه ()بر اساس تعداد LED ها، از 0 تا 7 دوباره محاسبه می کنیم. عملکرد قدرت (پایه، مدرک) 2 را به توان شمارنده حلقه افزایش می دهد. میکروکنترلرها با اعداد از نوع "دو" خیلی دقیق کار نمی کنند، بنابراین از تابع گرد کردن برای تبدیل نتیجه به عدد صحیح استفاده می کنیم. گرد(). و عدد بدست آمده را به شیفت رجیستر منتقل می کنیم. برای وضوح، مانیتور پورت سریال مقادیر به دست آمده در طول این عملیات را نمایش می دهد: واحد از طریق تخلیه ها عبور می کند - LED ها به صورت موجی روشن می شوند.

    6 "موج دویدن"از LED ها

    LED ها یکی یکی روشن می شوند و ما یک "موج" نور را مشاهده می کنیم. LED ها با استفاده از یک شیفت رجیستر کنترل می شوند که ما از طریق رابط SPI به آن متصل شده ایم. در نتیجه تنها از 3 پین آردوینو برای کنترل 8 ال ای دی استفاده می شود.اگر ال‌ای‌دی‌ها را مستقیماً به پورت‌های دیجیتال آردوینو وصل می‌کردیم، باید از یک پورت جداگانه برای هر LED استفاده کنیم.

    ما ساده ترین نمونه کار آردوینو با گذرگاه SPI را مطالعه کردیم. ما در مقاله ای جداگانه عملکرد چندین شیفت رجیستر با اتصالات مستقل و آبشاری را با جزئیات بیشتری در نظر خواهیم گرفت.