بخشی از مقاله

مدارهای واسط موس PS/2
این مقاله در سال 2001 توسط آدام چاپمن نوشته شده

پروتکل / مدارهای واسط الکترونیکی :
موس PS/2 همان پروتکل صفحه کلید PS/2 را به کار می گیرد . در راهنمای فنی IBM منتشرشده ، ولی من آگاهی در مورد جریان انتشار رسمی این استاندارد ندارم . به هر حال شما برای اطلاعات مفصل تر که من در مورد پروتکل آن جمع آوری نموده ام این جارا کلیک کنید .

ورودیها ، تجزیه پذیری و تعیین مقیاس :
موس PS/2 استاندارد این ورودیها را در بر میگیرد : حرکت به چپ و راست X ، حرکت به بالا و پایین Y ، کلید چپ ، کلید وسط ، کلید راست . موس این ورودی ها را با یک فرکانس منظم میخواند و شمارنده های مختلف را update کرده و حرکت و حالتهای کلید را مشخص میکند ( flags ) . ابزار اشاره گر PS/2 ی زیادی وجود دارند که شامل ورودی های اضافی و گزارش داده های متفاوت با آنچه در این مقاله شرح داده شده میباشند . یک توسعه کلی پوشش بعدی من در این سند Microsoft Intellimouse میباشد که شامل در بر داشتن ورودیهای استاندارد ی همچون چرخ گردان و دو کلید اضافه میباشد .

موس استاندارد شامل دو شمارنده میباشد که اثر حرکترا نگه می دارد : شمارنده حرکت x و شمارنده حرکت y . اینها مکمل 2 با ارزش 9 بیتی تعریف میشوند ، و هر یک دارای یک overflow flag مرتبط هستند . ظرفیت هایشان بسته به حالت سه کلید موس است که به سیستم در شکل یک بسته داده تغییرمکان سه بایتی فرستاده میشود ( همانطور که در بخش بعدی شرح داده شده .) شمارنده های حرکت ، میزان حرکتی که از آخرین بسته داده حرکتی رخ داده که به سیستم فرستاده شده بود را نمایش میدهند.


هنگامی که موس ورودیهایش را میخواند ، حالت رخ داده کلیدهایش را ذخیره میکند و سپس حرکت را چک میکند . اگر حرکت رخ داده بود ، به شمارنده های حرکتی x و یا y اضافه یا کم میکند . اگر هر یک از شمارنده ها overflow شد ،overflow flag مختص آن راset = 1 قرار میدهد . پارامتری که میزان افزایش و کاهش شمارنده حرکت را تعیین میکند resolution میباشد . Resolution بصورت پیش فرض 4 count/mm میباشد و سیستم میتواند با استفاده ازدستور "Set Resolution" (0xE8) مقدار آنها را تغییر دهد .


این یک پارامتر است که بر روی شمارندههای تغییر مکان اثر نمیگذارد ولی بر روی ارزش یک مقدار گزارش شده از این شمارنده ها اثر میگذارد .بصورت پیش فرض موس از مقیاس 1:1 استفاده میکند ، که روی تغییر مکان گزارش شده موس تاثیری نمیگذارد . بهر حال میزبان میتواند مقیاس 2:1 را با فرستادن دستور "Set Scaling 2:1" (0xE7) انتخاب کند . اگر مقیاس 2:1 فعال شد موس الگوریتم زیر را برای فرستادن محتویات شمارنده ها به سیستم به کار خواهد برد .

Movement Counter Reported Movement
0 0
1 1
2 1
3 3
4 6
5 9
N > 5 2 * N


بسته داده تغییر مکان :
موس استاندارد PS/2 اطلاعات تغییر مکان و کلید را با استفاده از بسته 3 بایتی (4) به سیستم ارسال میکند .


Byte 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Y overflow X overflow Y sign bit X sign bit Always 1 Middle Btn Right Btn Left Btn

Byte 2 X Movement

Byte 3 Y Movement

