מימוש מפתח קלט/פלט מבוסס USB

מבוא:

מפתח ה- USB  מחליף בהדרגה את רוב מפתחי המחשב  הסטנדרטיים המוכרים לנו, כמו למשל   מפתח המדפסת LPT והמפתח הטורי COM. מפתח ה- USB מאפשר לחבר למחשב מגוון רחב של התקנים החל, כאמור, ממדפסת, (מפתח המדפסת שימש, כידוע,  כמפתח קלט/פלט תיקני לשם חיבור התקנים שונים לצורך הוראת מקצועות האלקטרוניקה השונים), מקלדת, עכבר, סורק, מצלמה ועד  למאֶחְסֵן נַיּיָד  (Disk On Key)הפועל בקצבים גבוהים של העברת מידע.

במסמך זה מופיעים ההסברים והקוד המאפשרים את הפנייה למפתח USB אליו מחוברים  התקני קלט/פלט כמו לחצנים, נורות מנועים ומממירים שונים. הפנייה למפתח היא דרך שפה עלית, בשפות  C ו-Visual Basic.  שימוש במפתח ה-USB בא להחליף את ה-LPT בעת תרגול בהפעלת התקנים חיצונים של השפות העליות הנזכרות במגמת "הנדסת אלקטרוניקה ומחשבים" ובמגמת "מערכות בקרה ואנרגיה"  בתיכון ובמכללה,

עקרונות:

במהלך פיתוח הקוד הנזכר נלקחו בחשבון המגבלות הבאות:

  1. הקוד כתוב כך שהוא מתאים לרמת הידע הנדרשת בתוכנית הלימודים במקצוע "מבוא למחשבים" הנלמד בכיתה יא' במגמת "הנדסת אלקטרוניקה ומחשבים" .
  2. תחביר הוראות הקלט והפלט להתקנים החיצונים ומהם, דומה לתחביר של פקודות IN ו- OUT תקניות.
  3. התקן ה-USB המחובר  למחשב מזוהה על-ידי מערכת ההפעלה כהתקן  תקני כך שלא נדרשת התקנה של דרייבר (מנהל התקן) ייחודי.
  4. מימוש התקן הקלט פלט מבוסס על מיקרו-בקר ממשפחת המיקרו-בקרים C51 כך שיתאים לביצוע ניסויים בתקשורת מחשבים במקצוע "תקשורת מחשבים" הנלמד בכיתה יד'.
  5. פישוט המורכבת שבמימוש מפתח USB עד לרמה פשטות הדומה לזו של עבודה מול מפתח LPT או COM.
  6. לא יידרש ידע במיקרו-בקרים כדי ליישם ממשק זה.

 

מהו מפתח USB?

Universal Serial Bus או בקיצור USB הוא מפתח טורי תקנית מהיר ואמין המאפשר חיבור מגוון רחב של התקנים. מפתח ה-USB מחליף את המפתחים הטוריים והמקביליים

(Serial Ports, Parallel Ports) שהיו קיימים  במחשב-אליהן מספר המפתחים הקודמים שהיה ניתן ליצור היה מוגבל. ממשק ה-USB מאפשר  חיבור של מספר רב של התקנים למחשב, עד ל-128 התקנים.  ניהול משאבי המחשב הוא אוטומטי דבר המאפשר למשתמש  לחבר התקנים נוספים ללא צורך  בהגדרה מקדימה שלהם לפני או אחרי  חיבורם  למחשב. הממשק תומך בהעברת נתונים בקצבים החל מ- 1.5Mbps, במצב עבודה Low speed, ועד ל-480Mbps במצב עבודה High speed. ממשק USB מאפשר ולנתק חיבור וניתוק של התקנים ללא צורך באתחול המחשב. חיבור ההתקן נעשה,בדרך כלל, באמצעות כבל USB המורכב מ- 4 גידים: שניים מהם משמשים להעברת נתונים ושני האחרים משמשים להספקת מתח של5V בזרם של עד  500mA (בכבלי USB בני חמישה גידים הגיד החמישי משמש לסיכוך) .

 

 הגדרת  הדרישות לפיתוח  התקן USB

  1. לשם מימוש התקן חומרה צריכים להשתמש במיקרו-בקר ממשפחת 8051 שמותקו בו USB Engine.
  2.  הרכיב  מחובר למחשב באמצעות כבל USB ופועל  במאפייני האותות (מהירות ורמות מתחים) של תקן USB. המיקרו-בקר מסוגל לשלוח ולקבל חבילות מידע מהמחשב  ומהתקן החומרה.

 

