הטמעה של ממשקי API לשכבות תשתית בפלטפורמה

הצגת המקור ב-GitHub

OpenThread הוא מערכת הפעלה אגנוסטית ופלטפורמה, עם שכבת פלטפורמה צרה של פלטפורמה (PAL). ה-PAL הזה מגדיר:

ארכיטקטורת ניוד
  • ממשק התראה לטיימר פועל עם התראה
  • ממשקי אוטובוס (UART, SPI) להעברת הודעות של CLI ו-Spinel
  • ממשק רדיו לתקשורת IEEE 802.15.4-2006
  • תרחישים של אתחול ספציפי ל-GCC
  • אנטרופיה ליצירת מספרים אקראיים
  • שירות הגדרות לאחסון שאינו תנודתי
  • ממשק רישום הודעות ביומן OpenThread
  • תרחישים של אתחול ספציפי למערכת

יש ליישם את כל ממשקי ה-API על סמך חבילת התמיכה הבסיסית של בניית חומרה (HAL) (BSP).

יש למקם קובצי API בספריות הבאות:

סוג ספרייה
הטמעה של PAL ספציפי לפלטפורמה /openthread/examples/platforms/platform-name
קובצי כותרת — API לא תנודתי לאחסון /openthread/examples/platforms/utils
כל שאר קובצי הכותרת /openthread/include/openthread/platform
BAL HAL /openthread/third_party/platform-name

השכמה

הצהרת API:

/openthread/include/openthread/platform/alarm-milli.h

Alarm API מספק שירותי תזמון והתראות בסיסיים להטמעה של הטיימר ברמה העליונה.

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

UART

הצהרת API:

/openthread/examples/platforms/utils/uart.h

UART API מיישם תקשורת יציאה טורית בסיסית דרך ממשק UART.

בעוד שהתוספים של OpenThread CLI ו-NCP תלויים בממשק UART כדי לבצע פעולות בצד המארח, התמיכה ב-UART API הוא אופציונלי. עם זאת, גם אם אינכם מתכננים להשתמש בתוספים האלה בדוגמה החדשה של פלטפורמת החומרה, אנחנו ממליצים בחום להוסיף תמיכה מכמה סיבות:

  • ה-CLI עוזר לאמת שהיציאה תקינה
  • כלי האוטומציה לאוטומציה משתמש בממשק UART כדי לשלוט ב-OpenThread למטרות בדיקה ואישור

אם הפלטפורמה של חומרת היעד תומכת במודול USB CDC ולא ב-UART, יש להקפיד על הדברים הבאים:

  • התקנה של מנהל התקן CDC הנכון בצד המארח
  • החלף את היישום של ממשק ה-API של UART במנהל ההתקן של CDC של USB (יחד עם BSP) בצד של OpenThread, באמצעות אותם אבות טיפוס

רדיו

הצהרת API:

/openthread/include/openthread/platform/radio.h

ה-API של Radio מגדיר את כל הפונקציות הדרושות שנקראה שכבת IEEE 802.15.4 MAC העליונה. צ'יפ הרדיו חייב להיות תואם באופן מלא למפרט 2.4GHz IEEE 802.15.4-2006.

בזכות תכונת הטעינה הנמוכה של המוצר, OpenThread דורש מכל הפלטפורמות להטמיע פריים אוטומטי (שידור עקיף) כברירת מחדל. בנוסף, יש להטמיע את טבלת ההתאמה של כתובת המקור בקובץ המקור של radio.h.

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

שונות/איפוס

הצהרת API:

/openthread/include/openthread/platform/misc.h

ה-API של Misc/Reset מספק שיטה לאיפוס התוכנה שבשבב, ומגדיר את הסיבה לאיפוס האחרון.

אנטרופיה

הצהרת API:

/openthread/include/openthread/platform/entropy.h

ה-API של Entropy מספק מחולל מספרים אקראי באמת (TRNG) עבור השכבה העליונה, המשמש לתחזוקת נכסי אבטחה עבור רשת OpenThread כולה. ה-API צריך להבטיח שיופק מספר אקראי חדש לכל קריאה לפונקציה. נכסי אבטחה המושפעים מה-TRNG כוללים:

  • צופן CCM של AES
  • רעידות אקראיות באיחור
  • כתובת מורחבת של מכשירים
  • התקופה האקראית הראשונית בטיימר לזרם
  • מזהי אסימון/הודעה של CoAP

שימו לב שפלטפורמות רבות כבר שילבו מחולל מספרים אקראי, וחשפו את ה-API בחבילת ה-BSP שלה. אם פלטפורמת החומרה של היעד לא תומכת ב-TRNG, מומלץ להשתמש בדגימה של מודול ADC כדי ליצור מספר אקראי באורך קבוע. דגום מספר חזרות אם דרוש כדי לעמוד בדרישות TRNG (uint32_t).

כאשר המאקרו MBEDTLS_ENTROPY_HARDWARE_ALT מוגדר ל-1, ממשק API זה צריך גם לספק שיטה ליצירת אנטרופיית החומרה המשמשת בספריית mbedTLS.

אחסון שאינו תנודתי

הצהרות API:

/openthread/include/openthread/platform/flash.h

או

/openthread/include/openthread/platform/settings.h

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

ממשקי API אלה חושפים לשכבה העליונה:

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

כדי לציין באיזו ממשק API הפלטפורמה צריכה להשתמש, יש להשתמש בקובץ OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE של הגדרת התצורה לדוגמה לדוגמה של הפלטפורמה. אם מוגדר כ-1, יש להטמיע את ממשק ה-API של Flash. אחרת, יש להטמיע את ממשק ה-API של ההגדרות.

יש להגדיר את הסימון הזה בקובץ /openthread/examples/platforms/platform-name/openthread-core-platform-name-config.h שלך.

רישום

הצהרת API:

/openthread/include/openthread/platform/logging.h

ה-loging API משתמש בפונקציונליות של OpenThread לרישום ולניפוי באגים בהורדה של מספר רמות. ה-API הזה הוא אופציונלי אם אתם לא מתכננים להשתמש ביומן של OpenThread בדוגמה של פלטפורמת החומרה החדשה.

הרמה הגבוהה והמפורטת ביותר היא OPENTHREAD_LOG_LEVEL_DEBG. היא מדפיסה את כל פרטי המנות הגולמיות ושומרת את רשומות הכבלים דרך היציאה הסידורית או במסוף. צריך לבחור רמת ניפוי באגים שמתאימה לצרכים שלך.

ספציפי למערכת

הצהרת API:

/openthread/examples/platforms/openthread-system.h

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

היישום של ממשק API זה תלוי בתרחיש לדוגמה. אם ברצונך להשתמש ביישומי CLI ו-NCP שנוצרו עבור פלטפורמה לדוגמה, עליך ליישם את ה-API הזה. אחרת, ניתן להטמיע כל ממשק API כדי לשלב את מנהלי ההתקנים של הפלטפורמה במערכת/RTOS.