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 دستور ترجمه شده است.
بیشتری را ارائه میدهند.
مانند اینکه نتیجه دستور add دارای سرریز[3] بوده است یا خیر یا اینکه نتیجه صفر شده است یا نه.
تراشه از سه حالت آدرس دهی پشتیبانی میکند که چگونگی استفاده از عملوند را برای دستور مشخص میکند.
همه دستورات از هر سه حالت آدرس دهی پشتیبانی نمیکنند.
در آدرس دهی سریع، دستورات از مقدار عملوند مستقیماً استفاده میکنند.
این دستور از آدرس دهی سریع برای جمع کردن 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 در قالببندی هگزاسکی، هر بایت با دو کد اسکی نمایش داده میشود که هر کد یک کاراکتر هگزادسیمال را نشان میدهد.
مثلاً، بایت h 80 با کدهای اسکی h 38 برای 8 و h30 برای صفر نمایش داده میشود.
استفاده از قالببندی هگزاسکی شما را قادر میسازد که به راحتی در ویرایشگر متنی مقادیر بایت را ببینید (مثلاً 80).
وقتی که کد در RAM برد ارتقا ذخیره شود.
RAM شامل بایتهای باینری میشود که توسط بایتهای هگزاسکی نشان داده شده است.
مثلاً، h 80 به 10000000 در باینری ترجمه میگردد.
test.hex کدهای اسمبلی در قالببندی هگزاینتل میباشد.
بسیاری از برنامهریزان EPROMها از جمله Hi-Lo شرکت سیپرس، از این قالببندی پشتیبانی میکنند.
کیت ارتقاء میتواند به جای قالببندی rom.
از این قالببندی استفاده کند.
قالببندی هگزاینتل از کاراکترهای هگزاسکی و اطلاعات آدرس دهی استفاده میکند که در اینجا دادههایی که در یک خط فایل hex.* موجود است را میبینید.
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 حاوی اشارهگرهای وقفهای هستند که وقتی یک از یازده وقفه تراشه اتفاق میافتد، آدرسی را که میکروکنترلر باید به آنجا پرش کند مشخص مینمایند.
در اینجا مثالی از جدول اشارهگرهای برنامه تراشه آمده است.
هر اشارهگر وقفه، به آدرسی که عملوند آن مشخص میکند پرش مینماید.
وقفههایی که استفاده نمیشوند، نباید اتفاق بیفتد اما برنامه تراشه باید شامل پرشهایی برای این وقفهها باشد.
زیر برنامه سرویس وقفه (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 را قبول کند جدول 4-8: حالتهایی که توسط اندپوینت 1 و 2 استفاده می شوند.
اندپوینتهای 1 و 2 ترنزکشنهای Setup را قبول نمیکنند کنترل و وضعیت اندپوینت هر کدام از اندپوینتها همچنین دارای یک رجیستر شمارنده اندپوینت هستند که حاوی اطلاعاتی درباره پاکت دادهای انتقال یافته یا در حال انتقال است.
هر کدام از این رجیسترها دارای چهار بیت شمارنده، یک بیت زنجیره داده و بیت وجود داده، هستند.
چهار بایت شمارنده، تعداد بایتهای داده ترنزکشن را نگهداری میکند.
در ترنزکشن ورودی، این مقدار مشخص میکند که چه تعداد بایت داده در ترنزکشن را نگهداری میکند.
در ترنزکشن ورودی، این مقدار مشخص میکند که چه تعداد بایت داده در ترنزکشن بعدی فرستاده میشود، این تعداد بایت شامل بایتهای 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 را فعال سازد.
این خروجی برای مقاومت بالابر 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) استفاده می کنند.
ویندوز یک مجموعه از IRP را تعریف می کند که هر راه اندازی آنها را به کار برد.
هر IRP یک عمل ورودی یا خروجی از خواستار می شود.
یک راه انداز کاربردی برای دستگاه USB از IRP برای انتقال ارتباط از یا به راه انداز باس استفاده می کند.
راه اندازهای باس درون ویندوز موجود هستند و احتیاجی نیست توسط برنامه نویسان برنامه های کاربردی یا نویستندگان راه انداز دستگاه طراحی شوند.
شکل 1-10, USB از مدل راه اندازهای لایه ای تحت ویندوز با راه اندازهای مجزا برای دستگاهها و باس ها استفاده می کند.
مدل راه انداز Win32 راه اندازها دستگاه USB تحت ویندوز باید با مدل راه اندازی Win32 مطابقت کنند که توسط مایکرو سافت برای ویندوز 98 و بالاتر که شامل ویندوز 2000 و Me می شود، تعریف شده است.
این راه اندازها با نام راه اندازهای WDM شناخته می شوند که دارای حروف توسعه sys هستند( فایل های نوع دیگر نیز ممکن است از sys استفاده کنند).