תהליך ההתחברות של התקן >USB

עם חיבור התקן ה- USB למחשב, מתבצע הליך זיהוי אוטומטי הנקרא Enumeration שבו מוחלף מידע בין ההתקן למחשב . המחשב "שואל" את ההתקן סידרה של שאלות, לדוגמה: מי אתה? מי היצרן שלך? מהו גודל חבילת המידע שאתה משדר וקולט? מהי צריכת ההספק שלך? מהו נוהל העברת הנתונים שאתה "רוצה" לעבוד בו? וכדומה.

התקן ה-USB מחובר, באמצעות כבל מתאים, אל מחבר מתאים במחשב ומשם לבקר USB. בקר זה מותקן כחלק  מהחומרה המותקנת בלוח האם במחשב. הבקר מופעל באמצעות דרייבר (מנהל התקן) יעודי כחלק ממערכת ההפעלה של המחשב (Windows). מערכת ההפעלה, באמצעות בקר ה-USB, אחראית לזיהוי ההתקן המחובר. חשוב להדגיש שלמתכנת בשפה עלית אין כל  שליטה  בתהליך זה.

לאחר שמערכת ההפעלה מסיימת לזהות את ההתקן מספקת  מערכת ההפעלה שרותי קישור ליישום הכתוב בשפה עלית , (בהנחה שמדובר בהתקן שמערכת ההפעלה מסוגלת  לתת לו שירותים. לדוגמה  [1]התקני HID (Human interface device), אחר), אחרת יש לספק להתקין דרייבר ייעודי (מנהל התקן) להפעלת ההתקן המחובר.

 באיור 1 נתונה דיאגרמה המסבירה את רכיבי התוכנה והחומרה המאפשרים את פעולתו של התקן USB המחובר למחשב.

 

 

איור 1: המרכיבים (חומרה ותכנה) המאפשרים התקשרות בין התקן >USB למחשב

 

מימוש של מעגל החומרה

הרכיב המרכזי שבאמצעות נמשש את  מעגל החומרה הוא של רכיב ממשפחת 8051 המיוצר על ידי חברת Atmel בשם AT89C5131A-M [2]. ברכיב זה  מותקנים, בין השאר,  המערכות :  USB Engine התומך בתקן USB1.1 ו- USB2.0 , זיכרון תוכנה של 32Kbyte  Flash EEPROM הניתן לצריבה באמצעות  מפתח ה-USB ו- 34 הדקי קלט/פלט (I/O Pins).

באיור 2 ניתן לראות את תרשים המלבנים של הרכיב  AT89C5131שמורכב ממיקרו-בקר בסיסי ממשפחת C51, מוקף במלבן שחור, שמימינו  מותקנות  מערכות נוספות הקיימות מיקרו בקר.

איור 2: תרשים מלבנים של הרכיב  AT89C5131A-M

 

איור 3: מיפוי ההדקים  של הרכיב  AT89C5131A-M בתושבת PLCC52

 

 

 

 

איור 4: מספרי ההדקים של תושבת PLCC52

 

איור 5: סרטוט חשמלי מפורט של מעגל החומרה למימוש ממשק USB


