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

Typedefs

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 panjang yang diberikan.
otPlatSpiSlaveTransactionProcessCallback )(void *aContext) typedef
void(*
Dipanggil setelah panggilan balik lengkap transaksi dipanggil dan mengembalikan 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)
Inisialisasi antarmuka budak SPI.
otPlatSpiSlavePrepareTransaction (uint8_t *aOutputBuf, uint16_t aOutputBufLen, uint8_t *aInputBuf, uint16_t aInputBufLen, bool aRequestTransactionFlag)
Siapkan data untuk transaksi SPI selanjutnya.

Typedefs

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 panjang yang diberikan.

Data yang ditulis ke slave telah ditulis ke penunjuk 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 bisa dipanggil dari konteks ISR. Nilai yang dikembalikan dari fungsi ini menunjukkan jika ada pemrosesan lebih lanjut yang diperlukan. Jika TRUE dikembalikan, implementasi driver spi-slave platform harus menjalankan proses transaksi callback ( aProcessCallback disetel di otPlatSpiSlaveEnable() ) yang tidak seperti callback ini harus dipanggil dari konteks OS yang sama dengan yang dipanggil oleh OpenThread API / callback lainnya.

Detail
Parameter
[in] aContext
[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.
Kembali
TRUE jika setelah panggilan ini kembali, platform harus memanggil proses callback aProcessCallback , FALSE jika tidak ada yang diproses dan tidak perlu memanggil proses callback.

otPlatSpiSlaveTransactionProcessCallback

void(* otPlatSpiSlaveTransactionProcessCallback)(void *aContext)

Dipanggil setelah panggilan balik lengkap transaksi dipanggil dan mengembalikan TRUE untuk melakukan pemrosesan lebih lanjut yang diperlukan.

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

Detail
Parameter
[in] aContext

Fungsi

otPlatSpiSlaveDisable

void otPlatSpiSlaveDisable(
  void
)

Matikan dan nonaktifkan antarmuka budak SPI.

otPlatSpiSlaveEnable

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

Inisialisasi antarmuka budak SPI.

Perhatikan bahwa budak SPI tidak 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 membuang semua byte yang diterima.

Detail
Parameter
[in] aCompleteCallback
Pointer ke transaksi callback lengkap.
[in] aProcessCallback
Penunjuk untuk memproses panggilan balik.
[in] aContext
Penunjuk konteks yang akan diteruskan ke callback.
Kembalikan Nilai
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 selanjutnya.

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

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

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

Setelah byte aOutputBufLen dari aOutputBuf telah aOutputBuf , pin MISO harus disetel tinggi hingga master menyelesaikan transaksi SPI. Ini adalah padding fungsional yang setara dengan akhir aOutputBuf dengan 0xFF byte keluar sepanjang transaksi.

Setelah byte aInputBufLen dari aInputBuf dicatat dari MOSI, semua nilai berikutnya dari pin MOSI akan diabaikan hingga 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 transaksi callback lengkap. Misalnya, jika aInputBufLen sama dengan 10 dan aOutputBufLen sama dengan 20 dan master SPI menghabiskan waktu 30 byte, nilai 30 diteruskan ke callback penyelesaian transaksi.

Jika pointer NULL dikirimkan sebagai aOutputBuf atau aInputBuf itu berarti bahwa pointer buffer tidak boleh berubah dari nilai sebelumnya / saat ini. Dalam kasus ini, argumen panjang yang sesuai harus diabaikan. Misalnya, otPlatSpiSlavePrepareTransaction(NULL, 0, aInputBuf, aInputLen, false) mengubah penunjuk buffer masukan dan panjangnya tetapi tetap mempertahankan penunjuk buffer keluaran sama seperti sebelumnya.

Setiap panggilan ke fungsi ini saat transaksi sedang berlangsung akan menyebabkan semua argumen diabaikan dan nilai yang dikembalikan menjadi OT_ERROR_BUSY .

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