تارا فایل

مقاله اصول برنامه نویسی اسمبلی




اصول برنامه نویسی اسمبلی

CPU تراشه enCorRe دستور پشتیبانی می کند. همه برنامه ها باید از این 37 دستور استفاده کنند. سیپرس یک مترجم مجانی ارائه می دهد که کدهای اسمبلی را که شما می نویسید به فایل های موضوع، که به منظور برنامه ریزی در EPROM تراشه تهیه می شوند، تبدیل می کند. اگر ترجیح دهید که در C برنامه نویسی کنید، سیپریس یک مفسر C نیز پیشنهاد می کند.
اگر با برنامه نویسی اسمبلی میکروکنترلر آشنایی داشته باشید، برنامه نویسی برای enCoRo نیز مشابه همان است. اما اگر با برنامه نویسی در بیسیک و C آشنا هستید، باید بدانید که در برنامه نویسی کدهای اسمبلی بسیاری از عملگرهای زبانهای سطح بالا موجود نیست در اینجا دیگر حلقه های While یا for یا انواع مختلف متغیرها وجود ندارد. اما برای تراشه ای مانند enCoRo که به منظور کارهای نمایشی و کنترلی غیر پیچیده طراحی شده است، استفاده از کدهای اسمبلی عملی است. برای برنامه های کوتاه، که به سرعت اجرا می شوند احتیاجی به خرید مفسر نیست.