באיור 5 מופיע  סרטוט חשמלי מפורט של מעגל החומרה הנדרש לשם מימוש ממשק USB כהתקן קלט/פלט. פרט לרכיב AT89C5131A-M  מותקנים במעגל גביש לתדר של 24MHz המחובר להדקים 12 ו- 13 של המיקרו-בקר, מתג ISP המחובר להדק PSEN (הדק 28 במיקרו-בקר) מתג זה מאפשר מעבר בין שני מצבי עבודה האחד בו ממשק ה- USB משמש להטענת תוכניות לזיכרון ה- Flash והשני מצב "ריצה", רגיל ,שבו המיקרו-בקר מריץ את התוכנה הצרובה ב- Flash . הסבר נוסף על אופן הטענת תוכנית לזיכרון המיקרו-בקר מופיע בסעיף "כתיבת התוכנה למיקרו בקר" בהמשך.  בנוסף מופיע באיור 5   מעגל Reset המחובר להדק 43 של המיקרו-בקר. באיור 5 מופיע גם מחבר USB מדגם USB Type-B המחובר להדקים 22 עד 24בבקר ה-USB.

באיור 6 ניתן לראות את מיפוי ההדקים של מחבר USB מדגם B.

 

איור 6: מיפוי הרגלים של מחבר USB מדגם B

 

ניתן לבנות את מעגל החומרה על לוח חיבורים סטנדרטי, במצב זה יש להקפיד על החיבור בין מחבר ה- USB לבין המיקרו-בקר. חלק זה של המעגל פועל בתדרים גבוהים מאוד ועל כן יש להקפיד שאורך המוליך המחבר בין השניים יהיה קצר ביותר  ויש להקפיד על צורתו של המוליך.

קיימים כרטיסים מסחריים שבהם מותקן הרכיב הנדון, הכוללים את מעגל החומרה הנדרש, המיוצרים על-ידי יצרנים שונים בארץ ובחו"ל.  באיור 7 ניתן לראות דוגמה למעגל מודפס שכזה הניתן לרכישה באתר של יצרן המיקרו-בקר ובאיור 8 דוגמה למעגל מודפס המיוצר על ידי יצרן בארץ.   

 

איור 7: תמונה של מעגל החומרה AT89C5131A evaluation board של ATMEL

 

איור 8: תמונה של מעגל החומרה MMH-51-LED

כתיבת התוכנה למיקרו בקר

כפי  שמופיע  באיור 1 העוסק במרכיבים הדרושים לשם יצירת תקשורת בין התקן USB למחשב.  נדרשת  תוכנית ייעודית שבה יופיעו כל ההגדרות הנדרשות, נוהלי התקשורת, התשובות  למערכת ההפעלה (כאשר זו תבצע את הליך ה- Enumeration) והחשוב מכל-קליטת נתונים שהמחשב משדר אותו ושליחת נתונים אלו למפתחי הפלט (Ports) , קליטת  הנתונים המתקבלים במפתחי הקלט  והעברתם זה למחשב.

באיור 9 מופיע  קטע מקוד של תוכנית לשידור וקליטה של נתונים מהמחשב למיקרו-בקר וחזרה. בשלב ראשון בודקת התכנית באמצעות שימוש בפונקציה Is_new_data_read אם המחשב משדר   נתונים למיקרו בקר. במידה והמחשב משדר נתונים קורא המיקרו-בקר את הנתונים וכותב אותם לתוך המערך data_received ובהמשך שולח אותם, לפי הסדר, למפתחים P0 - P3. בשלב השני  שולח המיקרו-בקר למחשב את הנתונים שקלט מפתחים מהמפתחים P0 - P3, באמצעות שימוש במערך data_to_send .

 

 

איור 9: קטע מקוד התוכנית של המיקרו לשידור וקליטה של נתונים מהמחשב למיקרו-בקר וחזרה.

 

קוד התוכנית עבר הידור באמצעות מהדר הממיר את הקוד הכתוב בשפת C (למיקרו בקרים ממשפחת C51) לקובץ מספרים הקסה דצימליים, Hex File, הניתן לצריבה בזיכרון ה- Flash של הבקר.

קובץ זה בשם AT89c5131_USB_Program.hex מצורף למסמך זה ונימצא בתיקייה AT89c5131_USB_Program. כמו כן ניתן להוריד את הקובץ מהאינטרנט בכתובת: http://galium.co.il/vbe/download/download_package.rar

 

צריבת התוכנה בזיכרון הבקר

נשתמש בתוכנה ייעודית  בשם  Flip (Flexible In-system Programmer) שמספק לנו יצרן הרכיב לשם צריבת הקובץ AT89c5131_USB_Program.hex בזיכרון ה- Flash של המיקרו-בקר .

