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

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

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

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

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

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

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

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

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

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

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

مدهای عملیات :
گزارش داده مطابق با مدی که موس فعالیت میکند می با شد. آنها ۴ مد عملیات استاندارد هستند .
• 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 (تست اطمینان پایه) انجام میدهد و ارزشهای پیش فرض زیر را قرار می دهد :
• سرعت نمونه گیری – ۱۰۰ نمونه بر ثانیه
• Resolution – ۴ counts/mm
• مقیاس – ۱:۱
• غیر فعال شدن گزارش داده .

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

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

رنج این پارامتر از ۱۰ نمونه در ثانیه تا ۲۰۰ نمونه در ثانیه میباشد . مقدار پیش فرض آن ۱۰۰ نمونه بر ثانیه است و سیستم میتواند مقدار آن را با استفاده از دستور “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 می باشد . که در مجمود شامل پنج کلید موس و سه محور تغییر مکان است .(راست – چپ ، بالا – پایین و چرخ دوار) . این مشخصات اضافی نیاز به استفاده از ۴ بایت برای بسته داده تغییر مکان دارد ، بیشتر از ۳ بایت که برای بسته استاندارد میباشد .

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

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

سپس سیستم دستور “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 یک عدد مکمل ۲ می باشد که نشاندهنده تغییر مکان چرخ گردان از آخرین داده گزارش شده است . اعتبار این مقادیر در رنج ۸- تا ۷+ می با شد . این بدان معنی است که عدد حقیقتا ً با چهار بایت کم ارزش نمایش داده میشود . چهار بایت بالا تر به عنوان بایتهای توسعه یافته به کار می روند . برای وارد شدن به مد چرخ گردان کلید ۵+ ، سیستم دستورات متوالی زیر را ارسال می کند.

سرعت نمونه برداری را ۲۰۰ قرار بده
سرعت نمونه برداری را ۱۰۰ قرار بده
سرعت نمونه برداری را ۸۰ قرار بده
سپس سیستم دستور “Get device ID” ( 0xF2 ) را صادر کرده و منتظر پاسخ می ماند . یک Microsoft Intellimouse با یک device ID 0x04 پا سخ خواهد داد ، پس از بسته داده ی تغییر مکان ۴ بایت زیر استفاده می کند :

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 یک عدد مکمل ۲ می باشد که میزان تغییر مکان رخ داده از آخرین گزارش داده را نشان می دهد . رنج ارزش معتبر آن از ۸- تا ۷+ می باشد .
کلید چهارم : ۱ = کلید چهارم موس فشار داده شده ؛ ۰ = کلید چهارم موس رها شده .
کلید پنجم : ۱ = کلید پنجم موس فشار داده شده ؛ ۰ = کلید پنجم موس رها شده .
شما ممکن است موسهایی با دو چرخ گردان دیده باشید – یکی عمودی و دیگری افقی . این موسها از فرمت بسته داده ی Microsoft Intellimouse استفاده می کنند . همان گونه که قبلا ً ذکر شد ، اگر چرخ عمودی به بالا بچرخد شمارندهZ یکی یکی افزایش می یابد و اگر چرخ به پایین بچرخد شمارنده Z یکی یکی کاهش می یابد .

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

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

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

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

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

• ۰xF3 ( قرار دادن سرعت نمونه برداری ) – موس با “acknowledge” ( 0xFA ) پاسخ می دهد سپس یک بایت بیشتر از سیستم می خواند . موس این بایت را به عنوان سرعت نمونه برداری جدید ذخیره می کند . پس از دریافت سرعت نمونه برداری مجددا ً موس با “acknowledge” ( 0xFA ) پاسخ می دهد و شمارنده های تغییر مکان را reset می کند . سرعتهای نمونه برداری معتبر ۱۰ ، ۲۰ ، ۴۰ ، ۶۰ ، ۸۰ ، ۱۰۰ و ۲۰۰ نمونه بر ثانیه است .
• ۰xF2 ( Get Device ID ) – موس با “acknowledge” ( 0xFA ) پاسخ می دهد و به دنبال آن device ID ( 0x00 برای موس PS/2 استاندارد ) . همچنین موس باید شمارنده های تغییر مکان را reset کند .
• ۰xF0 ( Set Remote Mode ) – موس با “acknowledge” ( 0xFA ) پاسخ می دهد سپس شمارنده ها را reset کرده وارد مد Remote می شود .

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

 

• ۰xE9 ( تقاضای وضعیت ) – موس با “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

کلید راست ، وسط ، چپ = ۱ اگر کلید فشار داده شده بود; ۰ اگر کلید رها شده بود .
مقیاس = ۱ اگر مقیاس ۲:۱ باشد ; ۰ اگر مقیاس ۱:۱ باشد . ( دستورات ۰xE7 و۰xE6 را ببینید )
مد = ۱ اگر مد Remote فعال باشد ; ۰ اگر مد Stream فعال باشد (دستورات ۰xEA و ۰xF0 را ببینید )
• ۰xE8 ( 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

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

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

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