SPI 從屬處

這個模組包含 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 將為零。

您可以從 ISR 內容呼叫此回呼。此函式的傳回值會指出是否需要進一步處理。如果傳回 TRUE,平台螺旋驅動程式實作必須叫用交易程序回呼 (在 otPlatSpiSlaveEnable() 中設定 aProcessCallback),與此回呼不同,必須從呼叫任何其他 OpenThread API/回呼的 OS 環境相同的 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,以進行所需的進一步處理。

與可從任何 OS 結構定義呼叫的 otPlatSpiSlaveTransactionCompleteCallback 不同 (例如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 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 主要主啟動交易之前多次呼叫。每次對此函式發出成功呼叫都會導致系統捨棄先前呼叫中過去的值。

完成交易後沒有呼叫此函式的方式,與之前在緩衝區長度設為 0 且 aRequestTransactionFlag 設為 false 的情況下呼叫此函式的方式相同。

aOutputBufaOutputBufLen 位元組處理完畢後,MISO 圖釘將設為較高的金額,直到主要節點完成 SPI 交易為止。這相當於在交易期間與 aOutputBuf 結尾填補的 0xFF 個位元組。

當 MOSI 中將 aInputBuf 的 aInputBufLen 位元組加上時,系統會忽略 MOSI PIN 碼的所有後續值,直到 SPI 主要程序完成交易為止。

請注意,即使 aInputBufLenaOutputBufLen (或兩者) 在 SPI 主要完成交易前已用盡,仍必須追蹤交易的持續大小,以便傳送至交易完成回呼。舉例來說,如果 aInputBufLen 等於 10,而 aOutputBufLen 等於 20,而 SPI 主影格為 30 個位元組,則值 30 會傳遞至交易完成回呼。

如果 NULL 指標是以 aOutputBufaInputBuf 的形式傳入,代表緩衝區指標不應從先前的值/目前值變更。在這種情況下,應該忽略對應的長度引數。例如,otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) 會變更輸入緩衝區指標及其長度,但輸出緩衝區指標則與之前相同。

若在交易進行期間呼叫這個函式,將會造成所有引數遭到忽略,而且傳回值會是 OT_ERROR_BUSY

詳細說明
參數
[in] aOutputBuf
要寫入 MISO PIN 碼的資料
[in] aOutputBufLen
輸出緩衝區的大小 (以位元組為單位)
[in] aInputBuf
要讀取 MOSI PIN 碼的資料
[in] aInputBufLen
輸入緩衝區的大小 (以位元組為單位)
[in] aRequestTransactionFlag
如果必須設定主機中斷,請設為 true
傳回值
OT_ERROR_NONE
已成功完成交易。
OT_ERROR_BUSY
目前正在進行交易。
OT_ERROR_INVALID_STATE

資源

OpenThread API 參考資料主題源自原始碼,請前往 GitHub 取得。如要瞭解詳情或對說明文件做出貢獻,請參閱資源