SPI Slave

این ماژول شامل انتزاع پلت فرم برای ارتباطات برده SPI است.

خلاصه

Typedefs

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 Slave را خاموش و غیرفعال کنید.
otPlatSpiSlaveEnable ( otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
رابط SPI Slave را راه اندازی کنید.
otPlatSpiSlavePrepareTransaction (uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
داده ها را برای تراکنش بعدی SPI آماده کنید.

Typedefs

otPlatSpiSlaveTransactionCompleteCallback

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

نشان می دهد که یک تراکنش SPI با طول داده شده تکمیل شده است.

داده‌های نوشته شده در Slave روی اشاره‌گر نوشته شده توسط آرگومان aInputBuf برای فراخوانی قبلی otPlatSpiSlavePrepareTransaction() نوشته شده است.

پس از فراخوانی این تابع، otPlatSpiSlavePrepareTransaction() نامعتبر است و باید دوباره فراخوانی شود تا تراکنش بعدی معتبر باشد.

توجه داشته باشید که این تابع همیشه در پایان تراکنش فراخوانی می شود، حتی اگر otPlatSpiSlavePrepareTransaction() هنوز فراخوانی نشده باشد. در چنین مواردی، aOutputBufLen و aInputBufLen صفر خواهند بود.

این callback را می توان از زمینه ISR فراخوانی کرد. مقدار بازگشتی از این تابع نشان می دهد که آیا پردازش بیشتری لازم است یا خیر. اگر TRUE برگردانده شود، پیاده‌سازی درایور spi-slave پلتفرم باید فراخوانی فرآیند تراکنش را فراخوانی کند ( aProcessCallback تنظیم شده در otPlatSpiSlaveEnable() ) که برخلاف این callback باید از همان زمینه سیستم‌عامل فراخوانی شود که هر OpenThread API/callback دیگری فراخوانی می‌شود.

جزئیات
مولفه های
[in] aContext
نشانگر زمینه به otPlatSpiSlaveEnable() منتقل شد.
[in] aOutputBuf
مقدار aOutputBuf از آخرین تماس با otPlatSpiSlavePrepareTransaction() .
[in] aOutputBufLen
مقدار aOutputBufLen از آخرین تماس با otPlatSpiSlavePrepareTransaction() .
[in] aInputBuf
مقدار aInputBuf از آخرین تماس با otPlatSpiSlavePrepareTransaction() .
[in] aInputBufLen
مقدار aInputBufLen از آخرین تماس با otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
طول تراکنش تکمیل شده، بر حسب بایت.
برمی گرداند
درست است اگر پس از این فراخوانی، پلت فرم باید فراخوانی فرآیند را فراخوانی کند aProcessCallback ، اگر چیزی برای پردازش وجود نداشته باشد و نیازی به فراخوانی فراخوانی فرآیند نباشد، نادرست است.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

پس از فراخوانی کامل یک تراکنش فراخوانی می‌شود و برای انجام پردازش‌های بیشتر مورد نیاز TRUE برمی‌گرداند.

برخلاف otPlatSpiSlaveTransactionCompleteCallback که می‌تواند از هر زمینه سیستم‌عاملی (مثلاً ISR) فراخوانی شود، این فراخوانی باید از همان زمینه سیستم‌عامل مانند هر OpenThread API/callback دیگر فراخوانی شود.

جزئیات
مولفه های
[in] aContext
نشانگر زمینه به otPlatSpiSlaveEnable() منتقل شد.

کارکرد

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

رابط SPI Slave را خاموش و غیرفعال کنید.

otPlatSpiSlaveEnable

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

رابط SPI Slave را راه اندازی کنید.

توجه داشته باشید که SPI Slave به طور کامل آماده نیست تا زمانی که تراکنش با استفاده از otPlatSPISlavePrepareTransaction() آماده شود.

اگر otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all و همه بایت های دریافتی را دور می زند.

جزئیات
مولفه های
[in] aCompleteCallback
اشاره گر برای تراکنش تماس کامل.
[in] aProcessCallback
اشاره گر برای پردازش تماس برگشتی.
[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 باید بالا تنظیم شود تا زمانی که Master تراکنش SPI را به پایان برساند. این معادل عملکردی پر کردن انتهای aOutputBuf با بایت 0xFF به طول تراکنش است.

هنگامی که بایت های aInputBufLen از aInputBuf از MOSI وارد شدند، تمام مقادیر بعدی از پین MOSI نادیده گرفته می شوند تا زمانی که SPI Master تراکنش را به پایان برساند.

توجه داشته باشید که حتی اگر aInputBufLen یا aOutputBufLen (یا هر دو) قبل از پایان دادن به تراکنش توسط SPI Master تمام شود، همچنان باید اندازه جاری تراکنش را پیگیری کرد تا به تراکنش برگشتی کامل ارسال شود. به عنوان مثال، اگر aInputBufLen برابر با 10 و aOutputBufLen برابر با 20 و کلاک اصلی SPI 30 بایت باشد، مقدار 30 به بازخوانی کامل تراکنش ارسال می شود.

اگر یک اشاره گر 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 سرچشمه می گیرند. برای اطلاعات بیشتر، یا مشارکت در اسناد ما، به منابع مراجعه کنید.