Slave SPI

Modul ini mencakup abstraksi platform untuk komunikasi slave SPI.

Ringkasan

Typedef

otPlatSpiSlaveTransactionCompleteCallback)(void *aContext, uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, uint16_t aTransactionLength) typedef
bool(*
Menunjukkan bahwa transaksi SPI telah selesai dengan durasi yang diberikan.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Dipanggil setelah callback transaksi selesai dipanggil dan menampilkan TRUE untuk melakukan pemrosesan lebih lanjut yang diperlukan.

Fungsi

otPlatSpiSlaveDisable(void)
void
Matikan dan nonaktifkan antarmuka slave SPI.
otPlatSpiSlaveEnable(otPlatSpiSlaveTransactionCompleteCallback aCompleteCallback, otPlatSpiSlaveTransactionProcessCallback aProcessCallback, void *aContext)
Menginisialisasi antarmuka slave SPI.
otPlatSpiSlavePrepareTransaction(uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Menyiapkan data untuk transaksi SPI berikutnya.

Typedef

otPlatSpiSlaveTransactionCompleteCallback

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

Menunjukkan bahwa transaksi SPI telah selesai dengan durasi yang diberikan.

Data yang ditulis ke slave telah ditulis ke pointer yang ditunjukkan oleh argumen aInputBuf ke panggilan sebelumnya ke otPlatSpiSlavePrepareTransaction().

Setelah fungsi ini dipanggil, otPlatSpiSlavePrepareTransaction() menjadi tidak valid dan harus dipanggil lagi agar transaksi berikutnya valid.

Perhatikan bahwa fungsi ini selalu dipanggil di akhir transaksi, meskipun otPlatSpiSlavePrepareTransaction() belum dipanggil. Dalam kasus tersebut, aOutputBufLen dan aInputBufLen akan menjadi nol.

Callback ini dapat dipanggil dari konteks ISR. Nilai hasil dari fungsi ini menunjukkan apakah diperlukan pemrosesan lebih lanjut. Jika TRUE ditampilkan, implementasi driver spi-slave platform harus memanggil callback proses transaksi (aProcessCallback yang ditetapkan di otPlatSpiSlaveEnable()) yang tidak seperti callback ini harus dipanggil dari konteks OS yang sama tempat callback/OpenThread API lainnya dipanggil.

Detail
Parameter
[in] aContext
Pointer konteks yang diteruskan ke otPlatSpiSlaveEnable().
[in] aOutputBuf
Nilai aOutputBuf dari panggilan terakhir ke otPlatSpiSlavePrepareTransaction().
[in] aOutputBufLen
Nilai aOutputBufLen dari panggilan terakhir ke otPlatSpiSlavePrepareTransaction().
[in] aInputBuf
Nilai aInputBuf dari panggilan terakhir ke otPlatSpiSlavePrepareTransaction().
[in] aInputBufLen
Nilai aInputBufLen dari panggilan terakhir ke otPlatSpiSlavePrepareTransaction()
[in] aTransactionLength
Durasi transaksi yang diselesaikan, dalam byte.
Hasil
TRUE jika setelah panggilan ini menampilkan platform harus memanggil callback proses aProcessCallback, FALSE jika tidak ada yang diproses dan tidak perlu memanggil callback proses.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Dipanggil setelah callback transaksi selesai dipanggil dan menampilkan TRUE untuk melakukan pemrosesan lebih lanjut yang diperlukan.

Tidak seperti otPlatSpiSlaveTransactionCompleteCallback yang dapat dipanggil dari konteks OS apa pun (misalnya, ISR), callback ini HARUS dipanggil dari konteks OS yang sama dengan OpenThread API/callback lainnya.

Detail
Parameter
[in] aContext
Pointer konteks yang diteruskan ke otPlatSpiSlaveEnable().

Fungsi

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Matikan dan nonaktifkan antarmuka slave SPI.

otPlatSpiSlaveEnable

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

Menginisialisasi antarmuka slave SPI.

Perhatikan bahwa slave SPI belum sepenuhnya siap hingga transaksi disiapkan menggunakan otPlatSPISlavePrepareTransaction().

Jika otPlatSPISlavePrepareTransaction() is not called before the master begins a transaction, the resulting SPI transaction will send all0xFF` byte dan hapus semua byte yang diterima.

Detail
Parameter
[in] aCompleteCallback
Pointer ke callback transaksi selesai.
[in] aProcessCallback
Pointer untuk memproses callback.
[in] aContext
Pointer konteks yang akan diteruskan ke callback.
Nilai Pengembalian
OT_ERROR_NONE
Berhasil mengaktifkan antarmuka SPI Slave.
OT_ERROR_ALREADY
Antarmuka SPI Slave sudah diaktifkan.
OT_ERROR_FAILED
Gagal mengaktifkan antarmuka SPI Slave.

otPlatSpiSlavePrepareTransaction

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

Menyiapkan data untuk transaksi SPI berikutnya.

Pointer data HARUS tetap valid hingga callback penyelesaian transaksi dipanggil oleh driver slave SPI, atau sampai setelah panggilan berikutnya ke otPlatSpiSlavePrepareTransaction().

Dapat dipanggil lebih dari sekali sebelum master SPI menginisiasi transaksi. Setiap panggilan yang berhasil ke fungsi ini akan menyebabkan nilai sebelumnya dari panggilan sebelumnya dihapus.

Jika fungsi ini tidak dipanggil setelah transaksi selesai, sama seperti jika fungsi ini sebelumnya dipanggil dengan kedua panjang buffer disetel ke nol dan aRequestTransactionFlag disetel ke false.

Setelah waktu tunggu aOutputBufLen byte dari aOutputBuf habis, pin MISO harus ditetapkan ke tinggi hingga master menyelesaikan transaksi SPI. Fungsi ini setara dengan padding akhir aOutputBuf dengan 0xFF byte sepanjang transaksi.

Setelah aInputBufLen byte aInputBuf di-clock dari MOSI, semua nilai berikutnya dari pin MOSI akan diabaikan sampai master SPI menyelesaikan transaksi.

Perhatikan bahwa meskipun aInputBufLen atau aOutputBufLen (atau keduanya) habis sebelum master SPI menyelesaikan transaksi, ukuran transaksi yang sedang berjalan harus tetap dilacak untuk diteruskan ke callback penyelesaian transaksi. Misalnya, jika aInputBufLen sama dengan 10 dan aOutputBufLen sama dengan 20 dan master SPI mencatatkan 30 byte, nilai 30 akan diteruskan ke callback penyelesaian transaksi.

Jika pointer NULL diteruskan sebagai aOutputBuf atau aInputBuf, artinya pointer buffer tersebut tidak boleh berubah dari nilai sebelumnya/saat ini. Dalam hal ini, argumen panjang yang sesuai harus diabaikan. Misalnya, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) mengubah pointer buffering input dan panjangnya, tetapi mempertahankan pointer buffer output tetap sama seperti sebelumnya.

Panggilan apa pun ke fungsi ini saat transaksi sedang berlangsung akan menyebabkan semua argumen diabaikan dan nilai yang ditampilkan menjadi OT_ERROR_BUSY.

Detail
Parameter
[in] aOutputBuf
Data yang akan ditulis ke pin MISO
[in] aOutputBufLen
Ukuran buffering output, dalam byte
[in] aInputBuf
Data yang akan dibaca dari pin MOSI
[in] aInputBufLen
Ukuran buffering input, dalam byte
[in] aRequestTransactionFlag
Setel ke true jika interupsi host harus disetel
Nilai Pengembalian
OT_ERROR_NONE
Transaksi berhasil disiapkan.
OT_ERROR_BUSY
Transaksi sedang berlangsung.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() belum dipanggil.

Referensi

Topik Referensi OpenThread API berasal dari kode sumber yang tersedia di GitHub. Untuk informasi selengkapnya, atau untuk berkontribusi pada dokumentasi kami, lihat Referensi.