מהו מנגנון ה-Bootloader של הארדואינו?

לכל מי שיצא כבר להשתמש בארדואינו, יודע שכדי לטעון אליו קוד (תוכנה) חדש, יש לחבר אותו אל מתקן שממיר USB לאותות של תקשורת טורית או בלוחות מסוימים, די בחיבור הלוח ישירות אל כניסת USB במחשב. אבל איך מתבצע עדכון הקוד בפועל? הרי לא מעורב בתהליך הזה שום מתקן-תכנות (Programmer) ובכל זאת הקוד הישן, "נדרס" על-ידי קוד חדש.
ה"סוד" ליכולת התכנות של הארדואינו, הוא ה-Boot loader שבו. ללא ה-Boot loader (להלן BL) הארדואינו היה הרבה יותר קשה לתפעול ונדרש היה ציוד תכנות ייעודי, כדי לטעון אליו קוד חדש בכל פעם.

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

מה זה Boot loader?

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

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

 

תמונה 1: ארדואינו מגה. מגיע עם קוד Bootloader מוכן מראש

אילו בעיות עלולות להתעורר, שקשורות ב-Bootloader?

ישנן מספר "בעיות ארדואינו", שקשורות ל-BL. הבעיות העיקריות שיכולות להתעורר הן:

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

הסימפטום של לוח ארדואינו, שיש בו Boot loader מקולקל הוא, שלא ניתן עוד לטעון קוד חדש אל הארדואינו והוא "תקוע" עם הקוד האחרון שכתבתם אליו, כשה-BL עדיין עבד. במקרה שרכיב הבקר הוחלף ברכיב חדש, שאין עליו BL, לוח הארדואינו למעשה לא יודע לעשות דבר, אין עליו שום קוד שהוא ואין דרך לתכנת קוד חדש, דרך הערוץ הטורי.

כיצד ניתן לתכנת BL בעצמכם?

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

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

מה עוד כדי לדעת על Boot loader?

  • אין אפשרות לתכנת קוד Boot loader בעזרת ה-Boot loader עצמו, כי זה בעצם מצב של "ביצה ותרנגולת". לפיכך, לפני שמשתמשים בארדואינו בפעם הראשונה, יש לכתוב אליו BL בעזרת מתקן תכנות.
    לרוב, פעולה זו מבוצעת על-ידי יצרן הלוח ואתם מקבלים את הלוח מוכן לעבודה.
  • למי שמכיר היטב את עולם המחשבים האישיים (PC) - ניתן לחשוב על Boot loader בתור הקוד שרץ ב-BIOS של מחשב. הם עובדים באופן כללי לפי רעיון דומה (הקוד הראשון שרץ, כשמספקים מתח למערכת).

לסיכום

ה-Boot loader הוא קוד שיושב באיזור מוגן, בזיכרון של המיקרובקר שנמצא על לוח הארדואינו. ה-BL מאפשר למשתמשים לתכנת את הארדואינו ולשנות את הקוד השמור בו, ללא שימוש במתקן תכנות ייעודי (Programmer). לוחות ארדואינו מסחריים, מגיעים עם קוד BL מתוכנת בהם מראש. במקרה שארדואינו מגיע ללא BL מסיבה כלשהי, יש לתכנת אותו בפעם הראשונה בעזרת מתקן-תכנות. לאחר מכן, ניתן לטעון קוד חדש לארדואינו, בעזרת ה-BL בלבד.


 

תקועים עם פרויקט בארדואינו וצריכים עזרה? צרו קשר