Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

SPI從機

該模塊包括用於SPI從設備通信的平台抽象。

概要

類型定義

otPlatSpiSlaveTransactionCompleteCallback )(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength)類型定義
bool(*
指示SPI事務已按照給定的長度完成。
otPlatSpiSlaveTransactionProcessCallback )(void *aContext)類型定義
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事務已按照給定的長度完成。

寫入從屬設備的數據已被寫入到otPlatSpiSlavePrepareTransaction()的上一次調用的aInputBuf參數所指示的指針。

一旦調用此函數,則otPlatSpiSlavePrepareTransaction()無效,必須再次調用該函數才能使下一個事務有效。

請注意,即使尚未調用otPlatSpiSlavePrepareTransaction() ,也始終在事務結束時調用此函數。在這種情況下, aOutputBufLenaInputBufLen將為零。

可以從ISR上下文中調用此回調。該函數的返回值指示是否需要進一步處理。如果TRUE返回平台SPI -從驅動程序實現必須調用交易過程中的回調( aProcessCallback在設置otPlatSpiSlaveEnable()它不像這個回調必須來自同一OS背景下,任何其他API的OpenThread /調用回調函數被調用)。

細節
參量
[in] aContext
上下文指針傳遞到otPlatSpiSlaveEnable()
[in] aOutputBuf
上次調用otPlatSpiSlavePrepareTransaction() aOutputBuf值。
[in] aOutputBufLen
上次調用otPlatSpiSlavePrepareTransaction() aOutputBufLen值。
[in] aInputBuf
上次調用otPlatSpiSlavePrepareTransaction() aInputBuf的值。
[in] aInputBufLen
[in] aTransactionLength
已完成事務的長度(以字節為單位)。
退貨
如果在此調用返回之後平台應調用流程回調aProcessCallbackaProcessCallback TRUE;如果沒有要處理的內容且無需調用流程回調​​, aProcessCallback FALSE。

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

在調用事務完成回調後調用,並返回TRUE以進行所需的任何進一步處理。

與可以從任何OS上下文(例如ISR)調用的otPlatSpiSlaveTransactionCompleteCallback不同,此回調必須與任何其他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主設備啟動事務之前,可能會多次調用此函數。對該函數的每次成功調用都會導致早期調用中的先前值被丟棄。

在完成事務之後不調用此函數的方式與以前調用此函數的方式相同,即兩個緩衝區的長度都設置為零,而aRequestTransactionFlag設置為false

一旦aOutputBufLen字節的aOutputBuf已同步輸出,MISO引腳應設置為高,直到主結束SPI交易。這在功能上等效於將aOutputBuf的末尾填充0xFF字節到事務的長度。

從MOSI時鐘輸入aInputBufLen字節後,將忽略MOSI引腳的所有後續值,直到SPI主設備完成事務為止。

請注意,即使在SPI主設備完成事務之前, aInputBufLenaOutputBufLen (或兩者)都已耗盡,仍必須跟踪正在進行的事務大小,以將其傳遞給事務完成回調。例如,如果aInputBufLen等於10, aOutputBufLen等於20,並且SPI主設備輸出30個字節,則值30將傳遞到事務完成回調。

如果將NULL指針作為aOutputBufaInputBuf則意味著該緩衝區指針不應與其先前/當前值發生變化。在這種情況下,應忽略相應的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