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)
|
typedefbool(*
Menunjukkan bahwa transaksi SPI telah selesai dengan durasi yang diberikan. |
otPlatSpiSlaveTransactionProcessCallback)(void *aContext)
|
typedefvoid(*
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 |
|
||||||||||||
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 |
|
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 all
0xFF` byte dan hapus semua byte yang diterima.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai Pengembalian |
|
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 |
|
||||||||||
Nilai Pengembalian |
|
Referensi
Topik Referensi OpenThread API berasal dari kode sumber yang tersedia di GitHub. Untuk informasi selengkapnya, atau untuk berkontribusi pada dokumentasi kami, lihat Referensi.