شمارنده های تغییر مکان 9 بیتی مکمل دو و عدد صحیح هستند ، جایی که مهمترین بیت نمایش داده میشود به عنوان یک بیت علامت در بایت 1 از بسته داده تغییر مکان است . این شمارنده ها زمانی که موس ورودیهارا خوانده و تغییر مکان رخ داده را یافته update میشوند . ارزش آنها مقدار تغییر مکان رخ داده از آخرین بسته داده تغییر مکان ارسال شده به سیستم میباشد . ( یعنی ، بعد از هر بسته ارسال شده به میزبان شمارنده های تغییر مکان 0 = reset میشوند . ) رنج مقادیری که با شمارنده های تغییر مکان میتواند بیان شود از 225- تا 225+ میباشد . اگر از این رنج تجاوز کند ، بیت overflow ی اختصاص داده شده 1 set = میشود و شمارنده نمی تواند کم یا زیاد شود تا زمانی که reset = 0 شود .


چنانچه پیشتر ذکر شد ، شمارندههای تغییر مکان هر زمان یک بسته داده تغییر مکان با موفقیت به سیستم ارسال شود reset = 0 می شوند . آنها همچنین بعد از اینکه موس هر دستور غیر از دستور 0xFE از سیستم دریافت کند reset = 0 میشوند .

مدهای عملیات :
گزارش داده مطابق با مدی که موس فعالیت میکند می با شد. آنها 4 مد عملیات استاندارد هستند .
• Reset - موس در power-up یا بعد از دریافت فرمان "Reset" ( 0xFF ) وارد مد Reset می شود .
• Stream - این مد پیش فرض است و این این مدی است که اکثر نرم افزارهای موس از آن استفاده می کنند .( بعد از اتمام اجرای Reset )
اگر سیستم قبلا ً موس را در مد Remote قرار داده ، میتواند مجددا ً موس را در مد Stream قرار دهد .


• Remote - Remote در بعضی از موقعیتها مفید است و می توان با ارسال فرمان Set "Remote Mode" ( 0xF0 ) وارد آن شد .
• Wrap - این مد خصوصا ً مفید نیست بجز برای تست وجود ارتباط بین موس و سیستم .
میتوان با ارسال دستور "Set Wrap Mode" ( 0xEC ) به موس به مد Wrap وارد شود .
برای خروج از مد Wrap ،سیستم باید دستور "Reset" ( 0xFF) یا دستور "Reset Wrap Mode" ( 0xEC) را صادر کند . اگر دستور"Reset" ( 0xFF) ارسال شد موس وارد مد Reset خواهد شد . اگر دستور "Reset Wrap Mode" ( 0xEC) ارسال شد موس وارد مد قبلی Wrap خواهد شد .
(توجه : موس همچنین میتواند وارد مد های عملیاتی توسعه یافته بشود . همانطور که قبلا ً در این مقاله توضیح داده شد بود . به هر حال این از مشخصات موس PS/2 استاندارد نیست .)

Reset Mode
موس در power – on یا در پاسخ به فرمان "Reset" ( 0xFF) وارد مد Reset می شود . بعد از وارد شدن به این مد ، موس خود یک تست تشخیص که اشاره میکند به BAT (تست اطمینان پایه) انجام میدهد و ارزشهای پیش فرض زیر را قرار می دهد :
• سرعت نمونه گیری – 100 نمونه بر ثانیه
• Resolution – 4 counts/mm
• مقیاس – 1:1
• غیر فعال شدن گزارش داده .


سپس کد تکمیلی BAT یا 0xAA ( موفقیت BAT ) یا 0xFC ( خطا ) را ارسال میکند . اگر سیستم یک پاسخ بجز 0xAA دریافت کند ممکن است power موس به جریان افتد و باعث شود که موس reset شده و دوباره BAT را اجرا کند . به دنبال کد تکمیلی BAT ( 0xFC یا 0xAA ) ، موس device ID 0x00 را ارسال میکند . مقاله ای خواندم که می گفت سیستم تا دریافت یک device ID انتقال هیچ داده ای را فرض نمی کند . به هر حال فهمیدم که بعضی از BIOS ها فرمان "Reset" ( 0xFF) را فورا ً به دنبال دریافت 0xAA بعد از یک power - on reset ارسال خواهد کرد . بعد از اینکه موس device ID را به سیستم فرستاد به مد Stream وارد خواهد شد . توجه داشته باشید که یکی از مقادیر پیش فرض که بوسیله موس تنظیم می شود "غیر فعال شدن گزارش داده" می باشد . این بدان معناست که موس هیچ بسته داده حرکتی را به سیستم نخواهد فرستاد مگر زمانی که دستور "Enable Dtata Reporting" ( 0xF4 ) را دریافت کند .


