Google is committed to advancing racial equity for Black communities. See how.

الرقيق 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 سوف يكون صفرا.

يمكن استدعاء رد الاتصال هذا من سياق ISR. تشير قيمة الإرجاع من هذه الوظيفة إلى ما إذا كانت هناك حاجة إلى معالجة أخرى. إذا تم إرجاع TRUE يجب أن يقوم تنفيذ برنامج تشغيل spi-slave للنظام الأساسي باستدعاء رد اتصال عملية المعاملة ( aProcessCallback تعيينه في otPlatSpiSlaveEnable() ) والذي على عكس رد الاتصال هذا يجب أن يتم استدعاؤه من نفس سياق نظام التشغيل الذي يسمى أي 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 إذا لم يكن هناك شيء aProcessCallback ولا حاجة لاستدعاء رد الاتصال بالعملية.

otPlatSpiSlaveTransactionProcess رد الاتصال

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

يتم استدعاؤه بعد استدعاء رد الاتصال الكامل للمعاملة وإرجاع TRUE للقيام بأي معالجة أخرى مطلوبة.

على عكس otPlatSpiSlaveTransactionCompleteCallback والذي يمكن استدعاؤه من أي سياق نظام تشغيل (مثل ISR) ، يجب استدعاء رد الاتصال هذا من نفس سياق نظام التشغيل مثل أي OpenThread API / رد اتصال آخر.

تفاصيل
المعلمات
[in] aContext
تم تمرير مؤشر السياق إلى otPlatSpiSlaveEnable() .

المهام

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

اغلاق وتعطيل واجهة SPI التابعة.

otPlatSpiSlaveEnable

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

تهيئة واجهة SPI التابعة.

لاحظ أن otPlatSPISlavePrepareTransaction() SPI ليس جاهزًا تمامًا حتى يتم إعداد معاملة باستخدام otPlatSPISlavePrepareTransaction() .

إذا otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all وحدات البايت 0xFF` وتتجاهل جميع البايتات المستلمة.

تفاصيل
المعلمات
[in] aCompleteCallback
مؤشر لاستكمال عملية رد الاتصال.
[in] aProcessCallback
مؤشر لمعالجة رد الاتصال.
[in] aContext
يتم تمرير مؤشر السياق إلى عمليات الاسترجاعات.
إرجاع القيم
OT_ERROR_NONE
تم تمكين واجهة SPI التابعة بنجاح.
OT_ERROR_ALREADY
واجهة SPI التابعة ممكّنة بالفعل.
OT_ERROR_FAILED
فشل في تمكين واجهة SPI التابعة.

otPlatSpiSlavePrepareTransaction

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

تحضير البيانات لمعاملة SPI التالية.

يجب أن تظل مؤشرات البيانات صالحة حتى يتم استدعاء رد الاتصال الكامل للمعاملة بواسطة برنامج التشغيل التابع لـ SPI ، أو حتى بعد الاستدعاء التالي لـ otPlatSpiSlavePrepareTransaction() .

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

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

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

بمجرد aInputBufLen بايت aInputBufLen من aInputBuf من MOSI ، يتم تجاهل جميع القيم اللاحقة من دبوس MOSI حتى ينتهي SPI الرئيسي من المعاملة.

لاحظ أنه حتى إذا تم aInputBufLen أو aOutputBufLen (أو كليهما) قبل أن ينهي مدير SPI المعاملة ، فلا يزال يتعين تتبع الحجم المستمر للمعاملة ليتم تمريره إلى رد الاتصال الكامل للمعاملة. على سبيل المثال ، إذا كانت 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
اضبط على صواب إذا كان يجب تعيين مقاطعة المضيف
إرجاع القيم
OT_ERROR_NONE
تم إعداد الصفقة بنجاح.
OT_ERROR_BUSY
صفقة قيد التقدم حاليا.
OT_ERROR_INVALID_STATE
لم يتم استدعاءotPlatSpiSlaveEnable () .