ארדואינו: צריבת Bootloader למיקרו-בקר חלופי

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

Arduino and ATMega328-PUs
הארדואינו ושני מיקרו-בקרים חלופיים – לחצו להגדלה

היום הגיעו אליי שני הג'וקים שמימין בתמונה – מסוג ATMega328-PU בתצורת DIP (זו עם הרגליים הארוכות שאפשר לדחוף לתוך מטריצה). אלו הם מיקרו-בקרים מאותה משפחה שמשמשת בארדואינו Uno ו-Duemilanove, ובעיקרון אפשר להחליף בעזרתם את הג'וק שהגיע עם הארדואינו. אבל כדי לגרום לזה לעבוד, צריך היה לבצע עוד שלב בדרך: צריבה של Bootloader. מה זה Bootloader ואיך צורבים אותו?

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

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

בעולם המקצועי, צריבות למיקרו-בקרים נעשות באמצעות התקן שנקרא ISP – כלומר In-System Programmer – אשר עשוי לעלות בין כמה עשרות לכמה מאות דולרים, בהתאם לחברה שמייצרת אותו וליכולות שלו. עם זאת, סביבת הפיתוח של הארדואינו מציעה לנו אופציה זולה הרבה יותר, שאותה אציג כאן.

שלב ראשון: החלפה פיזית של הג'וקים

כאן אין הרבה מה לומר, רק: היזהרו מאד. כוח מוגזם, זווית לא נכונה – ורגלי הג'וק עלולות להישבר ולהפוך אותו לחסר תועלת. הקפידו גם על הכיוון הנכון של הג'וק. יש לו למעלה, בצד אחד, שקע זעיר בצורת חצי עיגול. והשקע הזה צריך להיות מכוון החוצה, הרחק מחיבור ה-USB של הלוח. יש גם שרטוט סכמטי על הלוח עצמו שמראה היכן השקע אמור להיות. אני מדבר, כמובן, על לוחות עם ג'וקים בתצורת DIP. אם יש לכם ארדואינו Leonardo, מגה, ננו או דגם אחר עם שבב SMD (שטוח ודק), זה כבר סיפור אחר לגמרי.

מיקרו-מעבדים מוחלפים בארדואינו - לחצו להגדלה
מיקרו-מעבדים מוחלפים בארדואינו – לחצו להגדלה

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

סביבת הפיתוח מסרבת לעבוד בלי bootloader
סביבת הפיתוח מסרבת לעבוד בלי Bootloader

שלב שני: הכנת הארדואינו הצורב
צריבת ה-Bootloader באמצעות סביבת הפיתוח של הארדואינו מחייבת [תוספת מאוחרת: זה נוח אבל לא חיוני להשתמש ב]שני לוחות ארדואינו: אחד שישמש כמנהל הצריבה (ה"צורב"), ואחד שיחזיק את ג'וק היעד (ה"נצרב"). סביבת הפיתוח מגיעה עם קוד מתאים, אותו צריך להעלות ללוח הצורב. הקוד נמצא תחת File->Examples->ArduinoISP. העליתם אותו? מצוין, נעבור לחיבורים. [תוספת מאוחרת: למי שאין לוח ארדואינו נוסף עבור הג'וק הנצרב, אפשר להחליף אותו במטריצה ומספר רכיבים, כמוסבר כאן]

שלב שלישי: חיבור הצורב לנצרב

הכינו חוטים וחברו את יציאות 5V של שני הלוחות זו לזו, את חיבורי GND (מספיק אחד בכל לוח, כמובן), ואת פינים 11-13. חיבורים אלה יספקו את החשמל ואת ערוץ התקשורת בין הלוחות.

כעת, חברו את פין 10 של הצורב לכניסת RESET של הנצרב (היא נמצאת קרוב ל-5V), וחברו קבל עם ערך של עשרה מיקרו-פאראד (10uF) בין ה-GND ל-RESET של הצורב. אם אתם משתמשים בקבל אלקטרוליטי, כזה שנראה כמו גליל שחור, שימו לב שרגל אחת מיועדת למינוס (GND) והשניה לפלוס. יש הסברים ושרטוט ברור של כל זה כאן.

שלב רביעי: שקט, צורבים!

סביבת הפיתוח יודעת לעבוד עם כמה סוגים של ISP. כאן אנחנו משתמשים בארדואינו כ-ISP, ולכן נבחר בתפריט Tools->Programmer->Arduino as ISP. עוד דבר שחשוב להגדיר הוא סוג לוח הארדואינו אליו אנחנו צורבים. בוחרים בתפריט Tools->Board ומוודאים שמסומן שם הלוח הנכון.

לסיום, בוחרים בתפריט Tools->Burn Bootloader ומחכים בסבלנות. אם הכל תקין, לוחות הארדואינו יהבהבו בנוריות שלהם, ותוך עשר-עשרים שניות תקבלו הודעת אישור שתוכנת ה-Bootloader נצרבה בהצלחה. תתחדשו! אפשר לנתק את כל החוטים ולהשתמש בלוח הצרוב כאילו היה ארדואינו שנקנה זה-עתה!

