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 all0xFF` 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.