תוכנה זו ניתנת להורדה מאתר היצרן בכתובת: http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3886 .

באיור 10 ניתן לראות את המסך העבודה של התוכנה לאחר התקנתה במחשב.

 

איור 10: מסך העבודה של התוכנה Flip המשמשת לצריבת תוכניות בבקר.

 

לשם צריבת התוכנית AT89c5131_USB_Program.hex בבקר יש לבצע את השלבים הבאים:

  1. ניתוק כבל ה- USB המחבר בין הבקר למחשב.
  2. חיבור מתח הפעלה למיקרו-בקר.
  3. העברת  מתג ISP המחובר להדק PSEN של המיקרו בקר (איור 5), למצב צריבת התוכנית בבקר ולחיצה על לחצן RESET. 
  4. חיבור כבל USB בין הבקר למחשב.
  5. במידה וזו פעם ראשונה בה מחובר מיקרו-בקר מדגם AT89c5131 למחשב.  יודיע המחשב שהוא מזהה חומרה חדשה. יש להתקין את הדרייבר הדרוש הממוקם בתיקיה: C:\Program Files\Atmel\Flip 3.3.2\usb תוך שימוש באשף ההתקנה שהמחשב פותח ברגע שהוא מזהה חומרה חדשה. במידה וזו לא הפעם הראשונה בו מחובר מיקרו בקר מדגם זה למחשב, ניתן לדלג על שלב זה.
  6. הפעלת תוכנת ה-FLIP   ובחירה בתפריט Select לאחר הקשה על  Device ברכיב AT89C5131.
  7. פתיחת  התקשורת בין המיקרו-בקר למחשב על ידי לחיצה על Open בחלון שיפתח לאחר לחיצה על SettingsàCommunicationàUSB .
  8. יש לוודא כי תיבת הסימון BLBJ אינה מסומנת.
  9. בחירת הקובץ AT89c5131_USB_Program.hex המיועד לצריבה בבקר על ידי לחיצה על FileàLoad HEX file...
  10. ולבסוף לחיצה על Run לביצוע הצריבה.
  11. לאחר מכן יש לנתק את כבל ה- USB המחבר בין הבקר למחשב.
  12. העברת המתג ISP, המחובר להדק PSEN של המיקרו בקר, למצב ריצה רגיל ולחיצה על לחצן RESET.
  13. חיבור חוזר של כבל ה- USB המחבר בין הבקר למחשב.      

 

חשוב לציין שהליך זה הינו חד פעמי. לאחר צריבה ראשונה של הבקר כהתקן קלט/פלט HID הרכיב ישמש למטרה זו עד אשר נצרוב עליו משהו אחר.

 

 

הליך הזיהוי של ההתקן במערכת ההפעלה

לאחר ביצוע הליך הצריבה, העברת המיקרו למצב ריצה, ביצוע Reset וחיבור כבל ה- USB המחבר בין הבקר למחשב. יזהה המחשב חומרה חדשה, אך הפעם הוא לא ידרוש התקנה של דרייבר מתאים. זאת מאחר שתכנתנו את הבקר כך שיזוהה על-ידי מערכת ההפעלה כהתקן סטנדרטי מסוג HID. באיור 11 ניתן לראות את חלון "מנהל ההתקנים" (Device Manager) של מערכת ההפעלה שבו  מוצג USB Human Interface Device התקן חדש . התקן זה הוא מסוג "AT89c5131 – USB HID Generic".

 

איור 11: מנהל ההתקנים מזהה את הבקר כהתקן HID.


 

כתיבת קוד בשפת C למימוש קלט/פלט למפתח

מעיון באיור 12 עולה שכדי לכתוב תוכנית בשפה עלית להפעלת התקן חומרה דרך ממשק USB, יש לבצע פניה, באמצעות קוד מתאים, למערכת ההפעלה אשר תיפנה להתקן החומרה דרך ממשק ה- USB.  כדי להקל על התקשורת בין היישום בשפת C לבין מערכת ההפעלה, נשתמש בקובץ הספרייה (dll file) AtUsbHid.dll.  קובץ זה מסופק על-ידי יצרן הרכיב לשם מטרה זו.

 