اصول برنامه نویسی اسمبلی
برنامه نویسی اسمبلی شامل یک مجموعه از دستورات است که هر کدام مربوط به کدهای ماشینی هستند که تراشه از آنها پشتیبانی می کند. مثلاً دستور iord، که محل io را می خواند به کد h29 مربوط است. به جای به خاطر آوردن h 29، شما می توانید iord را بنویسید، و مترجم معادل سازی را برای شما انجام خواهد داد. دستور iord همچنین احتیاج به یک عملوند دارد که محل خواندن را مشخص کند. به عنوان مثال 01h iord پورتی با آدرس h 10 را می خواند.
زبان برنامه نویسی اسمبلی همچنین می تواند شامل دایرکتیو1 و توضیحات باشد. دایرکتیوها دستوراتی هستند که به جای اینکه مربوط به CPU باشند، مربوط به مترجم می باشند. دایرکتیوها شما را قادر می سازند که محلی از حافظه را مشخص کنید، متغیرهایی تعریف نمایید. در کل، نقشی که مترجم در کنار اجرای دستورات مشخص شده باید ایفا کند را نشان می دهند. یک نقطه ویرگول ( : )یا ممیز دوبل ( // ) یک عبارت توصیفی را مشخص می کنند که مترجم از آنها چشم پوشی می کند.
مترجمی که توسط سیپرس ارائه می شود، cyasm.exe قابل اجرا در پنجره داس2 می باشد. سیپرس مرجع ها و راهنمای استفاده برای کاربرانی را تهیه کرده است که چگونگی استفاده از مترجم را شرح می دهد.
مترجم از دو مجموعه دستور مشابه برای CPU های سری A و سری B پشتیبانی می کند. تراشه های enCoRo از سری B هستند. تراشه های قدیمی تر سیپرس، مانند 63001، از سری A بودند و از همه دستورات بجز بعضی از آنها پشتیبانی می کنند.
کدهای مترجم
راهنمای کاربران دارای توضیحات کاملی در مورد کد اسمبلی و دایرکتیوهاست و در اینجا برخی از جزئیات آن تکرار می شود. جدول 1-8 خلاصه ای از کدها می باشد و جدول 2-8 خلاصه ای از دایرکتیوها را نشان می دهد. کدهای ماشین تراشه به 37 دستور ترجمه شده است.

جدول 1-8: متجرم Cyasm از 37 دستور اسمبلی برای enCoRo پشتیبانی می کند
نوع دستور
دستور
توضیح
تابعهای منطقی و ریاضی
ADD
اضافه کردن بدون نقلی

ADC
اضافه کردن همراه با نقلی

AND
AND کردن بیتی

ASL
انتقال به چپ منطقی

ASR
انتقال به راست منطقی

CMP
مقایسه

CPL
متمم کردن آکومولاتور

DEC
کاهش

INC
افزایش

OR
OR کردن بیتی

RLC
چرخش به چپ همراه با نقلی

RRC
چرخش به راست همراه با نقلی

SUB
تفریق بدون نقلی

SBB
تفریق همراه با نقلی

XOR
OXR بیتی
پرشهای برنامه و کنترلی
GALL
فراخوانی تابع

HALT
اجرای ایست

RETI
بازگشت از وقفه

JACC
پرش آکومولاتور

JC
پرش در صورتی که نقلی یک باشد

JMP
پرش

JNC
پرش در صورتی که نقلی صفر باشد

JNZ
پرش اگر صفر نباشد

JZ
پرش اگر صفر باشد

RET
بازگشت

XPAGE
صفحه حافظه

ادامه جدول 1-8: مترجم Cyasm از 37 دستور اسمبلی برای enCoRo پشتیبانی می کند
نوع دستور
دستور
توضیح
انتقال داده

INDEX
خواندن جدول

IORD
خواندن از I/O

IOWR
نوشتن بر I/O

IOWX
مشخص کردن نوشتن I/O

MOV
انتقال

POP
انتقال داده از پشته به آکومولاتور

PUSH
انتقال داده از آکومولاتور به پشته

SWAP
SWAP
بقیه
DI
غیر فعال کردن وقفه ها

EI
فعال کردن وقفه ها

NOP
بدون عمل
این دستورات، تابعهای اصلی ریاضی و منطقی، پرسشهای برنامه و کپی داده ها از رجیسترها، پورت ها و RAM را انجام می دهند، دو بیت پرچ نقلی3 و صفر اطلاعات بیشتری را ارائه می دهند. مانند اینکه نتیجه دستور add دارای سرریز4 بوده است یا خیر یا اینکه نتیجه صفر شده است یا نه.
تراشه از سه حالت آدرس دهی پشتیبانی می کند که چگونگی استفاده از عملوند را برای دستور مشخص می کند. همه دستورات از هر سه حالت آدرس دهی پشتیبانی نمی کنند.
در آدرس دهی سریع، دستورات از مقدار عملوند مستقیماً استفاده می کنند. این دستور از آدرس دهی سریع برای جمع کردن h 60 با مقدار آکومولاتور استفاده می کند.
Add A/ 60h
در آدرس دهی مستقیم، دستور با عملوند شبیه به آدرس رفتار می کند و از مقداری که در آن آدرس ذخیره شده استفاده می نماید. این دستور از آدرس دهی مستقیم برای جمع کردن مقداری که در آدرس h60 از RAM نوشته شده با محتویات آکومولاتور استفاده می کند.
Add A/ [60h]
در آدرس دهی شاخصی، دستور از داده ای استفاده می کند که در آدرس حاصل از افزودنه یک مقدار به رجیسترX قرار گرفته است. آدرس دهی شاخصی برای کپی کردن یک بلاک از داده مفید می باشد. رجیستر X آدرس آغاز بلاک را در خود ذخیره می نماید. کد مقداری را به محتوای رجیستر X اضافه می کند تا آدرس بایتی که می خواهد کپی شود را به دست آورد. با افزایش این مقدار در هرکپی، کد می تواند یک بلاک داده را کپی کند.
استفاده از مترجم
مترجم یک برنامه تحت داس می باشد. این دستور:
cyasm test.asm
فایل ‏test.asm را اسمبل می کند.
مترجم سه فایل ایجاد می کند:
test.asm که کدهای اسمبل شده ای برای استفاده در کیت ارتقا هستند، شما می توانید از این فایل برای بارگذاری کدها از کامپیوتر بهRAM برد ارتقا استفاده کنید.
در اینجا بخشی از فایل rom، هنگامی که در وایرشگر متنی باز می شود نشان داده شده است:
24
81
15
80
10
80
99
80
10
80
85
80
99
80
8C
80
21
2A
2D
20
1E
20
1A
2D
37
27
20
A0
00
16
37
1A
جدول 2-8: مترجم cyasm از 13 دایرکتیو پشتیبانی می کند
دایرکتیو
توضیح
CPU
مرجع خصوصیات محصول
DB
تعریف بایت
DS
تعریف یک رشته اسکی
DSU
تعریف یک رشته، unicode
DW
تعریف یک کلمه (2بایت)
DWL
تعریف یک کلمه با بعضی خصوصیات
EQU
برابری نشانه ای با یک مقدار متغیر
FILLROM
تعریف مقدار برای حافظه برنامه بی استفاده
INCLUDE
اضافه کردن یک فایل
MACRO
تعریف ماکرو
ORG
مبدا برنامه
XPAGEON
فعال کردن XPAGE
XPAGEOFF
غیر فعال کردن XPAGE
این فایل حاوی خطوطی است که از هشت بایت هگزاسکی5 با استفاده از فاصله ای بین هر کدام تشکیل شده است.
در قالب بندی هگزاسکی، هر بایت با دو کد اسکی نمایش داده می شود که هر کد یک کاراکتر هگزادسیمال را نشان می دهد. مثلاً، بایت h 80 با کدهای اسکی h 38 برای 8 و h30 برای صفر نمایش داده می شود. استفاده از قالب بندی هگزاسکی شما را قادر می سازد که به راحتی در ویرایشگر متنی مقادیر بایت را ببینید (مثلاً 80). وقتی که کد در RAM برد ارتقا ذخیره شود. RAM شامل بایت های باینری می شود که توسط بایت های هگزاسکی نشان داده شده است. مثلاً، h 80 به 10000000 در باینری ترجمه می گردد.
‏test.hex کدهای اسمبلی در قالب بندی هگزاینتل می باشد. بسیاری از برنامه ریزان EPROMها از جمله Hi-Lo شرکت سیپرس، از این قالب بندی پشتیبانی می کنند. کیت ارتقاء می تواند به جای قالب بندی rom. از این قالب بندی استفاده کند. قالب بندی هگزاینتل از کاراکترهای هگزاسکی و اطلاعات آدرس دهی استفاده می کند که در اینجا داده هایی که در یک خط فایل hex.* موجود است را می بینید.
200000008099801080158124808C8099808580102D1A201E202D2A211A371600A0202737A1
test.hex یک فایل لیستی است که توسط مترجم ایجاد می گردد. این فایل هر خط کد اسمبلی و توضیحات را نشان می دهد. در ادامه آنها، کدهای برنامه معادل و آدرسی که باید در آنجا ذخیره شوند نمایش داده می شود. وقتی که از برنامه های نمایشی استفاده می کنیم. این فایل لیستی، مفید است. مثلاً اگر می خواهید که در یک نقطه اجرای برنامه را ثابت کنید، می توانید از این فایل لیستی برای پیدا کردن آدرس وابسته به آن خط استفاده کنید.
ستون سمت چپ، آدرس در حافظه برنامه را مشخص می کند. این آدرس وقتی که خط، فقط شامل توضیح یا برچسب است تغییر نمی کند. دو ستون بعدی بایت های ذخیره شده در هر آدرس می باشد. مثلاً، در محل CD03، مقدار Ah 2 کدی برای iowr و h 14 نشان دهنده رجیستری است که می خواهیم روی آن نوشته شود. ستون بعدی تعداد سیکل کلاک است که دستور استفاده می کند (5). ستونهای سمت راست نیز شامل کدهای اسمبلی و توضیحات می باشند.
برنامه نویسی در C
روش دیگر برای نوشتن کد برای این تراشه های سیپرس استفاده از مفسر C و محیط ارتقاء آن است.
مزیت های C
در مقایسه با برنامه نویسی با زبان اسمبلی، استفاده از C چندین مزیت دارد.
* استاندارد بودن ـ اگر تجربه ای در برنامه نویسی C داشته باشید، با عبارتهای آن آشنایید و می توانید با سرعت بیشتری آغاز کنید. همچنین ممکن است بتوانید از کدهای C که برای تراشه های دیگر نوشته شده اند با تغییرات جزئی استفاده کنید.
* دستورات بیشترـ به جای استفاده از پرشهای ساده، کدهای شما می توانند از دستوراتی همچون if…else و case یا for و while … do استفاده کنند.
* اپراتورهای بیشترـ این مفسر از اپراتورهای ریاضی بیشتری پشتیبانی می کند و شما می توانید از جمع، تفریق، ضرب، تقسیم و مقایسه های گوناگون استفاده کنید.
* کتابخا نه ها و مثالها ـ کتابخانه ها می توانند با استفاده از توابع معمولی مقدار زیادی در زمان، صرفه جویی کنند. کتاب خانه هایی برای برنامه تراشه مدارهای واسط، میکرووایر، و UART، زمانهای تاخیر، واسط صفحه کلید و LCD و توابع ریاضی وجود دارد. این مثالها شامل کدهای کامل برای صفحه کلید و ماوس می باشند.
* بهینه سازی ـ مفسر بهینه سازی ای به منظور کدها برای فشردگی و سرعت داراست.
اما مشکل آنجاست که باید این مفسر را خریداری نمایید، در حالی که مترجم مجانی می باشد.
معماری تراشه
این تراشه ارزان قیمت با طراحی آسان است و به منظور استفاده در ابزارهایی که قصد انتقال بلاک های کوچک داده با سرعت متوسط، ساخته شده است و کاربردهای آن در وسایل جانبی استاندارد از قبیل ماوس یا دستگاه های نقطه یابی دیگر و واحدهای
data-acquisition می باشد.
به عنوان مثال، واحدهای data-acquisition ممکن است نتایج خوانده شده از یک حسگر را به صورت متناوب به کامپیوتر بفرستد. پایه های I/O تراشه کنترلی می تواند به یک تبدیل کننده آنالوگ به دیجیتال که مقادیر خوانده شده از حسگر را به اعداد دیجیتالی تبدیل می کند و صل گردد. کامپیوتر میزبان نیز می تواند از اتصال USB برای درخواست آخرین داده های خوانده شده استفاده کند یا ممکن است کامپیوتر سیگنال هایی را به رله ها، موتورها یا دستگاه های دیگری که پایه های کنترلی I/O تراشه به آن متصل هستند ارسال کند.
به جای تکرار مسائل موجود در کاتالوگ، به مطالب مهمی که قبل از کار با تراشه باید مورد نظر قرار گیرد توجه کنیم. نکات مشکل و گیج کننده کاتالوگ نیز مورد بحث قرار می گیرد.
خصوصیات و محدودیت ها
یکی از دلایل انتخاب تراشه 63743، ارزان قیمت بودن آن است. قیمت این تراشه حدود چند دلار در سفارشهای محدود می باشد.
تراشه دارای 8 کیلوبایت حافظه برنامه است. با یک بهینه سازی، کدهایی که برای پشتبانی از ارتباطات USB لازم است، می توانند در یک کیلوبایت جای گیرند و به این ترتیب 7 کیلوبایت باقیمانده می توانند برای کاربردهای دیگر استفاده شوند.
یک ابزار ضروری برای ارتقای این تراشه کیت ارتقا می باشد که شامل بر ارتقا، مترجم و برنامه های اشکال زدایی است. همچنین ممکن است احتیاج به برنامه ریز Lo PROM -Hi CY3649 نیز داشته باشید که همه این ابزارها توسط سیپرس در دسترس قرار گرفته است.
63743 برای همه پروژه ها مناسب نیست. این تراشه دارای سرعت پایین است که به معنای آن است که شما نمی توانید به منظور انتقالهای همزمان و توده ای از آن استفاده کنید. و سریعترین زمان تاخیر ممکن دارای انتقال وقفه ای، 8 بایت در هر 10 میلی ثانیه می باشد. برخلاف بعضی از کنترلرهای اولیه، 63743 از انتقال وقفه ای خروجی پشتیبانی می کند.
درون تراشه
CPU این تراشه یک RISC هشت بیتی است که می تواند به حافظه برنامه، RAM، پورت ها ی I/O همه کاره و البته پورت USB دسترسی داشته باشد. پورت USB در حقیقت یک پورت سوئیچ خودکار است که هر دو واسط USB و PS/2 را برای ماوس و دیگر دستگاه های نقطه یابی ممکن می سازد. این ویژگی به منظور طراحی دستگاه هایی که قابل تطبیق با هر دو باس باشند قرار گرفته است. وقفه ها و ریست های مختلفی می توانند به CPU وقفه بدهند.
حافظه
حافظه داخلی تراشه 63743، شامل هشت کیلوبایت ( از h 0000 تا FFFh 1) از نوع OTP PROM برای ذخیره برنامه و 256 بایت RAM ( از h00 تا FFh) برای ذخیره داده های موقتی می باشد. 34 بایت رجیستر I/O، هر کدام با وظیفه ای تعریف شده، نیز در این تراشه وجود دارد.
سازماندهی حافظه برنامه تراشه، شبیه به میکروکنترلرهای دیگر است. اجرای برنامه از آدرسh 00 آغاز می شود. آدرس های h00 و h 01 حاوی آدرسی هستند که کد اصلی برنامه از آنجا شروع می گردد.
آدرس های h02 تا h17 حاوی اشاره گرهای وقفه ای هستند که وقتی یک از یازده وقفه تراشه اتفاق می افتد، آدرسی را که میکروکنترلر باید به آنجا پرش کند مشخص می نمایند. در اینجا مثالی از جدول اشاره گرهای برنامه تراشه آمده است.
ORG 00h

jmp
reset
;device reset
jmp
bus-reset
; USB reset interrupt
jmp
error
; 128- microsecond interrupt
jmp
lms-timer
; 1.028- millisecond interrupt
jmp
endpoint0
; Endpoint 0 interrupt
jmp
endpoint1
; Endpoint 1 interruopt
jmp
endpoint2
; Endpoint 2 interruopt
jmp
spi
; SPI interrupt
jmp
capture-a
; capture timer A interrupt
jmp
capture-b
; capture timer B interrupt
jmp
gpio
; GPIO interrupt
jmp
wakeup
; Wake-up interrupt
هر اشاره گر وقفه، به آدرسی که عملوند آن مشخص می کند پرش می نماید. وقفه هایی که استفاده نمی شوند، نباید اتفاق بیفتد اما برنامه تراشه باید شامل پرشهایی برای این وقفه ها باشد. زیر برنامه سرویس وقفه (ISR) برای این وقفه های بدون استفاده، بدون تغییر دادن رجیسترها فقط باید اجرای برنامه را به محل فراخوانی، بازگرداند.
وقفه ها بر اساس اولویت از آدرس h 0002 با بیشترین اولویت نوشته می شوند. حافظه برنامه از h0018 تا 1FDFh برای ذخیره بقیه کدها در دسترس می باشند.
256 بایت RAM باید دو پشته داده و 8 بایت بافر برای اندپوینت، و داده های موقتی دیگری را نگهداری کنند (شکل 4-8). بافرهای اندپوینت از آدرس های E8h تا FFh استفاده می نماید.
پشته ها دارای ساختار LIFO (آخرین ورودی – اولین خروجی) هستند. RAM دارای دو اشاره گر برای دسترسی به دو پشته می باشد. اشاره گر پشته برنامه (PSP ) از آدرس h 00 در هنگام ریست شروع می شود و مقدارش زیاد می گردد. در حالی که اشاره گر پشته داده (DSP) ممکن است توسط سخت افزار به E8h یا کمتر تنظیم گردد و مقدارش کم می شود. برنامه تراشه نیاز دارد که اطمینان حاصل کند که پشته ها آن قدر بزرگ نمی شوند که وارد محدوده دیگری گردند.
اشاره گر پشته برنامه
اشاره گر پشته برنامه (PSP) آدرس هایی را کد پس از بازگشت از یک زیر برنامه فراخوانی شده یا سرویس وقفه باید به آنها بازگردد را نگهداری می کند. در وقفه ها، PSP همچنین حالت پرچمهای صفر و نقلی را ذخیره می کند. برنامه تراشه مجبور نیست برای رهبری PSP همه کارها را خود انجام دهد. همه این کارها به صورت خودکار توسط سخت افزار و دستورات CALL و RET و RETI انجام می شود.

اندپوینت صفر

اندپوینت یک

اندپوینت دو

متغیرهای کاربر

استک داده کاهش می یابد

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

شکل 4-8: RAM تراشه enCoRo حاوی بافرهای اندپوینت ها، پشته های داده و برنامه و متغیرهایی می باشد که برنامه تراشه نیاز دارد.
در هنگام ریست، PSP به آدرس h 00 اشاره خواهد کرد. SPS قادر به سرویس دهی به چندین وقفه و یا زیربرنامه است. پس از اجرای زیربرنامه ها به دستوری که بعد از دستور فراخوانی است، باز خواهیم گشت. مثلاً اگر PSP قبل از فراخوانی یک زیربرنامه به آدرس h00 در حافظه برنامه اشاره کند، دستور CALL همچنین PSP را دو واحد افزایش می دهد (به خانه h02 اشاره خواهد کرد) بنابراین آماده است که در صورت لزوم آدرس دیگری را بگیرد. دستور RET که باعث بازگشت از زیر برنامه می شود، مقداری را که توسط PSP نشان داده می شود به درون شمارنده برنامه بارگذاری کرده و PSP را دو واحد کم می نمای. سپس اجرای برنامه از محلی که فراخوانی از آنجا انجام شده لود ادامه می یابد.
نظیر همین مراحل در زیر برنامه سرویس وقفه اتفاق می افتد، فقط با این تفاوت که مقادیر پرچمهای صفر و نقلی نیز ذخیره می شوند.
اشاره گر پشته داده
اشاره گر پشته داده (DSP) داده هایی را که توسط دستور PUSH ذخیره می شوند، نگهداری می کند. مثلاً PUSH A محتویات آکومولاتور را در پشته داده ذخیره می کند. DSP پس از ذخیره یک بایت، یک واحد کاهش می یابد. دستور POP بایت هایی را که قبلاً ذخیره شده است را بازیابی می کند و DSP را یک واحد افزایش می دهد.
مقدار پیش فرض DSP در هنگام ریست جایی که باید باقی بماند نیست. غیر از تراشه هایی که اصلاً از USB استفاده نمی کنند، برنامه تراشه باید قبل از استفاده از هر دستور PUSH ابتدا DSP را به مقدار جدید تنظیم کند. در هنگام ریست DSP مقدار h00 را دارد. از اینجا، هر دستور PUSH باعث می شود که DSP کاهش یافته و به بالای RAM (FFh) برود که بایت 7 بافر اندپوینت صفر است. به این دلیل، قبل از هر PUSH، برنامه تراشه باید اشاره گر DSP را به E8h یا کمتر تنظیم کند.
; Store the DSP's new beginning address
; in the accumulator.
mov A/ 70h
; Swap the contents of the accumulator with rhe DSP swap A/ dsp
ارتباطهای USB
برنامه تراشه، موتور واسط سریال (SIE) را توسط دسترسی به رجیسترها کنترل می کند. نه عدد رجیستر وجود دارند که به صورت مستقیم با ارتباطهای USB مرتبطند:رجیستر آدرس، سه رجیستر حالت اندپوینت، سه رجیستر شمارنده اندپوینت، یک رجیستر کنترل و وضعیت و رجیستر فعال ساز وقفه.
آدرس دستگاه
رجیستر آدرس دستگاه USB بیت آدرسی را که توسط میزبان در مرحله سرشماری به دستگاه نسبت داده شده است، نگهداری می کند. سخت افزار باید خواسته
Set -Address را تشخیص داده، تایید متقابلی در پاسخ به خواسته فرستاده و آدرس رسیده را در این رجیستر ذخیره نماید. بیت 7 باید در 1، ست شود تا موتور واسط قادر شود به ترافیک های USB پاسخ دهد.
حالت ها
رجیستر حالت اندپوینت صفر حاوی اطلاعاتی درباره آخرین پاکت داده رسیده به اندپوینت صفر است. SIE و برنامه تراشه هر دو قادرند که محتویات این رجیستر را تغییر دهند.
سه بیت مشخصه پاکت نوع پاکت توکن را مشخص می کنند: Setup، ورودی یا خروجی. در طول فاز داده از ترنزکشن Setup، SIE بیت تنظیم را یک می کند. برای جلوگیری از دوباره نوشته شدن، برنامه تراشه در صورت یک بودن این بیت اجازه نمی دهد که هیچ عمل نوشتنی روی بافر USB انجام شود. برنامه تراشه تا وقتی که همه بایت های داده دریافت نشود، نمی تواند این بیت را تغییر دهد.
بیت ACK نیز وقتی که ترنزکشن با موفقیت کامل شود، یک می گردد.
چهار بیت حالت چگونگی پاسخ SIE به ترنزکشن های Setup و ورودی و خروجی را مشخص می کنند. بسته به نوع ترنزکشن، برنامه تراشه می تواند از SIE بخواهد که ACK، NAK، Stall یا پاکت داده ای با طول صفر بفرستد. در پاره ای موارد، SIE پس از ACK حالت را تغییر می دهد. مثلاً وقتی که حالت به صورت ACK خروجی است، پس از بازگرداندن ACK در پاسخ به داده های رسیده، SIE حالت را به OUT Nak تنظیم می کند. این مساله به سخت افزار امکان می دهد که داده های رسیده ای را که با ACK پاسخ داده شده اند، بازیابی کند. پس از بازیابی این داده ها، برنامه تراشه می تواند برای امکان دریافت داده های جدید بیت های حالت را به OUT ACK تغییر دهد.
درک نحوه استفاده از این بیت های حالت بسیار گیج کننده بود. سیپرس چهار صفحه در مورد چگونگی پاسخ به همه این رویدادها تهیه کرده است. خوب است این حالت ها را بر اساس اینکه چه اندپوینت هایی در چه وضعیتی از آنها استفاده می کنند، گروه بندی کنیم. جدول 3-8 حالتهایی را که توسط اندپوینت صفر استفاده می شود نشان می دهد. در هر کدام از این حالتها همانند اندپوینت کنترلی، ترنزکشن های Setup پذیرفته می شوند.
مکمل رجیسترهای حالت اندپوینت صفر، رجیستر حالت اندپوینت یک و رجیستر حالت اندپوینت دو می باشند. این رجیسترها نیز همانند اندپوینت صفر دارای بیت های ACK و حالتهای مشابه می باشند. این رجیسترها بیت های مشخصه پاکت ندارند چون فقط از انتقال های ورودی و خروجی پشتیبانی می کنند. هر کدام از این رجیسترها دارای بیت های استال نیز هستند.
اندپوینت های 1 و 2 از تنظیمات حالت متفاوتی با اندپوینت صفر استفاده می کنند چون این اندپوینت ها احتیاج به پاسخ دادن به پاکتهای Setup ندارند در حالی که اندپوینت صفر این وظیفه را دارا می باشد. جدول 4-8 حالتهایی را که توسط اندپوینت های 1 و 2 استفاده می شوند نشان می دهد. جدول همچنین چگونگی استفاده برنامه تراشه از بیت استال که باعث می شود SIE در حالت های ACK IN و ACK OUT ، استال را بازگرداند.

جدول 3-8: حالت هایی که با اندپوینت صفر در رجیستر حالت مربوطه استفاده می شوند. اندپوینت صفر باید ترنزکشن های Setup را قبول کند
حالت
رمزگذاری Setup
پاسخ به ترنزکشن
حالت بعد
کاربرد عمومی

ورودی
خروجی
از ACK

NAK ورودی خروجی
0001
پذیرش
NAK
NAK
مشابه
انتقالی در حال انجام نیست. منتظر ترنزکشن setup می باشد.
فقط وضعیت خروجی
0010
پذیرش
استال
بررسی
مشابه
انتقال کنترلی خواندن، مرحله وضعیت، ارسال ACK در قابل دریافت پاکت داده صفربایتی با زنجیره داده صحیح.
استال ورودی خروجی
0011
پذیرش
استال
استال
مشابه
انتقالی در حال انجام نیست. منتظر ترنزکشن setup بعدی است.
چشمپوشی ورودی خروحی
0100
پذیرش
چشمپوشی
چشمپوشی
مشابه
انتقالی در حال انجام نیست. منتظر ترنزکشن setup بعدی است.
فقط وضعیت ورودی
0110
پذیرش
داده صفر بایتی
استال
مشابه
انتقال کنترلی نوشتن مرحله وضعیت، برای یک ترنزکشن ورودی، پاکت داده صفربایتی بازگردانده می شود.
NAK خروجی وضعیت ورودی
1010
پذیرش
داده صفر بایتی
NAK
مشابه
انتقال کنترلی نوشتن مرحله وضعیت، برای یک ترنزکشن ورودی، پاکت داده صفربایتی بازگردانده می شود.
ACK خروجی-NAK ورودی
1011
پذیرش
NAK
ACK
NA ورودی/ خروجی
ترنزکشن کنترلی نوشتن مرحله داده.
NAK ورودی- وضعیت خروجی
1110
پذیرش
NAK
بررسی
مشابه
انتقال کنترلی خواندن، مرحله داده یا وضعیت برای یک ترنزکشن، ورودی، داده را باز می گرداند. برای یک ترنزکشن خروجی در پاسخ به دریافت پاکت داده صفر بایتی با بیت زنجیره داده صحیح، ACK باز می گرداند.
ACK ورودی – وضعیت خروحی
111
پذیرش
داده
بررسی
NAK ورودی- وضعیت خروجی
انتقال کنترلی خواندن، مرحله داده یا وضعیت، برای یک ترنزکشن ورودی، داده را باز می گرداند. برای یک ترنزکشن خروجی در پاسخ به دریافت پاکت داده صفر بایتی با بیت زنجیره داده صحیح، ACK باز می گرداند.

جدول 4-8: حالتهایی که توسط اندپوینت 1 و 2 استفاده می شوند. اندپوینت های 1 و 2 ترنزکشن های Setup را قبول نمی کنند
حالت
رمزگذاری Setup
پاسخ به ترنزکشن
حالت بعد
کاربرد عمومی

ورودی
خروجی
از ACK

غیر فعال
0000
چشمپوشی
چشمپوشی
چشمپوشی
ـــ
اندپوینت غیر فعال است
NAK خروجی
1000
چشمپوشی
چشمپوشی
چشمپوشی
ـــ
اندپوینت خروجی آماده دریافت داده نیست
ACK خروجی (استال =0)
1001
چشمپوشی
چشمپوشی
ACK
ـــ
اندیوپنت خروجی ایست کرده است
ACK خروجی (استال =0)

استال
چشمپوشی
چشمپوشی
ـــ
اندپوینت خروجی ایست کرده است
NAK ورودی
1100
چشمپوشی
NAK
چشمپوشی
ـــ
NAL ورودی اندپوینت ورودی داده ای برای فرستادن ندارد
ACK ورودی (استال =0)
1101
چشمپوشی
داده
چشمپوشی
NAK ورودی
اندپوینت ورودی داده برای فرستادن دارد
ACK ورودی (استال =1)

چشمپوشی
استال
چشمپوشی
ـــ
اندپوینت ورودی ایست کرده است

کنترل و وضعیت اندپوینت
هر کدام از اندپوینت ها همچنین دارای یک رجیستر شمارنده اندپوینت هستند که حاوی اطلاعاتی درباره پاکت داده ای انتقال یافته یا در حال انتقال است. هر کدام از این رجیسترها دارای چهار بیت شمارنده، یک بیت زنجیره داده و بیت وجود داده، هستند. چهار بایت شمارنده، تعداد بایت های داده ترنزکشن را نگهداری می کند. در ترنزکشن ورودی، این مقدار مشخص می کند که چه تعداد بایت داده در ترنزکشن را نگهداری می کند. در ترنزکشن ورودی، این مقدار مشخص می کند که چه تعداد بایت داده در ترنزکشن بعدی فرستاده می شود، این تعداد بایت شامل بایت های CRC نمی شود. مقادیر مجاز بین صفر و هشت می باشند. در ترنزکشن های خروجی و Setup، این مقدار تعداد بایت هایی را که در آخرین ترنزکشن رسیده است مشخض می کند که این مقدار شامل دو بایت CRC نیز می شود. مقادیر مجاز بین 2 تا 10 می باشد. شمارنده خروجی و Setup تا هنگامی که برنامه تراشه رجیستر را بخواند قفل می گردد.
در ترنزکشن های خروجی و Setup اگر مقادیر CRC رسیده صحیح نباشند، مقدار بیت وجود داده یک می گردد.
بیت Data-toggle حالت تغییر مشخصه پاکت داده را تعیین می کند. در ترنزکشن های ورودی، برنامه تراشه این مقدار را تنظیم می کند و در ترنزکشن های خروجی و Setup این بیت را SIE تنظیم می نماید.
کنترل وضعیت USB
رجیستر کنترل وضعیت USB دارای دو بیت برای ارتباطات USB و چهار بیت برای ارتباط PS/2 یا USB و یک بیت برای ارتباط PS/2 می باشد. SIE بیت فعالیت باس را پس از تشخیص فعالیت بر روی باس یک می کند. برنامه تراشه می تواند از این بیت برای تصمیم گیری در رفتن دستگاه به حالت بیکاری استفاده کند. اگر این بیت بیشتر از 3 میلی ثانیه صفر باقی بماند، تراشه باید وارد حالت بیکاری شود.
بیت فعال ساز VREG قادر است که در خروجی VREG ولتاژ V 3/3 را فعال سازد. این خروجی برای مقاومت بالابر6 USB به D- در باس است. چون VREG تحت کنترل برنامه تراشه است، کد می تواند ولتاژ خروجی را برداشته یا حفظ کند تا اتصال یا جدا شدن دستگاه از باس را تشخیص دهد. امپدانس خروجی VREG حدود 20 اهم است بنابراین مقدار مقاومت باید K 3/1 اهم باشد تا با K 5/1 مرجع خصوصیات سازگار شویم.
بیت حالت ریست USB – بیت مد وقفه فعال شدن PS/2، تعیین می کند که وقفه USB داده شود یا اینکه فعالیت PSP داشته باشیم.
سه بیت کنترلی، برنامه تراشه را قادر می سازند که خطوط USB یا PS/2 را در وضعیت های خاصی تنظیم کنند، از جمله این وضعیت ها می توان از j،k و SE0 مربوط به USB نام برد. اگر قبلاً میزبان قابلیت Remote-wakup را فعال کرده باشد، برنامه کاربردی می تواند از وضعیت Force-k برای فرستادن سیگنال بازگشت که به میزبان می گوید دستگاه می خواهد ارتباط دوباره آغاز شود استفاده کند.
بیت فعال کردن PS/2 قادر است مقاومت بالابر داخلی که بین خطوط SDATA و SCLK است را برای استفاده ارتباط PS/2 فعال سازد.
رجیستر داده پورت 2، حالت چهار بیت فقط خواندنی را در یک پورت ورودی کمیک نگهداری می کند. دو بیت، حالت D+و D- در هنگام استفاده از USB یا حالت SCLK و SDATA در هنگام استفاده از PS/2 می باشند. دو بیت دیگر بیشتر مواقع می توانند به عنوان دو ورودی استفاده شوند. اگر مقاومت موجود بر روی خط D- از منبع ولتاژ خارجی برای راه اندازی استفاده کند و یا اینکه دستگاه از USB پشتیبانی نکند، از پایه VREG می توان به عنوان ورودی استفاده کرد که در این حالت وضعیت این بیت از طریق P2.0 قابل دسترسی است.
وقتی که ساعت داخلی فعال است، مرجع زمانی بر روی پایه XTALIN وجود نخواهد داشت و می توان از این پایه نیز به عنوان ورودی از طریق PS.1 استفاده کرد.
آخرین رجیستر مربوط به USB رجیستر فعال ساز وقفه های اندپوینت است، که وقفه ها را برای اندپوینت های صفر، 1 و 2 فعال می سازد. توضیحات مربوط به این رجیستر در زیر در بخش پردازش وقفه ارائه خواهد شد.
اصول راه انداز دستگاه
راه انداز دستگاه نرم افزاری است که برنامه کاربردی را قادر می سازد که به سخت افزار دستگاه دسترسی یابد. بعضی از راه انداز های دستگاه ها راه انداز کلاس هستند که می توانند با دستگا ه هایی که کاربرد مشابه دارند ارتباط برقرار کنند.
رها کردن برنامه های کاربردی از جزئیات
یک راه اندا دستگاه، برنامه کاربردی را از داشتن جزئیات درباره اتصالهای فیزیکی، سیگنال ها، پروتکل هایی که برای ارتباط با دستگاه لازم است، بی نیاز می کند. برنامه کاربردی نرم افزاری است که کاربر آن را راه می اندازد که شامل پردازش کننده های word و داده ها تا برنامه هایی با کاربرد خاص که سخت افزار ویژه ای را پشتیبانی می کند، می شوند.
یک راه انداز دستگاه کدهای برنامه کاربردی را قادر می سازد فقط با دانستن نام وسیله جانبی (مثل Laserjet hp) و یا کار آن (دسته بازی) بتواند با آن ارتباط برقرار کنند. احتیاج نیست که برنامه کاربردی آدرس فیزیکی پورتی را که وسیله جانبی له آن متصل شده بداند ( مانند آدرس h 378) یا اینکه سیگنال های تایید
متقابل که به وسیله جانبی نیاز دارد ( Strobe .Busy و غیره) را کنترل و نمایش دهد. برنامه کاربردی حتی نمی داند که یک دستگاه از مدار واسطه USB استفاده می کند یا مدار واسط دیگری. با توجه به اینکه جزئیات سخت افزاری در یک زبان سطح پایین تر وجود دارد.
وظیفه راه انداز دستگاه ترجمه ارتباط بین زبان سطح بالا برنامه کاربردی به کدهای ویژه سخت افزار می باشد. برنامه کاربردی از تابعهایی که سیستم عامل آنها را پشتیبانی می کند. برای ارتباط با راه انداز دستگاه استفاده می کند. کدهای ویژه سخت افزار نیز پروتکل لازم برای دسترسی به مدار وسیله جانبی را دارا هستند که شامل تشخیص حالت سیگنال های وضعیتی و استفاده از سیگنال های کنترلی در زمان لازم می باشد.
ویندوز دارای تابعهای کاربردی رابط با برنامه نویسان (API) است که برنامه کاربردی را قادر می سازد که با راه انداز دستگاه ارتباط برقرار کند. برنامه هایی که در زبانهای برنامه نویسی ویژه وال بیسیک++C/C و دلفی نوشته می شوند قادر به فراخوانی تابعهای API هستند سه تابعی که راه انداز دستگاه را قادر می سازد که از دستگاه USB بخواند و بنویسد عبارتند از DeviceIoControl. Write File, ReadFile
به منظور اینکه برنامه نویسی آسانتر و صحیح تر باشد، ویژوال بیسیک برای کارهای معمولی دارای کنترل هایی است به عنوان مثال، برنامه کاربردی می تواند با استفاده از موضوع Printer داده را به چاپگر و کنترل McComm بفرستد تا به دستگاهی که به پورت سریال RS-232 متصل است ارتباط برقرار کند. استفاده از این کنترل ها راه راحت تر و کم اشتباه تری برای تنظیم کردن پارامترها و تبادل اطلاعات می باشد. در پشت کد های کنترلی ممکن است تابعهای API وجود داشته باشند که با راه انداز از دستگاه ارتباط برقرار می کنند. اما موضوعهای کنترلی برنامه نویسان را از سرو کار داشتن با آنها راحت می کند.
ویژوال بیسیک موضوع کنترلی عمومی برای ارتباط با USB ندارد. نحوه برقراری ارتباط برنامه کاربردی با دستگاه USB بسته به راه انداز آن متفاوت خواهد بود. به عنوان نمونه، یک برنامه کاربردی ویژوال بیسیک می تواند از موضوع چاپگر برای ارتباط با چاپگر USB استفاده کند.
بعضی از راه اندازهای دستگاهها، راه اندازهای یکپارچه هستند که همه کارها از ارتباط با برنامه کاربردی گرفته تا خواندن و نوشتن به روی پورت یا آدرس ها ی حافظه که به سخت افزار دستگا متصلند، را به تنهایی انجام می دهند.
بعضی دیگر، که راه اندازهای ویندوز برای دستگاههای USB از این دسته اند. از مدل راه انداز از لایه ای استفاده می کنند که هر راه انداز یک بخش از وظیفه ارتباط را انجام می دهد. بالاترن لایه دارای راه انداز کاربردی است که ارتباط بین برنامه کاربردی و راه انداز باس را که زبان سطح پایین تری دارد، رهبری می کند در لایه پایین تر راه اندا
باس وجود دارد که ارتباط بین راه انداز کاربردی و سخت افزار، را رهبری می نماید. ممکن است یک یا چند راه انداز دیگر نیز ارتباط راه اندازی های کاربردی و باس را کاملتر کنند.
به طور کلی راه اندازهای لایه ای پیچیدگی بیشتری دارند اما لایه ای بودن باعث راحت تر شدن نوشتن راه اندازها می شود. دستگاهها ممکن است برای کارهای مشترکی که دارند، کدهای مشترکی داشته باشند. به علاوه، راه اندازهایی که ارتباط سخت افزار سیستم USB و ورودی ویندوز را برقرار می کنند، نویسندگان راه انداز را از تهیه مجدد آنها بی نیاز می کنند. نوشتن یک راه انداز دستگاه USB بسیار راحت تر از نوشتن راه اندازی است که همه جزئیات دسترسی به سخت افزار را دارا باشد
انواع استاندارد دستگاهها
بسیاری از وسایل جانبی، سازگار با کلاس های استاندارد هستند مانند، راه اندازهای دیسک، چاپگر ها، مودم ها، صفحه کلید ها و ماوس ها. همه این دستگاهها از طریق مدارهای واسط مختلف قابل دسترسی می باشند که شامل USB نیز می شود. به عنوان مثال، یک صفحه کلید ممکن است از مدارهای واسط قدیمی یا USB استفاده کند یا یک راه انداز دیسک می تواند از مدارهای واسط متفاوت از جمله SCST,ATAPI، پورت چاپگر، IEEE-1394 یا USB استفاده کند.
ویندوز برای انواع دستگاههای استاندارد دارای راه اندازهایی با نام راه اندازهای کلاس است وقتی که دستگاههای یک کلاس ممکن است مدارهای واسط متفاوتی داشته باشند، راه اندازهای مکملی می توانند خصوصیات مختلف مدار واسط را پشتیبانی کننند. اگر دستگاه دارای قابلیتهای بیشتر از راه انداز کلاس است، یک راه انداز فیلتر ویژه دستگاه می تواند آنها را در صورت لزوم پشتیبانی کند.
دستگاههای شخصی
بعد از وسایل جانبی، دستگاههای شخصی هستند که به منظور استفاده در برنامه های کاربردی ویژه ای طراحی می شوند مانند واحدهای اکتساب داده، کنترل کننده های موتور و وسایل تست ویندوز هیچ آگاهی از این دستگاهها ندارد و به این ترتیب راه اندازهای خاصی نیز برای آنها نخواهد داشت. دستگاههایی شبیه به اینها باید از راه اندازهای شخصی استفاده کنند و یا آنکه طوری شوند که قابل تطبیق با کلاس خاصی باشند.
راه انداز دستگاه
در یک تعریف کلی، راه اندازی دستگاه یک سری کد است که جزئیات ارتباط بین سخت افزار دستگاه و CPU را به عهده دارد. حتی ممکن است یک زیر برنامه کوچک در برنامه کاربردی نقش راه انداز از دستگاه را داشته باشد. در ویندوز کدها برای راه انداز ها که شامل راه انداز های USB نیز می شود. از کدهای برنامه کاربردی متفاوت هستند، چون سیستم عامل کدهای راه انداز را با زبان سطح پایین تری از برنامه های کاربردی اجازه می دهد.
مدهای کابر و هسته
در ویندوز، کدها با یکی از دو مد زیر راه اندازی می شوند: کاربر یا هسته. که هر کدام امتیازهای مختلفی را برای دسترسی به حافظه و دیگر منابع سیستم ایجاد می کنند. برنامه کاربری باید در مد کاربر راه اندازی شود. بیشتر راه اندازها، از جمله راه اندازهای USB باید در مد هسته راه اندازی شوند، با این وجود که دستگاههای USB ممکن است راه اندازهای مکمل مد کار بر نیز داشته باشند.
در مدر کاربر، ویندوز دسترسی به حافظه و دیگر منابع را محدود می کند. ویندوز اجازه نمی دهد که برنامه کاربردی به فضا حافظه ای که سیستم عامل برای حفاظت از آن طراحی شده است، دسترسی داشته باشد. این موضوع کامپیوتر را قادر می سازد که چندین برنامه را در یک زمان راه اندازی کند، بدون اینکه برای هم مزاحمت ایجاد کنند. در تئوری اگر یک برنامه کاربردی خراب شود روی برنامه های دیگر اثر نمی گذارد. البته در حقیقت این موضوع همیشه صحیح نیست. در پنتیوم و پروسسورهای X86، مد کاربر مربوط به مد Ring3 پردازنده است.
در مد هسته ای کدها در دسترسی به منابع سیستم، که شامل توانایی اجرای رهبری حافظه و کنترل دسترسی به پورت های I/O می شود محدودیت ندارند. در پنتیوم و دیگر پردازنده های X86، مد هسته ای مربوط به مد Ring0 پردازنده می باشد.
در ویندوز 98 و Me برنامه های کاربردی می توانند به طور مستقیم و بدون راه اندازهای سطح پایین به پورت های I/o را دارند.
برنامه های کاربردی و راه اندازها هر کدام از زبان خاص خود برای ارتباط با سیستم عامل استفاده می کنند. برنامه کاربردی از توابع Win32API بهره می برد و راه اندازها برای برقراری ارتباط با یکدیگر از فراخوانی ساختاری با نام پاکتهای خواسته I/O (IRPs)7 استفاده می کنند.
ویندوز یک مجموعه از IRP را تعریف می کند که هر راه اندازی آنها را به کار برد. هر IRP یک عمل ورودی یا خروجی از خواستار می شود. یک راه انداز کاربردی برای دستگاه USB از IRP برای انتقال ارتباط از یا به راه انداز باس استفاده می کند. راه اندازهای باس درون ویندوز موجود هستند و احتیاجی نیست توسط برنامه نویسان برنامه های کاربردی یا نویستندگان راه انداز دستگاه طراحی شوند.

شکل 1-10, USB از مدل راه اندازهای لایه ای تحت ویندوز با راه اندازهای مجزا برای دستگاهها و باس ها استفاده می کند.
مدل راه انداز Win32
راه اندازها دستگاه USB تحت ویندوز باید با مدل راه اندازی Win32 مطابقت کنند که توسط مایکرو سافت برای ویندوز 98 و بالاتر که شامل ویندوز 2000 و Me می شود، تعریف شده است. این راه اندازها با نام راه اندازهای WDM شناخته می شوند که دارای حروف توسعه sys هستند( فایل های نوع دیگر نیز ممکن است از sys استفاده کنند).
مانند راه اندازهای سطح پایین دیگر، راه اندازهای WDM دارای تواناییهایی هستند که برنامه های کاربردی ندارند به این دلیل که راه انداز از طریق زبان سطح پایین تر با امتیاز های بیشتر باسیستم عامل ارتباط برقرار می کند. یک راه انداز WDM این توانایی را دارد که به یک برنامه کاربردی اجازه دسترسی به دستگاه را بدهد و برنامه دیگر این اجازه را ندهد. به عنوان مثال، راه انداز دسته بازی ممکن است اجازه استفاده در همه برنامه های کاربردی را داشته باشد یا اینکه فقط یک برنامه کاربردی امکان استفاده از آن را داشته باشد. ویژگی دیگری که ویندوز برای راه اندازهای WDM قرار داده است انتقال DMA و پاسخ به وقفه های سخت افزاری است.

مدل های راه انداز در ویندوزهای مختلف
مدل راه اندازی Win32 یک مدل راه اندازی معمولی را برای همه دستگاههای تحت ویندوز 98 و یا بالاترفراهم می کند. نسخه های قدیمی تر ویندوز از مدل های متفاوتی برای راه اندازهای دستگاه استفاده می کردند. ویندوز 95 از VxD ها (virtual device drivers) استفاده می کرد. ویندوز NT4 از نوعی راه انداز بهره می برد که راه اندازهای مد هسته ای نامیده می شدند. طراحانی که می خواستند هر دو ویندوز 95 و NT را پشتیبانی کنند مجبور بودند که برای هر کدام راه انداز مجزایی را تهیه کنند. اما یک راه انداز WDM می تواند تحت ویندوز 98 و ویندوز 2000 کار کند.
راه اندازهای باس USB که درون ویندوز است از نوع WDM هستند. با اینکه در ویندوز 98 پشتیبانی از Vx1) ها ادامه یافته است اما دستگاههای USB باید از راه اندازهای کاربردی WDM استفاده کنند چون این راه اندازهای کاربردی باید با راه اندازهای باس WDM ارتباط برقرار کنند.
مدل راه اندازی Win32 کاملا جدید نیست. اساس یک راه انداز WDM راه انداز مد هسته ای مربوط به NT به همراه ویژگیهای Plug-and-Play و مدیریت توان ویندوز 95 می باشد. آخرین ویرایش ویندوز 98 (نسخه OSR2.1 و بالاتر) تا حدی راه اندازهای WDM را پشتیبانی می کرد. این ویرایش به صورت جزئی در اختیار خریداران نبود اما فقط فروشندگانی که روی کامپیوترهای فروشی خود، نرم افزار نصب می کردند به آن دسترسی داشتند. همراه با آمدن ویندوز 98 پشتیبانی از WDM ها افزایش و پیشرفت کرد. چگونه ممکن بود که دو سیستم عاملی که قبلا احتیاج به راه اندازهای متفاوت داشتند اکنون از یک راه انداز استفاده کنند؟ ویندوز 98 دارای راه اندازی به نام ntKernvxd بود که توسط آن راه اندازهای WDM تصور می کردند که با سیستم عاملی شبیه NT ارتباط برقرار می کنند. همه راه اندازهای WDM که در ویندوز 98 کار می کردند احتیاج به این راه انداز دارند.
زبانهای برنامه نویسی
برنامه نویسان برنامه های کاربردی می تواننداز زبانهای برنامه نویسی همچون ویژوال بیسیک، دلفی یا ویژوال ++ ) استفاده کنند. اما برای نوشتن یک راه انداز برای دستگاه USB شما احتیاج به ابزاری دارید که قابلیت کامپایل راه انداز WDM را داشته باشد و این به معنای استفاده از ویژوال C++ است. تنها استثناء جعبه های ابزار راه انداز هستند که یک راه انداز عمومی را تهیه می کنند و احتیاجی به برنامه نویسی ندارند یا به شما اجاز می دهند که از مفسرهای دیگر C یا دلفی برای استفاده اختصاصی از یک راه انداز عمومی استفاده کنید.
راه اندازهای لایه ای
در مدل راه اندازهای لایه ای که برای ارتباط با USB استفاده می شوند، هر لایه انجام بخشی از پروسه ارتباط را به عهده می گیرد. تقسیم کردن ارتباط به لایه های مختلف کار موثری خواهد بود چون دستگاههای متفاوت دارای یک سری وظایف مشترک هستند که می توانند برای انجام آنها از یک نرم افزار مشابه استفاده کنند. به عنوان مثال، همه انواع دستگاهها ممکن است از USB استفاده کنند. پس بهتر است که یک مجموعه از راه اندازها برای کار با ارتباطهای ویژه USB که برای همه آنها مشترک است. تولید شود. قرارگرفتن این راه اندازها در ویندوز به این معنی خواهد بود که دیگر فروشندگان احتیاج به تهیه کردن آن ندارند.
لایه های راه انداز USB
قسمتی از ویندوز که ارتباط با دستگاه را راهبری می کند. زیر سیستم I/I/O است. زیر سیستم دارای چندین لایه است که هر کدام یک یا چند راه انداز برای کارهای مرتبط با خود دارند. خواسته ها از یک لایه به لایه بعد با توالی ارسال می شوند. یکی از قسمتهایی که در زیر سیستم I/O قرار دارد، زیر سیستم USB است که دارای راه اندازهایی است که ارتباطهای ویژه USB مربوط به همه دستگاهها را رهبری می کند.
مجموعه ای از پروتکل ها که توسط راه اندازها استفاده می شود. پشته نامیده می شود. شما می توانید لایه ها را به صورت پشته هایی که یکی روی دیگر است تصور کنید. برنامه های کاربردی، بالاترین پشته است و سخت افزار USB پایین ترین پشته خواهد بود.