Stream Mode
در مد Stream ، موس داده تغییر مکان را زمانی ارسال میکند که تغییر مکان را آشکار کرده و یا حالت یک یا چند کلید موس تغییر کرده باشد . ماکزیمم سرعتی که این داده ها گزارش می شوند میتواند به عنوان سرعت نمونه شناخته شود .


رنج این پارامتر از 10 نمونه در ثانیه تا 200 نمونه در ثانیه میباشد . مقدار پیش فرض آن 100 نمونه بر ثانیه است و سیستم میتواند مقدار آن را با استفاده از دستور "Set Sample Rate" (0xF3 ) تغییر دهد .

Remote Mode
در این مد موس ورودیها را خوانده و شماره ها و فلگها را با سرعت نمونه برداری رایج update میکند . ولی فقط زمانی سیستم از تغییر مکان (و تغییر حالت کلید) با خبر میشود که تقاضای اطلاعات از طرف سیستم مطرح شده باشد . سیستم این کار را با صادر کردن دستور "Read Data" ( 0xEB ) انجام می دهد . پس از دریافت این دستور ، موس یک بسته داده تغییر مکان ارسال و شمارنده های تغییر مکان را reset خواهد کرد .

 

Wrap Mode
این یک مد جواب دادن است که در هر بایت دریافت شده بوسیله موس به سیستم پس فرستاده میشود . حتی اگر بایت نمایش داده شده یک دستور معتبر باشد موس به آن دستور پاسخی نخواهد داد – فقط برای جواب بایت را به سیستم بر می گرداند . دو استثناء برای آن وجود دارد : دستور "Reset" ( 0xFF) و دستور "Reset Wrap Mode" ( 0xEC) موس این دستورات را معتبر تلقی می کند و آنها را به سیستم بر نمی گرداند .


Intellimouse Extension
یک نوع توسعه یافته موس استاندارد PS/2 ، Microsoft Intellimouse می باشد . که در مجمود شامل پنج کلید موس و سه محور تغییر مکان است .(راست – چپ ، بالا – پایین و چرخ دوار) . این مشخصات اضافی نیاز به استفاده از 4 بایت برای بسته داده تغییر مکان دارد ، بیشتر از 3 بایت که برای بسته استاندارد میباشد .

چون راه اندازهای موسPS/2 استاندارد نمی توانند این فرمت بسته را تشخیص دهند ، Microsoft Intellimouse نیاز به کاری دقیقا ً مشابه با یک موس PS/2 استاندارد دارد بجز اینکه راه اندازی آن فرمت بسته توسعه یافته را پوشش دهند . در این راه اگر یک Microsoft Intellimouseاستفاده شود در یک کامپیوتر که فقط موس PS/2 استاندارد را پوشش می دهد Microsoft Intellimouse هنوز عمل خواهد کرد ، بجز برای چرخ دوار و کلیدهای چهارم و پنجم .


عملیات Microsoft Intellimouse شبیه یک موس استاندارد PS/2 می باشد ( یعنی از 3 بایت برای بسته داده تغییرمکان استفاده میکند ، در هر مسیر همانند یک موس استاندارد PS/2 به تمام دستورات در هر مسیر پاسخ میدهد ، و یک device ID 0x00 را گزارش میدهد .) برای ورود به مد چرخ گردان سیستم دستورات متوالی زیر را ارسال میکند :
سرعت نمونه برداری را 200 قرار بده
سرعت نمونه برداری را 100 قرار بده
سرعت نمونه برداری را 80 قرار بده


سپس سیستم دستور "Get device ID" ( 0xF2 ) را صادر می کند و منتظر پاسخ می ماند . اگر موس PS/2 استاندارد ( یعنی نه Intellimouse ) وصل بود ، با یک device ID 0x00 پاسخ خواهد داد . در این حالت سیستم چگونگی اینکه موس دارای چرخ گردان است را خواهد شناخت و آن را به عنوان موس PS/2 استاندارد تلقی خواهد کرد .


