Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Budak SPI

Modul ini mencakup abstraksi platform untuk komunikasi budak 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 ditentukan.
otPlatSpiSlaveTransactionProcessCallback)(void *aContext) typedef
void(*
Dipanggil setelah callback selesai transaksi dipanggil dan menampilkan TRUE untuk melakukan pemrosesan lebih lanjut yang diperlukan.

Fungsi

otPlatSpiSlaveDisable(void)
void
Matikan dan nonaktifkan antarmuka budak 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)
Siapkan 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 ditentukan.

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

Setelah fungsi ini dipanggil, otPlatSpiSlavePrepareTransaction() 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 seperti itu, aOutputBufLen dan aInputBufLen akan menjadi nol.

Callback ini dapat dipanggil dari konteks ISR. Nilai hasil dari fungsi ini menunjukkan apakah pemrosesan lebih lanjut diperlukan. 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 dengan yang memanggil callback/API OpenThread lainnya.

Detail
Parameter
[in] aContext
Pointer konteks 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
Panjang transaksi yang diselesaikan, dalam byte.
Menampilkan
TRUE jika setelah panggilan ini menampilkan kembali 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 selesai transaksi 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 diteruskan ke otPlatSpiSlaveEnable().

Fungsi

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Matikan dan nonaktifkan antarmuka budak SPI.

otPlatSpiSlaveAktifkan

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

Menginisialisasi antarmuka slave SPI.

Perlu diketahui bahwa SPI slave 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 menghapus semua byte yang diterima.

Detail
Parameter
[in] aCompleteCallback
Pointer ke callback penyelesaian transaksi.
[in] aProcessCallback
Pointer untuk memproses callback.
[in] aContext
Pointer konteks yang akan diteruskan ke callback.
Nilai yang Ditampilkan
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
)

Siapkan data untuk transaksi SPI berikutnya.

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

Fungsi ini dapat dipanggil lebih dari sekali sebelum master SPI memulai transaksi. Setiap panggilan berhasil ke fungsi ini akan menyebabkan nilai sebelumnya dari panggilan sebelumnya akan dihapus.

Tidak memanggil fungsi ini setelah transaksi yang selesai sama seperti jika sebelumnya fungsi dipanggil dengan kedua panjang buffer ditetapkan ke nol dan aRequestTransactionFlag ditetapkan ke false.

Setelah aOutputBufLen byte dari aOutputBuf dikirimkan, pin MISO harus disetel tinggi hingga master menyelesaikan transaksi SPI. Ini adalah fungsi yang setara dengan padding akhir aOutputBuf dengan 0xFF byte keluar ke panjang transaksi.

Setelah aInputBufLen byte aInputBuf telah dimasukkan dari MOSI, semua nilai berikutnya dari pin MOSI diabaikan sampai master SPI menyelesaikan transaksi.

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

Jika pointer NULL diteruskan sebagai aOutputBuf atau aInputBuf, artinya buffer buffer 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 buffer input dan panjangnya, tetapi tetap mempertahankan pointer buffer output seperti sebelumnya.

Setiap panggilan 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 buffer output, dalam byte
[in] aInputBuf
Data untuk dibaca dari pin MOSI
[in] aInputBufLen
Ukuran buffer input, dalam byte
[in] aRequestTransactionFlag
Tetapkan ke benar jika gangguan host harus disetel
Nilai yang Ditampilkan
OT_ERROR_NONE
Transaksi berhasil disiapkan.
OT_ERROR_BUSY
Transaksi sedang berlangsung.
OT_ERROR_INVALID_STATE
otPlatSpiSlaveEnable() belum dipanggil.

Resource

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