הרקע
מחשב הניווט של המערכת צריך נתוני תנועה מדויקים בקצב קבוע וגבוה. הנתונים מגיעים מחיישן IMU מדויק של Analog Devices (ADIS16465), שמתחבר לכרטיס ייעודי.
האתגר
ב-2000 הרץ יש לכל מחזור 500 מיקרו-שניות: לקרוא את החיישן, לבנות הודעה עם בדיקת CRC ולשדר אותה. כל עיכוב שובר את הקצב. בנוסף, בשלב הרמת הכרטיס החיישן לא הגיב בכלל.
מה בנינו
- שרשרת DMA: פסיקת "נתון מוכן" מהחיישן מפעילה קריאת SPI ב-DMA, ובסיומה מתחיל שידור ב-DMA. כל השלבים באותה עדיפות, ולכן לא נדרשים קטעי קוד קריטיים.
- פרוטוקול: הודעה של 84 בתים בפורמט שהלקוח הגדיר, עם CRC-16.
- איתור תקלות: שתי בעיות שנראו זהות מצד הקוד. הגדרות SPI שגויות כברירת מחדל, ומחבר שחווט הפוך בגלל שרטוט בדאטה-שיט שמציג את הרכיב במבט מלמטה.
התוצאה
הזרמה יציבה של 2000 הודעות בשנייה, בעומס של כ-84% על הערוץ, בלי אף הודעה שאבדה.