איור 12: האופן שבו משתלב קובץ הספרייה AtUsbHid.dll ביישום קוד בשפה עלית.

 

בשלב הבא בכתיבת הקוד ניצור קובץ כותרת בשם AtUsbHid.h, קובץ זה משמש כמתאם בין הקוד הנכתב לשם ביצוע פעולות מול מפתח ה- USB לבין הפעלתו בפועל על ידי קוד תוכנה הכתוב קובץ הספרייה AtUsbHid.dll. בדרך זו ניתן  להציג לתלמיד קוד קצר ופשוט הדומה במבנה שלו לקובץ המוכר לו מהעבודה מול התקני קלט/פלט מבוססי  LPT.

 

קובץ הכותרת AtUsbHid.h  מורכב  מ:

  1. קוד יצרן VID וקוד המוצר PID המאפשר לנו לזהות את התקן החומרה הנתון מבין כלל התקני ה- USB המחוברים למחשב.
  2. שני מערכים בני 32 בתים מטיפוס בית (unsigned char) המכונים In_Buufer ו- Out_Buufer. מערכים אלו משמשים לקליטה ושידור של הנתונים (חבילות המידע) בין המחשב להתקן.
  3. הכרזה על מספר רב של פונקציות הנמצאות בקובץ הספרייה AtUsbHid.dll.
  4. פונקציה בשם initializationUSB המאתחלת את התקשורת מול ההתקן.
  5. פונקציה בשם closeUSB הסוגרת את התקשורת מול ההתקן.
  6. פונקציה בשם outUSB , הזהה במבנה שלה לפונקציה Outp. הפונקציה מקבלת שני נתונים, הראשון הוא מספר המפתח בבקר שאליו כותבים והשני הנתון ששולחים למפתח.
  7. פונקציה בשם inUSB , הזהה במבנה שלה לפונקציה Inp, הפונקציה מקבלת נתון אחד המייצג את מספר המפתח בבקר ממנו קוראים. הפונקציה מחזירה נתון, בגודל בית, שהוא  הנתון שנקלט במפתח.

השלב האחרון בכתיבת התכנית הוא קוד הבא:

 

איור 13: דוגמה לקוד תוכנית בשפת C הפונה להתקן USB המשמש כמפתח קלט/פלט.

 

דוגמת הקוד מראה פנייה למפתח P1 ו- P2 של הבקר כדי לגרום ל- 10 הבהובים בכל אחד מהמפתחים  וקריאה של נתונים מהמפתחים P0 ו- P3 כדי להציגם, 10 פעמים, על צג המחשב.

 

דוגמת הקוד שמופיעה באיור 12 כתובה בשפת C תיקני המתאים למהדר [3]Microsoft Visual C++ 2008 Express Edition.

סביבת העבודה Microsoft Visual C++ 2008 Express Edition ניתנת להורדה חינם מהאתר הבא: http://www.microsoft.com/express

ניתן להוריד את קובץ הדוגמה מהאינטרנט בכתובת: http://galium.co.il/vbe/download/download_package.rar

 

 
כתיבת הקוד בשפת
Visual Basic  למימוש קלט/פלט למפתח

מעיון באיור 14 עולה שכדי לכתוב תוכנית בשפה עלית להפעלת להתקן חומרה דרך ממשקUSB, יש לבצע פניה, באמצעות קוד מתאים, למערכת ההפעלה, אשר תיפנה להתקן החומרה דרך ממשק ה- USB.  כדי להקל על התקשורת בין היישום בשפת Visual Basic לבין מערכת ההפעלה, נשתמש בקובץ הספרייה (dll file) MCHID.dll  קובץ זה נכתב על ידי חברת microchip לשם למטרה זו.

 

איור 14: האופן שבו משתלב קובץ הספרייה MCHID.dll ביישום קוד בשפה עלית.

 

