פרוטוקול חוט אחד – Wire 1

פרוטוקול חוט אדם – Wire 1 

הקדמה

פרוטוקול תקשורת 1-Wire הוא שיטה ייחודית שפותחה על ידי חברת Dallas Semiconductor (כיום חלק מ-Maxim Integrated), המאפשרת לחבר בקלות מספר רב של התקנים למיקרו-בקר באמצעות חוט אחד בלבד (ועוד חוט נוסף לאדמה).

השימוש העיקרי שלו הוא לאיסוף נתונים ממערך של חיישנים מפוזרים, כמו טמפרטורה, לחות וכדומה.

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

בסיום, גם אם אין לכם שום ידע קודם באלקטרוניקה או בתקשורת דיגיטלית, תוכלו להבין את הבסיס של טכנולוגיית 1-Wire ואיך היא יכולה לשמש אתכם לבניית מערכות איסוף נתונים חכמות.

מה זה פרוטוקול 1-Wire

פרוטוקול 1-Wire הוא שיטה לתקשורת טורית בין מיקרו-בקר או מחשב, שנקרא “אדון” (Master), לבין מספר רב של רכיבי קצה פשוטים יחסית, שנקראים “עבדים” (Slaves).

החוט הוא ערוץ תקשורת דו-כיווני המשמש גם להעברת נתונים וגם להעברת מתח הפעולה עבור העבדים (זוהי טכניקה שנקראת “מתח פרזיטי” – Parasite Power). למעשה, כל העבדים ברשת “יושבים” על אותו זוג חוטים – חוט הנתונים (Data) וחוט האדמה (Ground).

בניגוד לתקשורות טוריות אחרות בהן לכל עבד מוקצה ערוץ משלו (כמו I2C למשל), ב-1-Wire כל העבדים מחוברים במקביל על אותו קו אחד ויחיד.

אז איך האדון יודע למי הוא מדבר בכל רגע? הפתרון הוא שלכל עבד יש מספר סידורי ייחודי בן 64 סיביות שרשום בו מהמפעל, כמו תעודת זהות בלעדית.

עיקרון העבודה ב-1-Wire מבוסס אז על קשר מסוג “שאלה-תשובה” – האדון הוא היחיד שיכול ליזום תקשורת, שולח פקודה הכוללת את המספר של העבד הרצוי, ואותו עבד בלבד מגיב. שאר העבדים פשוט מתעלמים כי הפנייה לא הייתה אליהם.

לפרוטוקול 1-Wire יש יתרונות בולטים:

☸ פשטות החיווט – מספיקים 2 חוטים בלבד (נתונים ואדמה) כדי לחבר עשרות עבדים למאסטר. זה חוסך המון כסף, זמן ומקום.
☸ זיהוי אוטומטי – כל עבד נושא “תעודה” ייחודית שמוטבעת בו, אז אין צורך להגדיר ידנית כתובות או לדאוג לכך שלא יהיו כפילויות.
חיבור והרחבה קלים – אפשר לחבר ולנתק עבדים מהרשת החיה בלי להפריע לתקשורת או לשנות את התוכנה.
עמידות לתנאים קשים – רוב המעגלים של 1-Wire מסוגלים לעבוד מ -40°C עד +85°C ועמידים ללחות גבוהה.
מרחק גדול – ניתן לפרוס את הרשת למרחק של עד 300 מטר מהאדון בלי לפגוע באמינות.

בזכות יתרונות אלו, התקשורת 1-Wire שימושית במיוחד לפרויקטים כמו:

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

מאפייני רשת 1-Wire

בואו נראה בצורה קצת יותר פורמלית איך בנויה רשת 1-Wire אופיינית:

☸טופולוגיה של “כוכב” (Star) – כל העבדים מקושרים ישירות לאדון המרכזי בלבד, ללא קשרים ביניהם.
☸חוט אחד ויחיד להעברת אותות ומתחים (בנוסף לאדמה).
תקשורת טורית דו כיוונית Half Duplex – בכל רגע נתון רק צד אחד משדר.
קצב העברת נתונים עד 16.3Kbps בגרסה הסטנדרטית או 125Kbps עם “הילוך גבוה”.
אורך קו מקסימלי של עד 300 מטר עם עד 30-40 עבדים (תלוי בסוג הכבל והרכיבים).
כל רכיב מזוהה באופן ייחודי ע”י מספר סידורי בן 64 סיביות שרשום בו מראש.
פרוטוקול תקשורת מבוסס פקודות מהאדון ותשובות מוגדרות היטב מהעבד.

מבנה חבילת תקשורת בין האדון לעבד

כל אינטראקציה בין האדון לעבד ספציפי ב-1-Wire מורכבת מארבעה חלקים עיקריים:

1. איתות איפוס (Reset) – האדון “מעיר” את כולם ע”י הורדת קו הData ל-0V למשך 480 מיקרו-שניות לפחות.
2. פקודה – קוד באורך בית אחד שמציין את הפעולה הרצויה (קריאה, כתיבה, חיפוש וכו’).
3. כתובת – במידת הצורך, 8 בתים שמכילים את המספר הסידורי של העבד הרצוי.
4. נתונים – אם מדובר בפקודה שכוללת נתונים, האדון ישלח או יקבל כמה בתים מהעבד.

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

איך המידע מיוצג בפועל על החוט היחיד?

