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

מה עושה bootloader בפועל

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

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

מה חייב להיות בקוד טעינה מסחרי

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

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

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

ההשפעה על החומרה ועל בחירת הרכיב

ההחלטה על bootloader במיקרו בקר משפיעה ישירות על תכנון החומרה, ולכן היא חייבת להתקבל בשלב האפיון ולא לקראת הייצור. שני בנקים דורשים כמעט כפול זיכרון פלאש, ולעיתים גם רכיב זיכרון חיצוני. צריך לוודא שיש מקור מתח יציב במהלך הכתיבה, ושקיים אמצעי פיזי כלשהו, כגון לחצן או פין ייעודי, שמאלץ כניסה למצב שחזור. גם הבחירה בין דגמי מעבד עם 256 קילובייט ל‑512 קילובייט זיכרון תלויה בכך. הרחבנו על השיקולים במאמר בחירת מיקרו בקר למוצר, וההחלטה קשורה גם לארכיטקטורת התוכנה שתבחרו, כמתואר במאמר RTOS או Bare Metal.

מה זה שווה כלכלית

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

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

רוצים להפוך רעיון למוצר? צרו קשר עם צוות פרוג'קטס האוס בע"מ – טלפון: 054-8936922 | דוא"ל: info@projects-house.com – ונשמח ללוות אתכם משלב הרעיון ועד המדף.