SPI Slave

تتضمن هذه الوحدة تجريد النظام الأساسي لاتصالات رقيق واجهة 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)
تحضير البيانات لمعاملة واجهة موفر الخدمة التالية.

تحديدات النوع

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، يجب أن يستدعي تنفيذ برنامج تشغيل الرقيقة الخاص بالنظام الأساسي استدعاء استدعاء عملية المعاملة (aProcessCallback الذي تم ضبطه في otPlatSpiSlaveEnable()) والذي يجب أن يتم طلبه من سياق نظام التشغيل نفسه الذي يتم استدعاؤه من خلال أي واجهة برمجة تطبيقات أو معاودة الاتصال على OpenThread أخرى.

التفاصيل
المَعلمات
[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)، يجب استدعاء معاودة الاتصال هذه من سياق نظام التشغيل نفسه مثل أي واجهة برمجة تطبيقات أو معاودة الاتصال عبر 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
مؤشر لمعالجة معاودة الاتصال.
[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 معاودة الاتصال بإكمال المعاملة أو إلى أن يتم الاتصال بعد المكالمة التالية إلى otPlatSpiSlavePrepareTransaction().

قد يتم طلبه أكثر من مرة قبل أن يبدأ مشرف واجهة برمجة التطبيقات العملية المعاملة. سيؤدي كل استدعاء ناجح لهذه الدالة إلى تجاهل القيم السابقة من عمليات الاستدعاء السابقة.

عدم استدعاء هذه الدالة بعد معاملة مكتملة هو نفسه كما لو تم استدعاء هذه الدالة في السابق مع ضبط أطوال المخزن المؤقت على صفر وضبط aRequestTransactionFlag على false.

بعد تسجيل الخروج من aOutputBufLen بايت من aOutputBuf، سيتم ضبط رقم التعريف الشخصي MISO على "مرتفع" إلى أن ينهي المشرف الرئيسي معاملة واجهة SPI. هذه المكافئات الوظيفية هي المساحة المتروكة نهاية aOutputBuf مع ترك 0xFF بايت على طول المعاملة.

بعد تسجيل aInputBufLen بايت من aInputBuf من MOSI، يتم تجاهل جميع القيم اللاحقة من رقم التعريف الشخصي MOSI حتى ينهي الصفحة الرئيسية لواجهة برمجة التطبيقات (SPI) المعاملة.

تجدر الإشارة إلى أنّه حتى في حال استنفاد aInputBufLen أو aOutputBufLen (أو كليهما) قبل أن ينهي مشرف واجهة برمجة التطبيقات الرئيسي إحدى المعاملات، يجب تتبُّع الحجم الجاري للمعاملة حتى يتم تمريره إلى معاودة الاتصال كاملةً بالمعاملة. على سبيل المثال، إذا كانت aInputBufLen تساوي 10 وaOutputBufLen تساوي 20 وكانت واجهة SPI الرئيسية تبلغ 30 بايت، يتم تمرير القيمة 30 إلى معاودة الاتصال بإكمال المعاملة.

إذا تم تمرير مؤشر NULL كـ aOutputBuf أو aInputBuf، يعني ذلك أنّه يجب عدم تغيير المؤشر المخزن المؤقت عن قيمته السابقة/الحالية. في هذه الحالة، يجب تجاهل وسيطة length (الطول) المقابلة. على سبيل المثال، تغيِّر otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) مؤشر المخزن المؤقت للإدخال وطوله، ولكنها تحافظ على مؤشر المخزن المؤقت للمخرجات كما كان يحدث من قبل.

سيؤدي أي استدعاء لهذه الدالة أثناء إجراء معاملة إلى تجاهل جميع الوسيطات لتصبح القيمة المعروضة OT_ERROR_BUSY.

التفاصيل
المَعلمات
[in] aOutputBuf
تتم كتابة البيانات إلى رقم التعريف الشخصي MISO
[in] aOutputBufLen
حجم المخزن المؤقت للمخرجات، بالبايت
[in] aInputBuf
البيانات التي ستتم قراءتها من رقم التعريف الشخصي لمعيار MOSI
[in] aInputBufLen
حجم المخزن المؤقت للإدخال، بالبايت
[in] aRequestTransactionFlag
يتم ضبطه على "صحيح" إذا كان يجب ضبط مقاطعة المضيف.
قيم الإرجاع
OT_ERROR_NONE
تم إعداد المعاملة بنجاح.
OT_ERROR_BUSY
هناك معاملة قيد التقدم حاليًا.
OT_ERROR_INVALID_STATE
لم يتم استدعاء otPlatSpiSlaveEnable().

المراجِع

تنشأ المواضيع المرجعية لواجهة برمجة تطبيقات OpenThread من رمز المصدر المتاح على GitHub. للحصول على مزيد من المعلومات أو للمساهمة في مستنداتنا، يمكنك الاطّلاع على المراجع.