به هر حال اگر یک Microsoft Intellimouse وصل باشد ، با ID 0x03 پاسخ خواهد داد . این به سیستم میگوید که ابزار اشاره گر متصل دارای یک چرخ گردان است و بنابراین سیستم انتظار خواهد داشت موس از بسته داده ی تغییر مکان چهار بایتی استفاده کند :

Byte 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Y overflow X overflow Y sign bit X sign bit Always 1 Middle Btn Right Btn Left Btn

Byte 2 X Movement

Byte 3 Y Movement

Byte 4 Z Movement


تغییر مکان Z یک عدد مکمل 2 می باشد که نشاندهنده تغییر مکان چرخ گردان از آخرین داده گزارش شده است . اعتبار این مقادیر در رنج 8- تا 7+ می با شد . این بدان معنی است که عدد حقیقتا ً با چهار بایت کم ارزش نمایش داده میشود . چهار بایت بالا تر به عنوان بایتهای توسعه یافته به کار می روند . برای وارد شدن به مد چرخ گردان کلید 5+ ، سیستم دستورات متوالی زیر را ارسال می کند.


سرعت نمونه برداری را 200 قرار بده
سرعت نمونه برداری را 100 قرار بده
سرعت نمونه برداری را 80 قرار بده
سپس سیستم دستور "Get device ID" ( 0xF2 ) را صادر کرده و منتظر پاسخ می ماند . یک Microsoft Intellimouse با یک device ID 0x04 پا سخ خواهد داد ، پس از بسته داده ی تغییر مکان 4 بایت زیر استفاده می کند :

Byte 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Y overflow X overflow Y sign bit X sign bit Always 1 Middle Btn Right Btn Left Btn

Byte 2 X Movement

Byte 3 Y Movement

Byte 4 Always 0 Always 0 5th Btn 4th Btn Z3 Z2 Z1 Z0


Z0 – Z3 یک عدد مکمل 2 می باشد که میزان تغییر مکان رخ داده از آخرین گزارش داده را نشان می دهد . رنج ارزش معتبر آن از 8- تا 7+ می باشد .
کلید چهارم : 1 = کلید چهارم موس فشار داده شده ؛ 0 = کلید چهارم موس رها شده .
کلید پنجم : 1 = کلید پنجم موس فشار داده شده ؛ 0 = کلید پنجم موس رها شده .
شما ممکن است موسهایی با دو چرخ گردان دیده باشید – یکی عمودی و دیگری افقی . این موسها از فرمت بسته داده ی Microsoft Intellimouse استفاده می کنند . همان گونه که قبلا ً ذکر شد ، اگر چرخ عمودی به بالا بچرخد شمارندهZ یکی یکی افزایش می یابد و اگر چرخ به پایین بچرخد شمارنده Z یکی یکی کاهش می یابد .


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

قرار دادن دستور:
موارد زیر تنها دستوراتی هستند که ممکن است به موس ارسال شوند . اگر موس در مد Stream باشد ، سیستم باید قبل از فرستادن هر دستوری گزارش داده را غیر فعال کند ( دستور 0xF5 ).
• 0xFF ( Reset ) – موس با "acknowledge" ( 0xFA ) به این فرمان پاسخ میدهد سپس وارد مد reset می شود .


• 0xFE ( Resend ) – سیستم هر زمان که داده نا معتبر از موسی دریافت کرداین دستور را ارسال می کند . موس با ارسال دوباره آخرین (2) بسته (3) به سیستم پاسخ میدهد . اگر موسی به دستور "Resend" با بسته نا معتبر دیگری پاسخ داد سیستم میتواند دستور "Resend" دیگری صادر کند یا یک دستور "Error" صادر کند ، سیکل منبع تغذیه موس را برای Resetموس انجام دهد یا از برقراری ارتباط جلوگیری کند ( با قرار دادن 0 روی خط clock ) . فعالیت تفسیر شده مربوط به سیستم است .


