Sejauh yang saya tahu, transmisi SPI untuk budak SPI bekerja seperti di bawah ini:
- Master memilih seorang budak menggunakan pin SS
- Master dan slave saling mengirim data secara bersamaan
- Master memulai transmisi jam dan data pada saat yang sama (tidak ada jam sebelum operasi penulisan)
- Master menghentikan transmisi kapan saja diinginkan (dengan menghentikan operasi penulisan dan pembuatan jam), bahkan jika budak memiliki lebih banyak data untuk dikirim.
Apakah ada konfigurasi budak SPI yang memungkinkan budak mengirim data tanpa izin master?
Saya hanya berpikir keras. Asumsikan bahwa hanya ada satu budak dan jam terus menerus disediakan oleh master dll.
Bahkan jika pernyataan yang diasumsikan benar, jangan master dan budak kehilangan sinkronisasi byte (yaitu menerima bit stream) karena tidak ada bit start-stop untuk SPI?
Saya mengajukan pertanyaan seperti itu karena saya telah membaca bagian berikut dari dokumen ini .
2.2 Contoh SPI
Contoh SPI terlampir menggambarkan penggunaan USART dalam mode sinkron. USART1 dikonfigurasi sebagai slave, sedangkan USART2 adalah master. Transaksi berikut terjadi:
- Transmisi data dari master ke slave.
- Transmisi data dari slave ke master.
- Transmisi data dari master ke slave dan dari slave ke master secara bersamaan.
Dokumen memberikan contoh SPI tetapi menyadari contoh menggunakan perangkat USART. Dan saya mendapatkan bahwa budak USART dapat memulai transmisi tanpa izin dari master.
Saya tidak dapat menemukan kode sumber yang dirujuk oleh dokumen.
sumber
Jawaban:
Tidak, dengan SPI, semua komunikasi dikendalikan oleh perangkat master. Anda benar bahwa master tidak bisa hanya menyediakan jam terus menerus; tidak akan ada cara untuk mendeteksi batas byte.
Perangkat slave akan sering memiliki pin output terpisah untuk memberi sinyal kepada master bahwa ia memiliki data yang tersedia. Pin ini terhubung ke input pada mikrokontroler dan sering digunakan sebagai interupsi.
Kemudian, perangkat dapat menegaskan pin, menyebabkan mikrokontroler untuk memutar bus SPI.
Untuk informasi lebih rinci, silakan baca :) Ini adalah versi penjelasan yang sedikit dimodifikasi yang ditemukan di sini :
Itu menggambarkan kasus umum. Mungkin ada kompleksitas tambahan. Sebagai contoh, beberapa IC slave sebenarnya akan mengeluarkan semacam byte status pada saat yang sama mereka menerima perintah dari master. Jadi, dalam hal ini, master tidak boleh membuang byte yang diterima pertama.
sumber
Tidak, master adalah orang yang melakukan arbitrase pada chipselects dan menggerakkan jam. Seorang budak akan selalu hanya mendengarkan jam dan memilih chip. Transfer data masih bisa menjadi dupleks penuh. Ada beberapa implementasi di mana jam bisa kontinu, tetapi tidak masalah karena chipselect digunakan untuk menyinkronkan batas byte. Tetapi kemudian ada sistem multimaster, jadi pada dasarnya Anda dapat memiliki beberapa mekanisme bagi perangkat untuk memutuskan siapa yang menjadi budak dan master. Atau cukup sertakan kabel "interupsi" yang terpisah untuk slave untuk memberi tahu master bahwa ia memiliki paket data untuk master.
sumber