راه انداز کاربردی
یک راه انداز کاربردی، برنامه کاربردی را قادر می سازد تا توسط تابعهای API با دستگاه USB صحبت کند. تابعهای API بخشی از زیرسیستم Win32 ویندوز هستند که مسئولیت تابعهای کاربر مانند راه اندازی برنامه کاربردی، رهبری ورودی کاربر از طریق صفحه کلید و ماوس و خروجیهای نمایشی روی صفحه نمایش را نیز به عهده دارد. برای ارتباط با دستگاه USB برنامه کاربردی احتیاجی ندارد که همه چیز را درباره پروتکل USB بداند.
راه انداز کاربردی همچنین از نحوه ارتباط با راه اندازهای سطح پایین که سخت افزار را کنترل می کنند. آگاه است شکل 2-10 چگونگی این کارها را در ارتباط با USB نشان می دهد. عموما از راه انداز کاربردی با لفظ راه انداز دستگاه یاد می شود با توجه به اینکه یک راه انداز دستگاه کامل با شامل بودن هر دو راه انداز باس و کاربردی شکل می گیرد. راه انداز کاربردی ممکن است راه انداز کلاس باشد یا راه انداز ویژه دستگاه وقتی که یک دستگاه یا زیر کلاس احتیاج به خصوصیاتی بیشتر از آن چیزی که یک راه انداز کلاس انجام می دهد دارد راه اندازهای مکملی که راه اندازهای فیلتر نامیده می شوند این قابلیتها را به آن اضافه خواهند کرد. یک راه انداز فیلتر فوقانی در بالای راه انداز کلاس قرار می گیرد و خواسته های برنامه کاربردی قبل از رسیدن به راه اندازکلاس به این راه انداز ارسال می شود. یک راه انداز فیلتر تحتانی نیز بین راه انداز کلاس و راه انداز باس مقیم می شود راه انداز کلاس ممکن است خواسته های خود را به راه انداز فیلتر تحتانی بفرستد که آن هم آنها را به سمت راه انداز باس عبور می دهد. یک راه انداز فیلتر تحتانی می تواند یک راه انداز کلاس را قادر سازد تا مدارهای واسط مختلفی را پشتیبانی کند. به عنوان مثال، ویندوز راه اندازی دارد که راه انداز کلاس HID را قادر می سازد که با راه انداز باس USB ارتباط برقرار کند.
راه اندازهای باس
یک راه انداز باس USB از راه انداز هاب ریشه، راه انداز کلاس باس و راه انداز کنترلر میزبان استفاده می کند.
راه انداز هاب ریشه شناسایی کردن پورت ها و به طور کلی ارتباط بین راه اندازهای دستگاه و راه انداز کلاس باس را به عهده دارد. راه انداز کلاس باس سرشماری، انرژی باس، ترنزکشن های USB و ارتباط بین راه انداز هاب ریشه و راه انداز کنترلر میزبان را در دست دارد. راه انداز کنترلر میزبان، سخت افزار کنترلر میزبان را قادر می سازد که با نرم افزار سیستم USB ارتباط برقرار کند. کنترلر میزبان به باس متصل می شود. راه انداز کنترلر میزبان از راه انداز کلاس – باس مجزاست چون ویندوز از کنترل کننده های میزبان متفاوتی پشتیبانی می کند که هر کدام راه انداز مخصوص به خود را دارند.
راه اندازهای باس بخشی از ویندوز هستند و نویسندگان برنامه های کاربردی و راه اندازهای دستگاه احتیاجی به دانستن جزئیات نحوه کار آنها ندارند و در نتیجه مایکروسافت مطالب کمی درباره آنها تهیه کرده است. اگر می خواهید بیشتر از طرز کار این زبانهای سطح پایین آگاه شوید یک منبع اطلاعاتی کدها و مقالات و پروژه های USB لینوکس است.

1- Directive
2- Dos
3- carry
4-Overflow
5- ASCII hex
6- Pull-up
7 -I/O Request Packets
—————

————————————————————

—————

————————————————————

1

2


تعداد صفحات : 46 | فرمت فایل : WORD

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