צריבת Bootloader בעיצומה - לחצו להגדלה
צריבת Bootloader בעיצומה – לחצו להגדלה

יחי ההבדל הקטן

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

שגיאה בצריבה - חתימה שגויה של המיקרו-בקר
שגיאה בצריבה – חתימה שגויה של המיקרו-בקר

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

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

להרשמה
הודע לי על
21 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

רכשתי H BRIDGE וחיברתי אליו 37V כש ע"פ המפרט שלו הוא תומך 42-46V והוא עלה באש ולקח איתו את הארדואינו

היי עידן

נישרף לי שבב הארדואינו עם הP והזמנתי חדש עם BOOT LOADER הוא הגיע בלי P.
אני לא מצליח לצרוב לו תוכניות והוא נותן לי אזהרת סינכרון, האם גם הלך הFTDI?

אני לא בטוח שהבנתי את מה שאני צריך,
לפי מה ששמעתי (יותר נכון קראתי), ברגע שפיתחת פרוייקט זה יהיה בזבוז להשאיר את הפרויקט על הארדואינו אז צורבים את התוכנית על בקר ATM328. ואותו שמים על מטריצה קטנה בהרבה או על לוח הלחמה שאני לא זוכר איך קוראים לו באנגלית.
מה שהסברת פה זה איך להחליף בקר. אולי אתה יכול לעזור לי להבין איך "להעביר את הפרוייקט" לצ'יפ? קישור חיצוני גם יעבוד 🙂 פה גם יש הרבה מושגים שאני לא מכיר ולא יודע אם אני צריך להכיר בשביל המטרה שלי (גביש,מתנד UART,ads,MULL וכו')
תודה רבה על הפוסט ! מצוין 🙂

עידו, שלום. בזכותך נחשפתי לראשונה למופע הקסמים הזה, הארדואינו. קראתי את הכתבה בY, עברו כמה ימים, נתקלתי שוב בארדואינו במקום אחר ו… עכשיו הוא כבר כאן, מדליק לדים ומוסר מסרים סריאליים שגורמים לי הנאה צרופה. יש קושי מסויים בפרידה מפרוייקטים לטובת פרוייקטים חדשים, שאני מקווה שאוכל לפתור בעזרת הפתרון שהצגת כאן. לצערי, רכשתי את גירסת ה-SMD, כלומר הצ'יפ ב-surface mount על פני הלוח. יש אפשרות לצרוב באמצעותו בוטלואדר לארדואינו אחר שאינו SMD? בנוסף, במידה וארכוש את הצ'יפים המגיעים עם בוטלואדר מוכן מראש, לא אזדקק כלל ל-2 מכשירים? אלא רק למכשיר שאינו SMD וכן לגביש שיתפקד בתור השעון? (ו-2 קבלים 22pF)… לקרוא עוד »

בהחלט אשתמש בקישור, כשיגיעו החלקים… 🙂
חבל שאי-אפשר לקפוץ לחנות ולקנות, במקום להמתין מס' שבועות.

ייתכן שאפשר להסתדר בלי ארדואינו צורב?
http://waihung.net/making-your-own-arduino-part-2-arduino-on-breadboard/
הרכיב הזה מאפשר, לכאורה, לחבר את ה"ארדואינו-על-מטריצה" ישירות למחשב.
(מצריך צ'יפ עם Bootloader)
מקווה שהבנתי נכון.

אם אתה רוצה באמת להכין ארדואינו קטן וחסכוני במקום ( במחיר של וויתור על המון פינים ) ) תנסה את המיקרובקר ATtiny . למידע מפורט http://bit.ly/zTqgEB .

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

ברור שהוא לא מתאים לכל פרוייקט,
נראה לי שסה"כ ההוראות המוגבלות הן לא בעיה אמיתית – אם אין פקודת MUL "טבעית" במעבד אז הקומפיילר ייצר לך אחת בתוכנה, פשוט יקח לזה יותר זמן לרוץ. בסופו של דבר אתה כותב אותו קוד C. יתכן וישמגבלות של פיצ'רים שלמים שחסרים במעבד: אם אין ADC אז אי אפשר לעשות ANALOG READ.
המגבלות הפיזיות – הן באמת מגבלות פיזיות

כוונתי אחרת:
יש ברשותך CHIP עם Bootloader צרוב. (Ebay) מחובר למטריצה, קבלים שעון וכו'.
האם אתה יכול לתכנת אותו מהמחשב בעזרת מתאם usb to uart?
על פניו, מהלינק שהצגתי בפוסט הקודם, זה נראה אפשרי. אלא אם כן לא הבנתי נכון.

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

המון תודה על הפוסט הנהדר ועל כל העזרה.

איזה פוסט מעולה. תודה. למעשה אם קניתי ג'וק עם Bootloader אוכל להניח אותו במקום המקורי שבuno שלי, לצרוב עליו את הקוד הרלוונטי לי, וללבנות סביבו לוח קטן ופונקציונאלי ולחסוך מקום וכסף? אני מבין שאני צריך להוסיף עוד גביש קריסטלי (איזה?מאיפה?) ולדאוג להתחבר לפינים הנכונים שלו…?

תודה!