בשלב הבא בכתיבת הקוד ניצור קובץ כותרת בשם mcHIDInterface.vb המשמש כמתאם בין הקוד הנכתב לשם ביצוע פעולות מול מפתח ה- USB לבין הפעלתו בפועל על ידי קוד תוכנה הכתוב קובץ הספרייה MCHID.dll. בדרך זו ניתן  להציג לתלמיד קוד קצר ופשוט הדומה במבנה שלו לקובץ המוכר לו מהעבודה מול התקני קלט/פלט מבוססי  LPT.

 

קובץ הכותרת mcHIDInterface.vb מורכב מ:

  1. קוד היצרן VID וקוד המוצר PID המאפשר לנו לזהות את התקן החומרה שלנו מבין כלל התקני ה- USB המחוברים למחשב.
  2. שני מערכים בגודל 32 בתים מטיפוס בית (Byte) בשמות BufferIn ו- BufferOut. מערכים אלו משמשים לקליטה ושידור של הנתונים (חבילות המידע) בין המחשב להתקן.
  3. הכרזה על מספר רב של פונקציות הנמצאים בקובץ הספרייה MCHID.dll.
  4. פונקציה בשם initializationUSB המאתחלת את התקשורת מול ההתקן.
  5. פונקציה בשם outUSB , הזהה במבנה שלה לפונקציה Outp. הפונקציה מקבלת שני נתונים, הראשון הוא מספר המפתח בבקר שאליו כותבים והשני הנתון ששולחים למפתח.
  6. פונקציה בשם inUSB , הזהה במבנה שלה לפונקציה Inp, הפונקציה מקבלת נתון אחד המייצג את מספר המפתח בבקר ממנו קוראים. הפונקציה מחזירה נתון, בגודל בית, שהוא  הנתון שנקלט במפתח.

 

השלב האחרון בכתיבת התכנית הוא קוד הבא:

 

איור 15: דוגמה לקוד תוכנית בשפת C הפונה להתקן USB המשמש כמפתח קלט/פלט.

 

איור 16: עיצוב טופס הממשק של תוכנה המממשת ממשק קלט/פלט מבוסס USB.

 

דוגמת הקוד מראה כיצד פונים למפתח P1 ו- P2 של הבקר וכן כיצד קוראים נתונים מהמפתח P0 ו- P3 כדי להציג את המידע על צג המחשב.

 

מצורף להסבר זה דוגמת קוד שנכתב בשפת Visual Basic המתאים למהדר Microsoft Visual Basic 2008 Express Edition[4].

סביבת העבודה Microsoft Visual Basic 2008 Express Edition ניתנת להורדה חינם מהאתר הבא: http://www.microsoft.com/express

ניתן להוריד את קובץ הדוגמה מהאינטרנט בכתובת: http://galium.co.il/vbe/download/download_package.rar

 

סיכום

לסיכומו של מסמך זה והנלווים אליו ובנימה קצת אישית.  פיתוח המצורף היה לי אתגר לא קטן. התמודדתי עם נושא שלא הכרתי קודם, למדתי אותו לעומק, הבנתי את המורכבות  של פיתוח תוכנה המאפשרת פנייה משפה עילית למפתח USB ויצרתי תכנה המאפשרת לתלמיד  פנייה פשוטה למפתח  USB  כתחליף לפנייה  למפתח LPT שעתיד להעלם בשנים הקרובות .,שאלות והערות אשמח לקבל בדוא"ל gherman@walla.co.il

 



[1] התקני HID הם משפחה רחבה מאוד של התקנים תקניים שמערכת ההפעלה מסוגלת להפעילם. לדוגמה: מקלדות ועכברים.

[2] ניתן להשתמש, כמובן, ברכיב דומה אחר

[3] אלה מבנינו שעדין כותבים תוכניות C תחת המהדר של Borland אין לי אלה להודיע להם שהגיע הזמן להתחדש ולעבור למהדר מתקדם יותר.

[4] אלה בינינו שעדין כותבים תוכניות Visual Basic תחת המהדר גרסה 6.0 אין לי אלה להודיע להם שהגיע הזמן להתחדש ולעבור למהדר מתקדם יותר.


הרמן גדי , מורה לאלקטרוניקה ומחשבים - אורט מגדל העמק Herman Gadi © 2003