مراحلی که طی میشه تا host (کامپیوتر) دستگاه USB رو بشناسه بهش میگن مراحل سرشماری. یعنی از وقتی که مثلا یک flash رو به کامپیوتر وصل میکنیم تا وقتی کامپیوتر میشناسش چه اتفاقایی میفته.

مرحله 1: کاربر دستگاه را به host وصل میکند و host از طریق HUB تغذیه دستگاه را تامین کرده، دستگاه روشن میشود.

مرحله 2: HUB دستگاه را تشخیص میدهد. HUB دارای دو خط +D و -D است که بر روی هر کدام یک مقاومت 15KΏ قرار دارد. از طرف دستگاه نیز یک مقاومت 1.5 KΏ روی یکی از خطوط یا قرار دارد. در صورتیکه دستگاه از نوع سرعت پایین باشد مقاومت 1.5 KΏ به خط -D و چنانچه از نوع سرعت بالا باشد به خط +D  وصل میشود. زمانیکه دستگاه به هاب وصل است مقاومتها باعث تشخیص دستگاه توسط HUB میشوند.

دستگاه سرعت بالا

دستگاه سرعت پایین

 

مرحله 3: Host از اتصال یک دستگاه جدید به HUB مطلع میشود، سپس از خواسته Get_Port_Status برای دریافت اطلاعات بیشتر استفاده میکند.

مرحله 4: HUB تشخیص میدهد که دستگاه سرعت پایین است یا بالا. این کار با تشخیص ولتاژ های موجود روی خطوط +D و -D انجام میشود.

مرحله 5: در این مرحله host با فرستادن درخواست Set_port_features به HUB خواستار reset شدن دستگاه میشود.HUB نیز خطوط -D و +D را به مدت 10ms در حالت logic 0 قرار میدهد و دستگاه با تشخیص این حالت reset میشود.

مرحله 6: در این مرحله host تشخیص میدهد که آیا دستگاه سرعت بالا از سرعت خیلی بالا (USB 2)نیز پشتیبانی میکند؟

مرحله 7: HUB یک مسیر بین host و دستگاه ایجاد میکند. Host با فرستادن درخواست Get_Port_Status به دستگاه میفهمد که آیا از حالت reset خارج شده؟ و این کار را تا زمانی که از حالت reset خارج نشده ادامه میدهد. سپس دستگاه وارد حالت پیش فرض میشود. یعنی host از طریق آدرس و endpoint صفر با دستگاه ارتباط برقرار میکند و ارسال های کنترلی را انجام میدهد

مرحله 8: Host با فرستادن درخواست Get_Descriptor به دستگاه خواستار اندازه ماکزیمم packet (بسته) هایی است که توسط endpoint صفر پشتیبانی میشود. این خواسته به آدرس و endpoint صفر فرستاده میشود.

مرحله 9: Host با فرستادن درخواست Set_address یک آدرس منحصر به فرد به دستگاه اختصاص میدهد. دستگاه نیز آدرس را save میکند و ACK میفرستد. پس از قطع و وصل دستگاه یا reset آن ممکن است یک آدرس دیگر به دستگاه داده شود.

مرحله 10: اکنون نوبت این است که host از قابلیت های دستگاه آگاه شود و این کار را با فرستادن درخواست get_descriptor به دستگاه (آدرس جدید) انجام میدهد. دستگاه نیز در پاسخ توانایی های خود را در قالب descriptor ها به host میگوید.

مرحله 11: Host درایور دستگاه را تشخیص میدهد و آن را load میکند. Host پس از دریافت descriptor ها به دنبال بهترین درایور موجود میگردد. به این منظور سیستم عامل با جستجو در فایل های INF سیستم و بررسی idVendor و idProduct و تطابق با اطلاعات موجود در فایل های INF درایور مناسب را پیدا میکند. در صورت پیدا نشدن درایور مناسب، سیستم عامل مناسب ترین درایور های کلاس، زیر کلاس و پروتکل که از دستگاه دریافت کرده را پیدا میکند. اگر باز هم درایور مناسب پیدا نشد. سیستم عامل این موضوع را به اطلاع کاربر خواهد رساند و کاربر خود درایور مناسب را به سیستم عامل پیشنهاد میکند.

مرحله 12: درایور پیکربندی، interfaceها و دستگاه را انتخاب میکند. Host با فرستادن خواسته Set_Configuration درخواست یک شماره پیکربندی را کرده و دستگاه نیز نسبت به آن پیکربندی خود را تنظیم خواهد نمود.

بعد از طی مراحل فوق دستگاه آماده استفاده است.

Advertisements