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 從屬介面。
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
初始化 SPI 從屬介面。
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 交易。

寫入從從屬的資料寫入至先前呼叫 otPlatSpiSlavePrepareTransaction()aInputBuf 引數所指示的指標。

呼叫此函式後,otPlatSpiSlavePrepareTransaction() 無效,並且必須再次呼叫,才能讓下一筆交易生效。

請注意,即使未呼叫 otPlatSpiSlavePrepareTransaction(),系統一律會在交易結束時呼叫這個函式。在這種情況下,aOutputBufLenaInputBufLen 將為 0。

您可從 ISR 內容呼叫這個回呼。此函式的傳回值表示是否需要進一步處理。如果傳回 TRUE,平台 spi-slave 驅動程式的實作必須叫用交易處理程序回呼 (在 otPlatSpiSlaveEnable() 中設定 aProcessCallback),這點與呼叫其他 OpenThread API/callback 的 OS 結構定義不同。

詳細資料
參數
[in] aContext
內容指標已傳入 otPlatSpiSlaveEnable()
[in] aOutputBuf
上次呼叫至「otPlatSpiSlavePrepareTransaction()」時,aOutputBuf的值。
[in] aOutputBufLen
上次呼叫至「otPlatSpiSlavePrepareTransaction()」時,aOutputBufLen的值。
[in] aInputBuf
上次呼叫 otPlatSpiSlavePrepareTransaction() 的 aInputBuf 值。
[in] aInputBufLen
上次呼叫至 otPlatSpiSlavePrepareTransaction() 的 aInputBufLen 值
[in] aTransactionLength
完成交易的長度,以位元組為單位。
傳回
如果呼叫沒有任何結果,且不需叫用處理程序回呼,則在平台傳回此呼叫後,將為 TRUE。

otPlatSpiSlaveTransactionProcess 回呼

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

在呼叫交易完成回呼後叫用,並傳回 TRUE 執行進一步的處理作業。

有別於 otPlatSpiSlaveTransactionCompleteCallback,可從任何作業系統內容呼叫 (例如ISR) 所呼叫的回呼,就其必須和任何其他 OpenThread API/回呼

詳細資料
參數
[in] aContext
內容指標已傳入 otPlatSpiSlaveEnable()

函式

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

關閉並停用 SPI 從屬介面。

otPlatSpiSlave 啟用

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 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 交易的資料。

資料時間點「必須」持續有效,直到 SPI 從屬驅動程式呼叫交易完成的回呼為止,或是到下次呼叫 otPlatSpiSlavePrepareTransaction() 為止。

在 SPI 主要執行個體啟動交易之前,可能會多次呼叫這個函式。每次對這個函式執行 successful 呼叫都會導致先前呼叫的舊值遭到捨棄。

完成交易後並未呼叫此函式,就如同先前呼叫了此函式時,該緩衝區長度均設為 0 且 aRequestTransactionFlag 設為 false

aOutputBufaOutputBufLen 個位元組已逾時後,您必須在傳輸完成 SPI 交易前將 MISO 圖釘設為高。這個函式相當於將 aOutputBuf 結尾填充到交易長度的 0xFF 個位元組。

一旦 MOSI 完成 aInputBufLenInput af 的 Input 時鐘,系統就會忽略 MOSI 圖釘的所有後續值,直到 SPI 主完成交易為止。

請注意,即使 SPI 主完成交易前已用盡 aInputBufLenaOutputBufLen (或兩者皆有),系統仍會持續追蹤交易進行中的大小,以便傳遞至交易完成回呼。舉例來說,如果 aInputBufLen 等於 10 且 aOutputBufLen 等於 20,且 SPI 主逾時 30 個位元組,值 30 就會傳送至交易完成回呼。

如果 NULL 指標是以 aOutputBufaInputBuf 的形式傳遞,表示緩衝區不應變更其先前的值/目前值。在這種情況下,系統會忽略相對應的長度引數。例如,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

資源

OpenThread API 參考主題源自原始碼,可從 GitHub 取得。如要瞭解詳情或參閱說明文件,請參閱資源