1-Wire משתמש בטכניקה מיוחדת לקידוד הסיביות על גבי מוליך יחיד. בתקשורת דיגיטלית סטנדרטית, אנחנו רגילים ש ‘1’ זה אות “גבוה” ו-‘0’ אות “נמוך”.

אבל כאן, האדון והעבד בעצם “מודדים” את משך הזמן שבו האות נמצא במצב נמוך (Low) כדי לקבוע את הערך:

☸ אם האות ב-0V למשך 6 מיקרו-שניות ואז חוזר למתח הגבוה, זהו קוד ל-‘1’.
☸ אם האות ב-0V למשך 60 מיקרו-שניות ואז חוזר למתח הגבוה, זהו קוד ל-‘0’.

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

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

דוגמאות מעשיות

כדי לקרקע את כל התיאוריה שלמדנו, בואו נראה איך נראית “שיחה” בין האדון לעבדים ברשת 1-Wire:

דוגמה לרצף בין מאסטר לעבד בודד

נניח שברצוננו לקרוא את הטמפרטורה מחיישן DS18B20 יחיד שמחובר לרשת:

Reset [480μs LOW] → Skip ROM [0xCC] → Convert T [0x44] → Reset [480μs LOW] → Skip ROM [0xCC] → Read Scratchpad [0xBE] → Temperature [Byte1][Byte2]

פירוט המבנה:

Reset: הורדת המתח ל-0V למשך 480μs.
Skip ROM: פקודה בקוד 0xCC (1 בית).
Convert T: פקודה בקוד 0x44 (1 בית).
Reset: שוב הורדת המתח ל-0V למשך 480μs.
Skip ROM: שוב קוד הפקודה 0xCC.
Read Scratchpad: פקודה בקוד 0xBE (1 בית).
Temperature: 2 בתים שמכילים את ערך המדידה מהחיישן.

דוגמה לרצף בין מאסטר למספר עבדים

אם היו לנו 3 חיישני DS18B20 ברשת, כל אחד עם מספר סידורי שונה:

☸ חיישן 1: 28-AA-BB-CC-DD-EE-FF-00
☸ חיישן 2: 28-11-22-33-44-55-66-77
☸ חיישן 3: 28-88-99-AA-BB-CC-DD-EE

ורצינו לקרוא רק מהשני, התהליך היה:

Reset [480μs LOW] → Match ROM [0x55] → [0x28] [0x11] [0x22] [0x33] [0x44] [0x55] [0x66] [0x77] → Convert T [0x44] → Reset [480μs LOW] → Match ROM [0x55] → [0x28] [0x11] [0x22] [0x33] [0x44] [0x55] [0x66] [0x77] → Read Scratchpad [0xBE] → Temperature [Byte1][Byte2]

פירוט המבנה:

Reset: הורדת המתח ל-0V למשך 480μs.
Match ROM: פקודה בקוד 0x55 (1 בית).
Serial Number: 8 בתים המכילים את ה”תעודת זהות” של החיישן השני.
Convert T: פקודה בקוד 0x44 (1 בית).
Reset: שוב הורדת המתח ל-0V למשך 480μs.
Match ROM: שוב פקודה 0x55.
Serial Number: שוב 8 הבתים של המספר הסידורי של החיישן השני.
Read Scratchpad: פקודה בקוד 0xBE (1 בית).
Temperature: 2 בתים שמכילים את ערך המדידה מהחיישן השני.

כעת אפשר לראות בבירור שבמקרה של עבד בודד המבנה מורכב מ: Reset, Skip ROM, פקודה, Reset, Skip ROM, פקודה, נתונים.

ואילו במקרה של ריבוי עבדים יש Reset, Match ROM, כתובת, פקודה, Reset, Match ROM, כתובת, פקודה, נתונים.

אז לסיכום, בפוסט זה למדנו:

1. איך פרוטוקול 1-Wire מצליח לחבר בקלות עשרות חיישנים או רכיבים על גבי רק 2 חוטים.
2. מה ההבדלים העקרוניים בינו לבין תקשורות טוריות נפוצות אחרות כמו UART או I2C.
3. מה מבנה חבילת הנתונים הבסיסית, הכוללת איתות Reset, בית פקודה, מספר העבד (אופציונלי) ונתונים.
4. איך המאסטר והעבדים “מדברים” ביניהם ברשת בטופולוגיית כוכב, תוך שימוש במספרים איך בדיוק הביטים ‘0’ ו-‘1’ מקודדים על גבי המוליך היחיד לפי משכי זמן שונים של אות נמוך. מה היתרונות המשמעותיים של 1-Wire מבחינת פשטות, עלות, גמישות ועמידות.
5. באילו תחומים ויישומים כדאי לשקול להשתמש בו. איך נראית בפועל תקשורת בין מאסטר לעבד אחד או יותר כדי למדוד למשל טמפרטורה.

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

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

אולי יעניין אותך גם...

אנגלית טכנית: תרגול כתיבת פירוש מילה

אנגלית טכנית תרגול מילים: מערכת פשוטה לתרגול מילים באנגלית טכנית. כותבים את התרגום, מקבלים תשובה מיד. מחולק לפי נושאים, מתאים לכולם.

נגישות
error: © תוכן זה שמור באמצעות זכויות יוצרים, אין אפשרות לבצע העתקה. ©