לא למתחילים: תיקון הארדואינו המסובך ביותר*

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

נגד בהלחמה מאולתרת ללוח ארדואינו מגה
אל תסתכלו על התוצאה, מה שחשוב זו הדרך

*המסובך ביותר עד כה…

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

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

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

ידעתי מקודם שהבעיה היא לא בכבל ה-USB, אז איפה כן? בדקתי את הקונקטור, את המוליכים ממנו אל המיקרו-בקר המשני ATmega16U2 (שמנהל את התקשורת עם המחשב), ואת ההלחמות של המיקרו-בקר הזה. הכול נראה תקין. אם כך, הבעיה היא בתוך ה-16U2 עצמו, נכון? התחברתי אליו דרך ה-ISP (שישיית הפינים הסמוכה) – החיבור לא היה נוח ונדרשו המון ניסיונות עד שהצורב הסכים לזהות אותו – וצרבתי לו את הקושחה המתאימה, במחשבה שאולי הוא חטף קפיצת מתח ומשהו השתבש בקוד. המחשב הבטיח לי שהקוד החדש עלה כמו שצריך, אך הלוח עדיין לא זוהה. אולי משהו נשרף בפנים, טרנזיסטור של אחד הפינים?

בהגדלה רצינית: הלחמות פיני תקשורת ה-USB של ה-ATmega16U2 המקורי
בהגדלה רצינית: הלחמות פיני תקשורת ה-USB של ה-ATmega16U2 המקורי

המגה המבאס חזר לשבת בצד, עד שהגיעה ההזדמנות וקניתי לו ATmega16U2 חלופי. בכוחות מחודשים הסתערתי על הלוח העקשן והחלפתי גם את המיקרו-בקר השני. הוא מגיע במארז QFN זעיר ונטול רגליים, מה שהופך את ההחלפה לעוד יותר עדינה ומורכבת מאשר של ה-2560. קטן עליי. גם דרך המיקרוסקופ, ההלחמות שלי נראו בסוף אחידות וטובות יותר ממה שהיה שם קודם. נשאר רק לצרוב עליו את הקושחה הנכונה ולעדכן את הפיוזים… אמה-מה, עכשיו הצורב – שום צורב – לא הצליח לזהות את ה-16U2 בכלל.

הפדים של ה-ATmega16U2 על לוח הארדואינו מגה אחרי הסרת הרכיב
הפדים של ה-ATmega16U2 על לוח הארדואינו מגה אחרי הסרת הרכיב

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

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

לא תתפלאו לשמוע שגם עם הגביש החדש – כולל קבלים שהחלפתי ליתר ביטחון! – המגה עדיין לא זוהה במחשב. עד עכשיו אין לי מושג איך זה יכול להיות. אולי איזשהו trace כמעט-שבור מתחת לציפוי הכחול (ה-"Solder mask") של ה-PCB? בשביל הקטע, הוצאתי את הגביש החדש והזרקתי במקומו אות של 16MHz. המחשב זיהה את הארדואינו. תודה רבה באמת, מה, מעכשיו כל פעם שארצה לתכנת את הארדואינו הזה אצטרך לחבר אותו ל"מכונת הנשמה" ממחולל האותות?

רגע אחד. יש עוד מקור של 16MHz, ממש על הלוח. המיקרו-בקר הראשי! מיהרתי לדפי הנתונים והשרטוטים. כמו לרוב המיקרו-בקרים, גם ל-ATmrga2560 יש פין שאפשר להוציא ממנו את אות השעון של המערכת, ובארדואינו מגה הפין הזה לא מחובר לשום דבר. אם אני אשמיש אותו ואמתח חוט עם נגד משם אל פין הגביש המתאים של ה-16U2, האם זה יעבוד?

התחברתי שוב עם הצורב ל-2560 ושיניתי את הפיוז המתאים כך שיוציא את אות השעון (האופציה הזו מושבתת כברירת מחדל). כאילו להכעיס, הפין הרלוונטי (PE7, שנקרא גם CLKO) נמצא קרוב מאוד לקבל של פין Vcc והגישה אליו ממש לא נוחה. להלחים חוט לשם לקח לי יותר זמן ומאמץ מההחלפה של שני המיקרו-בקרים גם יחד. אבל בסוף הצלחתי.

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

מכוער אבל עובד: הלוח המשופץ
מכוער אבל עובד: הלוח המשופץ

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

קצת מידע שימושי למי שיצטרך לבצע תיקונים דומים:

  1. קובצי קושחה ל-ATmega8U2 ו-ATmega16U2 (ארדואינו אונו ומגה)
  2. קובצי Bootloader למיקרו-בקרים הראשיים של הלוחות הנפוצים נמצאים בתיקייה שבה מותקנת סביבת הפיתוח של ארדואינו במחשב, בנתיב Arduino\hardware\arduino\avr\bootloaders . שמות התיקיות שם לא תואמים את שמות הלוחות, שמות הקבצים שבתוכן כן. הקבצים האלה נחוצים למי שעובד עם צורב חיצוני ולא דרך התפריט Tools->Burn Bootloader של סביבת הפיתוח של ארדואינו.
  3. ערכי הפיוזים ל-ATmega16U2 של הארדואינו מגה: Extended=0xF4 High=0xD9 Low=0xFF
  4. ערכי הפיוזים ל-ATmega2560 של הארדואינו מגה: Extended=0xFD High=0xD8 Low=0xFF
  5. כדי להוציא את אות השעון מה-2560, פיוז LOW צריך להיות 0xBF.
  6. אם משתמשים בצורב PICKIT4, חשוב להעביר אותו בתוכנה למצב ISP. מיפוי הפינים המתאים מופיע בטבלה הזו, בעמודה השמאלית.

עד התקלה הבאה…

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

אם להודות על האמת- הופתעתי! רשמת ש"מה שחשוב זו הדרך", אני מסכים איתך- על דרך השלילה. אסביר.. באופן מעשי הלכת שלב שלב "לפי הספר".. רק מהסוף להתחלה 🙂 גם אם מתעלמים מהעובדה שנתקלת בבעיה דומה בעבר, אני לא רואה מצב בו יש בעיית זיהוי/תקשורת כמו שתיארת, בה ניגשים להחלפת רכיבים (במיוחד החלפות מורכבות כמו שעשית) ללא בדיקה של מתחי הזנה ושעונים לכל אחד מהמיקרובקרים (פה באמת הייתי בודק מהסוף להתחלה, קרי- מפין הכניסה של השעון במיקרובקר לאחור עד לגביש/מקור השעון במידת הצורך..) אולי חסר מידע על הדרך בה החלטת מראש מדוע צריך להחליף דווקא את הרכיבים הנ"ל, וכן הייתה לך… לקרוא עוד »

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

כל הכבוד על המאמץ, אני הייתי מתיאש מאוד מהר.