עבד SPI

מודול זה כולל את הפשטת הפלטפורמה עבור תקשורת עם עבדים ב-SPI.

סיכום

סוג Dedef

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) Typedef
bool(*
מציין שעסקה של SPI הושלמה עם האורך הנתון.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) Typedef
void(*
הפעולה מתבצעת לאחר ביצוע שיחה חוזרת (callback) ומחזירה את TRUE לצורך עיבוד נוסף.

פונקציות

otPlatSpiSlaveDisable(void)
void
כיבוי והשבתת ממשק העבד SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
מפעילים את הממשק של עבד ה-SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
מכינים את הנתונים לעסקה הבאה של SPI.

סוג Dedef

otPlatSpiSlaveTransactioncompleteCallback

bool(* otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)

מציין שעסקה של SPI הושלמה עם האורך הנתון.

הנתונים שנכתבו אל העבד נכתבו להצבעה שצוינה על ידי הארגומנט aInputBuf בשיחה הקודמת אל otPlatSpiSlavePrepareTransaction().

כשהקריאה לפונקציה הזו היא otPlatSpiSlavePrepareTransaction(), היא אינה חוקית וצריך להפעיל אותה שוב כדי שהעסקה הבאה תהיה חוקית.

חשוב לזכור שהפונקציה הזו תמיד מופעלת בסיום עסקה, גם אם otPlatSpiSlavePrepareTransaction() עדיין לא הופעלה. במקרים כאלה, aOutputBufLen וגם aInputBufLen יהיו אפס.

ניתן להתקשר לקריאה חוזרת זו מהקשר ISR. ערך ההחזרה מהפונקציה הזו מציין אם נדרש עיבוד נוסף. אם הפונקציה TRUE מוחזרת, הטמעה של נהג spia Platform בפלטפורמה חייבת להיות מופעלת ב-callback של תהליך העסקה (aProcessCallback המוגדר ב-otPlatSpiSlaveEnable()), בניגוד לקריאה החוזרת (callback) הזו, המערכת צריכה להתקשר מאותו הקשר של מערכת ההפעלה שמפעילה OpenOpen API/callback אחר.

פרטים
פרמטרים
[in] aContext
מצביע ההקשר הועבר אל otPlatSpiSlaveEnable().
[in] aOutputBuf
הערך של aOutputBuf מהשיחה האחרונה ועד otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
הערך של aOutputBufLen מהשיחה האחרונה ועד otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
הערך של aInputBuf מאז השיחה האחרונה אל otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
הערך של aInputBufLen מאז השיחה האחרונה אל otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
אורך העסקה שבוצעה, בבייטים.
החזרות
TRUE אם לאחר השיחה הזו הפלטפורמה צריכה להפעיל את הקריאה החוזרת (callback) aProcessCallback, FALSE אם אין צורך לעבד דבר ולא צריך להפעיל את הקריאה החוזרת (callback).

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

הפעולה מתבצעת לאחר ביצוע שיחה חוזרת (callback) ומחזירה את TRUE לצורך עיבוד נוסף.

בניגוד ל-otPlatSpiSlaveTransactionCompleteCallback שניתן להתקשר אליו מכל הקשר שהוא (למשל, ISR), יש להתקשר אל הקריאה החוזרת הזו מאותו הקשר של מערכת ההפעלה כמו כל ממשק API אחר/callback אחר.

פרטים
פרמטרים
[in] aContext
מצביע ההקשר הועבר אל otPlatSpiSlaveEnable().

פונקציות

otPlatSpiveDisable

void otPlatSpiSlaveDisable(
  void
)

כיבוי והשבתת ממשק העבד SPI.

otPlatSpiveEnable

otError otPlatSpiSlaveEnable(
  otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback,
  otPlatSpiSlaveTransactionProcessCallback aProcessCallback,
  void *aContext
)

מפעילים את הממשק של עבד ה-SPI.

חשוב לשים לב שעבד ה-SPI אינו מוכן במלואו עד לביצוע העסקה באמצעות otPlatSPISlavePrepareTransaction().

אם otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` בייטים ומוחקים את כל הבייטים שהתקבלו.

פרטים
פרמטרים
[in] aCompleteCallback
מצביע לביצוע העסקה המלאה.
[in] aProcessCallback
מצביע כדי להתקשר חזרה.
[in] aContext
יש להפנות את ההקשר אל קריאה חוזרת (callback).
ערכי החזרה
OT_ERROR_NONE
ממשק SPI Slave הופעל בהצלחה.
OT_ERROR_ALREADY
ממשק SPI Slave כבר מופעל.
OT_ERROR_FAILED
הפעלת ממשק ה-SPI Slave נכשלה.

otPlatSpisla להכין עסקה

otError otPlatSpiSlavePrepareTransaction(
  uint8_t *aOutputBuf,
  uint16_t aOutputBufLen,
  uint8_t *aInputBuf,
  uint16_t aInputBufLen,
  bool aRequestTransactionFlag
)

מכינים את הנתונים לעסקה הבאה של SPI.

מצביעי הנתונים חייבים להישאר בתוקף עד שהשיחה המתוקנת הושלמה על ידי נהג עבדים ב-SPI, או עד הקריאה הבאה ל-otPlatSpiSlavePrepareTransaction().

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

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

לאחר סיום השימוש ב-aOutputBufLen בייטים של aOutputBuf, הצמדת ה-MISO תהיה גבוהה עד שהמאסטר יסיים את העסקה ב-SPI. זוהי שווה הערך הפונקציונלי של מרווח פנימי של aOutputBuf עם 0xFF בייט לאורך העסקה.

לאחר צפייה ב-aInputBufLen בייטים של aInputBuf מ-MOSI, המערכת תתעלם מכל הערכים הבאים של סיכת MOSI עד שהספק SPI יסיים את העסקה.

חשוב לשים לב שגם אם aInputBufLen או aOutputBufLen (או שניהם) ימוצו לפני שהספק SPI יסיים עסקה, עדיין צריך לעקוב אחר הגודל הנוכחי של העסקה כדי להעביר אותה לקריאה חוזרת (callback) מלאה של העסקה. למשל, אם הערך של aInputBufLen הוא 10 ו-aOutputBufLen שווה ל-20 והמאסטר הראשי של SPI מכפיל ב-30 בייטים, הערך 30 מועבר לקריאה חוזרת (callback) של העסקה במלואה.

אם מצביע NULL מועבר כ-aOutputBuf או aInputBuf, המשמעות היא שסמן המאגר לא אמור להשתנות מהערך הקודם/הנוכחי. במקרה כזה, יש להתעלם מארגומנט האורך המתאים. לדוגמה, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) משנה את מצביע הנתונים הזמני עבור מאגר הקלט ואת אורכו, אבל משאירה את הסמן של מאגר הפלט כמו קודם.

כל קריאה לפונקציה הזו במהלך ביצוע עסקה תגרום להתעלם מכל הארגומנטים וערך ההחזרה יהיה OT_ERROR_BUSY.

פרטים
פרמטרים
[in] aOutputBuf
כתיבת נתונים לסיכות MISO
[in] aOutputBufLen
גודל מאגר הפלט, בבייטים
[in] aInputBuf
נתונים לקריאה מקוד האימות של MOSI
[in] aInputBufLen
גודל מאגר הנתונים הזמני, בבייטים
[in] aRequestTransactionFlag
הערך הוא True אם יש להגדיר את ההפרעה למארח
ערכי החזרה
OT_ERROR_NONE
העסקה הושלמה בהצלחה.
OT_ERROR_BUSY
העסקה מתבצעת כרגע.
OT_ERROR_INVALID_STATE

מקורות מידע

נושאי עזר של OpenThread API מגיעים מקוד המקור, שזמין ב-GitHub. למידע נוסף או כדי להוסיף מידע למסמכים שלנו, יש לעיין במשאבים.