• 0xF6 ( Set Defaults ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس مقادیر زیر را Load می کند :
سرعت نمونه برداری = 100 ، Resolution = 4 counts/mm ، مقیاس = 1:1 ، غیر فعال کردن گزارش داده . سپس موس شمارنده های تغییر مکان را reset میکند و به مد Stream وارد می شود .


• 0xF5 ( غیر فعال کردن گزارش داده ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس گزارش داده را غیر فعال و شمارنده های تغییر مکان را reset می کند . گزارش داده تنها فعالیت مد Stream می با شد و نمونه برداری را غیر فعال نمی کند . غیر فعال کردن فعالیتهای Stream همانند مد Remote می با شد .
• 0xF4 ( فعال کردن گزارش داده ) - موس با "acknowledge" ( 0xFA ) پاسخ میدهد سپس گزارش داده را فعال و شمارنده های تغییر مکان را reset می کند.این دستورمیتواند تا زمانی که موس در مد Remote یا Stream میباشد صادر شود ، ولی در مد Stream فقط به گزارش داده عمل خواهد کرد .


• 0xF3 ( قرار دادن سرعت نمونه برداری ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس یک بایت بیشتر از سیستم می خواند . موس این بایت را به عنوان سرعت نمونه برداری جدید ذخیره می کند . پس از دریافت سرعت نمونه برداری مجددا ً موس با "acknowledge" ( 0xFA ) پاسخ می دهد و شمارنده های تغییر مکان را reset می کند . سرعتهای نمونه برداری معتبر 10 ، 20 ، 40 ، 60 ، 80 ، 100 و 200 نمونه بر ثانیه است .
• 0xF2 ( Get Device ID ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد و به دنبال آن device ID ( 0x00 برای موس PS/2 استاندارد ) . همچنین موس باید شمارنده های تغییر مکان را reset کند .
• 0xF0 ( Set Remote Mode ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس شمارنده ها را reset کرده وارد مد Remote می شود .


• 0xEE ( Set Wrap Mode )- موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس شمارنده ها را reset کرده وارد مد Wrap می شود .
• 0xEC ( Reset Wrap Mode ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس شمارنده ها را reset کرده وارد مد قبل از مد Wrap می شود ( مد Remote یا مد Stream .)
• 0xEB ( خواندن داده ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس یک بسته داده تغییر مکان ارسال می کند . این تنها راه خواندن داده در مد Remoteمی باشد . بعد از اینکه بسته های داده با مو فقیت ارسال شدند ، شمارنده های تغییر مکان را reset می کند .
• 0xEA ( Set Stream Mode ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس شمارنده ها را reset کرده وارد مد Stream می شود .

 

• 0xE9 ( تقاضای وضعیت ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس بسته سه بایتی حالت زیر را ارسال می کند.(سپس شمارنده ها را reset می کند )


Byte 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Always 0 Mode Enable Scaling Always 0 Left Btn Middle Btn Right Btn

Byte 2 Resolution

Byte 3 Sample Rate


کلید راست ، وسط ، چپ = 1 اگر کلید فشار داده شده بود; 0 اگر کلید رها شده بود .
مقیاس = 1 اگر مقیاس 2:1 باشد ; 0 اگر مقیاس 1:1 باشد . ( دستورات 0xE7 و0xE6 را ببینید )
مد = 1 اگر مد Remote فعال باشد ; 0 اگر مد Stream فعال باشد (دستورات 0xEA و 0xF0 را ببینید )
• 0xE8 ( Set Resolution ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس یک بایت از سیستم می خواند و مجددا ً با "acknowledge" ( 0xFA ) پاسخ می دهد سپس شمارنده ها را reset می کند . بایت خوانده شده از سیستم Resolution را به صورت زیر تعریف می کند :


Byte Read from Host Resolution
0x00 1 count/mm
0x01 2 count/mm
0x02 4 count/mm
0x03 8 count/mm

• 0xE7 ( Set Scaling 2:1 ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس مقیاس 2:1 را فعال می کند ( پیشتر در این مقاله توضیح داده شده )

• 0xE6 ( Set Scaling 1:1 ) - موس با "acknowledge" ( 0xFA ) پاسخ می دهد سپس مقیاس 1:1 را فعال می کند ( پیشتر در این مقاله توضیح داده شده )

تنها دستوراتی که موس PS/2 استاندارد به سیستم می فرستد "Resend" ( 0xFE ) و "Error" ( 0xFC ) می باشد . آنها همانند دستورات از میزبان به ابزار کار می کنند .

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید