SPI スレーブ

このモジュールには、SPI スレーブ通信のためのプラットフォーム抽象化が含まれています。

概要

Typedef

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 トランザクション用にデータを準備します。

Typedef

otPlatSpiSlaveTransactionCompleteCallback

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

指定された長さで SPI トランザクションが完了したことを示します。

スレーブに書き込まれたデータは、前回の otPlatSpiSlavePrepareTransaction() 呼び出しの aInputBuf 引数で指定されたポインタに書き込まれています。

この関数が呼び出されると otPlatSpiSlavePrepareTransaction() は無効になります。次のトランザクションを有効にするには、再度呼び出す必要があります。

この関数は、otPlatSpiSlavePrepareTransaction() がまだ呼び出されていなくても、トランザクションの終了時に常に呼び出されます。このような場合、aOutputBufLenaInputBufLen はゼロになります。

このコールバックは ISR コンテキストから呼び出すことができます。この関数の戻り値は、さらに処理が必要かどうかを示します。TRUE が返された場合、プラットフォームの spi-slave ドライバの実装は、トランザクション プロセス コールバック(otPlatSpiSlaveEnable() で設定された aProcessCallback)を呼び出す必要があります。このコールバックは、他の OpenThread API/コールバックが呼び出されるのと同じ OS コンテキストから呼び出す必要があります。

詳細
パラメータ
[in] aContext
コンテキスト ポインタが otPlatSpiSlaveEnable() に渡されました。
[in] aOutputBuf
前回の otPlatSpiSlavePrepareTransaction() 呼び出しからの aOutputBuf の値。
[in] aOutputBufLen
前回の otPlatSpiSlavePrepareTransaction() 呼び出しからの aOutputBufLen の値。
[in] aInputBuf
前回の otPlatSpiSlavePrepareTransaction() 呼び出しからの aInputBuf の値。
[in] aInputBufLen
前回の otPlatSpiSlavePrepareTransaction() 呼び出しからの aInputBufLen の値
[in] aTransactionLength
完了したトランザクションの長さ(バイト単位)。
戻り値
この呼び出しの後にプロセス コールバック aProcessCallback を呼び出す必要がある場合は TRUE、処理するものがなく、プロセス コールバックを呼び出す必要がない場合は FALSE です。

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

トランザクション完了コールバックが呼び出された後に呼び出され、TRUE を返して、必要な処理を続行します。

otPlatSpiSlaveTransactionCompleteCallback は任意の OS コンテキスト(ISR など)の場合、このコールバックは、他の OpenThread API/コールバックと同じ OS コンテキストから呼び出されなければなりません。

詳細
パラメータ
[in] aContext
コンテキスト ポインタが otPlatSpiSlaveEnable() に渡されました。

関数

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

SPI スレーブ インターフェースをシャットダウンして無効にします。

otPlatSpiSlaveEnable

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

SPI スレーブ インターフェースを初期化します。

otPlatSPISlavePrepareTransaction() を使用してトランザクションを準備するまで、SPI スレーブは完全に準備できるわけではありません。

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 マスターがトランザクションを開始する前に複数回呼び出すことができます。この関数が成功するたびに、それ以前の呼び出しの値は破棄されます。

トランザクションの完了後にこの関数を呼び出さないことは、以前にこの関数を呼び出した際に、バッファ長を 0 に設定し、aRequestTransactionFlagfalse に設定して呼び出した場合と同じです。

aOutputBufaOutputBufLen バイトがクロックアウトされたら、マスターが SPI トランザクションを終了するまで MISO ピンをハイレベルに設定します。これは、aOutputBuf の末尾をトランザクションの長さまで 0xFF バイトでパディングすることと同等です。

aInputBufLen バイトの aInputBuf が MOSI からクロックインされると、SPI マスターがトランザクションを終了するまで、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
ホスト割り込みを設定する必要がある場合は true に設定します。
戻り値
OT_ERROR_NONE
トランザクションが正常に準備されました。
OT_ERROR_BUSY
現在、トランザクションが進行中です。
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() が呼び出されていない。

関連情報

OpenThread API リファレンスのトピックは、GitHub で入手できるソースコードに由来しています。 詳細について、またはドキュメントへの投稿については、リソースをご覧ください。