עבד ל-SPI

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

סיכום

ערכי דף

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(*
מופעלת קריאה חוזרת אחרי השלמת העסקה ומחזירה את 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 הבאה.

ערכי דף

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 יהיו אפס.

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

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

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

מופעלת קריאה חוזרת אחרי השלמת העסקה ומחזירה את TRUE כדי לבצע עיבוד נוסף.

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

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

פונקציות

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

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

otPlatSpiSlaveEnable

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
המצביע לעיבוד של הקריאה החוזרת (callback).
[in] aContext
הסמן לפי הקשר שיועבר להתקשרות חזרה.
ערכים מוחזרים
OT_ERROR_NONE
ממשק ה-SPI Slave הופעל בהצלחה.
OT_ERROR_ALREADY
ממשק SPI Slave כבר מופעל.
OT_ERROR_FAILED
הפעלת ממשק SPI Slave נכשלה.

otPlatSpiSlavePrepareTransaction

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
לא בוצעה קריאה ל-otPlatSpiSlaveEnable().

מקורות מידע

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