Sinyal spi flash selama operasi normal. Apa itu antarmuka SPI

SPI (Serial Peripheral Interface) adalah standar transfer data serial, sinkron, dan dupleks penuh yang dikembangkan oleh Motorola untuk menyediakan antarmuka mikrokontroler dan periferal yang mudah dan murah. SPI juga kadang-kadang disebut sebagai antarmuka empat kawat.SPI adalah protokol sinkron di mana setiap transmisi disinkronkan ke sinyal clock umum yang dihasilkan oleh host (prosesor). Periferal penerima (budak) menyinkronkan penerimaan urutan bit dengan sinyal clock. Beberapa IC dapat dihubungkan ke antarmuka periferal serial tunggal dari IC master. Master memilih budak untuk mengirim dengan mengaktifkan sinyal pemilihan chip pada chip budak. Periferal yang tidak dipilih oleh prosesor tidak berpartisipasi dalam transfer SPI.
SPI menggunakan empat sinyal digital:

  • MOSI atau SI - output master, input slave (English Master Out Slave In). Berfungsi untuk mentransfer data dari master ke slave;
  • SUP KEDELAI JEPANG atau SO - input master, output slave (English Master In Slave Out). Berfungsi untuk mentransfer data dari slave ke master.
  • SCK atau SCLK - sinyal jam serial (eng. Jam Serial). Berfungsi untuk mengirimkan sinyal clock untuk perangkat slave.
  • CS atau SS - pemilihan chip, pemilihan slave (English Chip Select, Slave Select) Sebagai aturan, pemilihan chip dibuat dengan level logika rendah.

Tergantung pada kombinasi polaritas dan fase clock, ada empat mode operasi SPI.

modus SPI diagram waktu
modus SPI0

modus SPI1
Tingkat pulsa aktif tinggi.

modus SPI2

Jepret dulu, lalu geser.

modus SPI3
Tingkat pulsa aktif rendah.
Pergeseran pertama, lalu jepret.

Tabel menerima:

  • MSB - bit paling signifikan;
  • LSB adalah bit yang paling tidak signifikan.

Master harus menyesuaikan dengan mode yang digunakan oleh slave.
Saat bertukar data melalui antarmuka SPI, mikrokontroler dapat beroperasi sebagai master (mode Master) atau sebagai budak (mode Slave). Dalam hal ini, pengguna dapat mengatur parameter berikut:

  • mode operasi sesuai dengan tabel;
  • kecepatan transmisi;
  • format transmisi (dari bit yang paling tidak signifikan ke yang paling signifikan atau sebaliknya).

Koneksi dua mikrokontroler sesuai dengan struktur master - slave melalui antarmuka SPI dilakukan sesuai dengan skema berikut.

Pin SCK, CS untuk mikrokontroler master adalah output, dan mikrokontroler slave adalah input.

Transfer data dilakukan sebagai berikut. Saat menulis ke register data SPI dari mikrokontroler master, generator sinyal clock dari modul SPI dimulai, dan data mulai dikeluarkan bit demi bit ke pin MOSI dan, karenanya, ke pin MOSI dari slave mikrokontroler. Setelah mengeluarkan bit terakhir dari byte saat ini, generator sinyal jam berhenti dengan pengaturan simultan dari flag "End of transmission" ke "1". Jika interupsi dari modul SPI didukung dan diaktifkan, permintaan interupsi dibuat. Setelah itu, mikrokontroler master dapat mulai mentransmisikan byte berikutnya, atau, dengan menerapkan tegangan level logika "1" ke input SS dari slave, memasukkannya ke status menunggu.

Bersamaan dengan transfer data dari master ke slave, terjadi transfer ke arah yang berlawanan, asalkan terdapat tegangan level rendah pada input SS dari slave. Dengan demikian, dalam setiap siklus shift, data dipertukarkan antar perangkat. Pada akhir setiap siklus, flag interupsi diatur ke "1" di mikrokontroler master dan budak. Byte yang diterima disimpan dalam buffer penerima untuk digunakan nanti.

Saat menerima data, byte yang diterima harus dibaca dari register data SPI sebelum bit terakhir dari byte berikutnya masuk ke register geser. Jika tidak, byte pertama akan hilang.

Pin SS adalah untuk memilih slave yang aktif dan selalu menjadi input dalam mode Slave. Setiap kali pin SS diberi energi ke logika 1, modul SPI direset. Jika perubahan status pin ini terjadi selama transfer data, penerimaan dan transmisi akan segera berhenti, dan byte yang dikirim dan diterima akan hilang.

Jika mikrokontroler dalam mode Master, arah transfer data melalui pin SS ditentukan oleh pengguna. Ketika sebuah pin dikonfigurasi sebagai output, pin tersebut berfungsi sebagai pin tujuan umum dan tidak mempengaruhi pengoperasian modul SPI. Biasanya, dalam hal ini digunakan untuk mengontrol pin SS mikrokontroler yang beroperasi dalam mode Budak.

Jika pin dikonfigurasi sebagai input, maka harus diberi energi agar modul SPI berfungsi dengan baik. level tinggi. Menerapkan tegangan level rendah ke input ini dari rangkaian eksternal apa pun akan dianggap oleh modul SPI sebagai pilihan mikrokontroler sebagai budak (dalam hal ini, data akan ditransfer ke sana).

Contoh penggunaan antarmuka SPI untuk mikrokontroler STM32 dijelaskan dengan baik di

Dengan peringkat dari 10 Ohm hingga 1 MΩ);

  • kabel penghubung (misalnya, ini set yang bagus);
  • komputer pribadi dengan lingkungan pengembangan Arduino IDE.
  • 1 Deskripsi serialnya antarmuka SPI

    SPI - Antarmuka Periferal Serial atau "Antarmuka Periferal Serial" adalah protokol komunikasi sinkron untuk berpasangan perangkat induk Dengan periferal(budak). Perangkat master sering berupa mikrokontroler. Perangkat berkomunikasi melalui empat kabel, itulah sebabnya SPI terkadang disebut sebagai "antarmuka empat kabel". Ini bannya:

    Ada empat mode transmisi ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), karena kombinasi polaritas pulsa jam (kami bekerja pada level TINGGI atau RENDAH), Polaritas Jam, CPOL, dan fase pulsa jam (sinkronisasi pada tepi depan atau belakang pulsa jam), Fase Jam, CPHA.

    Angka tersebut menjelaskan tabel ini.

    Antarmuka SPI menyediakan beberapa opsi untuk menghubungkan perangkat slave: mandiri Dan mengalir. Dengan koneksi independen ke bus SPI, perangkat master mengakses setiap perangkat pendukung satu per satu. Dengan koneksi kaskade, perangkat pendukung bekerja secara bergiliran, seolah-olah dalam kaskade.


    Jenis perangkat penghubung untuk bekerja melalui antarmuka SPI: independen dan kaskade

    2 Implementasi antarmuka SPI di dewan keluarga Arduino

    Di Arduino, bus antarmuka SPI berada di port tertentu. Setiap papan memiliki penugasan pin sendiri. Untuk kenyamanan, kesimpulan digandakan dan juga ditempatkan pada halaman terpisah. konektor ICSP(Dalam Pemrograman Serial Sirkuit, memprogram perangkat yang termasuk dalam sirkuit menggunakan protokol serial). Harap dicatat bahwa tidak ada pin pemilihan slave - SS pada konektor ICSP. diasumsikan bahwa Arduino akan digunakan sebagai perangkat master di jaringan. Tetapi jika perlu, Anda dapat menetapkan pin digital Arduino apa pun sebagai SS.

    Angka tersebut menunjukkan korespondensi standar pin ke bus SPI untuk Arduino UNO dan Nano.


    3 Perpustakaan untuk bekerja dengan antarmuka SPI

    Perpustakaan khusus telah ditulis untuk Arduino yang mengimplementasikan protokol SPI. Terhubung seperti ini: di awal program, tambahkan #termasuk SPI.h.

    Untuk mulai bekerja pada protokol SPI, Anda perlu mengatur pengaturan dan menginisialisasi protokol menggunakan prosedur SPI.beginTransaction(). Anda dapat melakukan ini dengan satu pernyataan: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0))

    Artinya kita menginisialisasi protokol SPI pada frekuensi 14 MHz, transfer data dimulai dari MSB (most significant bit), dalam mode SPI_MODE0.

    Setelah inisialisasi, pilih perangkat slave dengan menyetel pin SS yang sesuai ke status RENDAH.

    Kemudian kami mentransfer data ke perangkat budak dengan perintah SPI.transfer().

    Setelah transfer, kami mengembalikan SS ke negara bagian TINGGI.


    Bekerja dengan protokol selesai dengan perintah SPI.endTransaction().

    Sangat diinginkan untuk meminimalkan waktu eksekusi transfer antara instruksi SPI.beginTransaction() dan SPI.endTransaction() sehingga tidak ada tumpang tindih jika perangkat lain mencoba menginisialisasi transfer data menggunakan pengaturan yang berbeda.

    4 Menghubungkan register geser ke Arduino

    Mempertimbangkan penggunaan praktis antarmuka SPI. Kami akan menyalakan LED dengan menggerakkan register geser 8-bit melalui bus SPI. Hubungkan ke Arduino register geser 74HC595. Untuk masing-masing dari 8 keluaran register, melalui resistor pembatas, kami akan menghubungkan LED dengan nilai nominal 220 Ohm. Skema ditunjukkan pada gambar.


    5 Sketsa kontrol register geser melalui antarmuka SPI

    Mari kita menulis sketsa.

    #termasuk const int pinPilih = 8; // daftar pilih pin pengaturan batal()( SPI.begin(); // inisialisasi antarmuka SPI pinMode(pinSelect, OUTPUT); // digitalWrite(pinSelect, LOW); // pilih budak (daftarkan) SPI.transfer(0); // hapus isi register digitalWrite(pinSelect, HIGH); // akhir transmisi Serial.begin(9600); } lingkaran kosong() ( untuk (int i=0; i )

    Pertama, kita akan menghubungkan pustaka SPI dan menginisialisasi antarmuka SPI. Mari kita definisikan pin 8 sebagai pin pemilihan budak SS. Kosongkan register geser dengan mengirimkan nilai "0". Inisialisasi port serial.

    Untuk menyalakan LED tertentu dengan daftar geser, Anda perlu menerapkan angka 8-bit ke inputnya. Misalnya, untuk menyalakan LED pertama, kami memberikan angka biner 00000001, untuk yang kedua - 00000010, untuk yang ketiga - 00000100, dll. Bilangan biner ini, jika diterjemahkan ke dalam sistem bilangan desimal, membentuk urutan berikut: 1, 2, 4, 8, 16, 32, 64, 128 dan merupakan pangkat dua dari 0 sampai 7.

    Dengan demikian, dalam siklus lingkaran() dengan jumlah LED, kami menghitung ulang dari 0 hingga 7. Fungsi pow (basis, eksponen) menaikkan 2 pangkat penghitung loop. Mikrokontroler tidak bekerja sangat akurat dengan angka tipe "ganda", jadi kami menggunakan fungsi pembulatan untuk mengonversi hasilnya menjadi bilangan bulat. bulat(). Dan kami mentransfer nomor yang dihasilkan ke register geser. Untuk kejelasan, monitor port serial menampilkan nilai-nilai yang diperoleh selama operasi ini: kesatuan "berjalan" melalui pelepasan - LED menyala dalam gelombang.

    6 "Gelombang Lari" dari LED

    LED menyala secara bergantian, dan kami mengamati "gelombang" lampu yang mengalir. LED dikontrol menggunakan register geser, yang kami sambungkan melalui antarmuka SPI. Akibatnya, hanya 3 pin Arduino yang digunakan untuk mengontrol 8 LED. Jika kita menghubungkan LED langsung ke port digital Arduino, kita perlu menggunakan port terpisah untuk setiap LED.

    Kami telah mempelajari contoh paling sederhana dari Arduino yang bekerja dengan bus SPI. Mari kita lihat lebih dekat pengoperasian beberapa register geser dengan koneksi independen dan kaskade di artikel terpisah.

    SPI - Antarmuka Periferal Serial - serial

    antarmuka periferal

    SPI adalah standar transfer data sinkron serial antara sirkuit mikro dalam mode dupleks penuh.

    Antarmuka ini awalnya dikembangkan oleh Motorola untuk menyediakan antarmuka mikrokontroler dan periferal yang sederhana dan murah, dan saat ini digunakan dalam produk dari banyak produsen.

    Antarmuka SPI, bersama dengan I2C, adalah salah satu antarmuka yang paling banyak digunakan untuk menghubungkan chip. Namanya adalah singkatan dari "Serial Peripheral Interface" (Bahasa Inggris, SPI bus -

    SPI bus), yang mencerminkan tujuannya - bus untuk menghubungkan perangkat eksternal. Bus SPI diatur berdasarkan master-slave. Master bus biasanya berupa mikrokontroler, tetapi bisa juga berupa logika yang dapat diprogram, pengontrol DSP, atau ASIC. Bus terhubung ke master perangkat eksternal membentuk bus budak. Peran mereka dimainkan oleh berbagai jenis sirkuit mikro, termasuk. perangkat penyimpanan (EEPROM, Flash-memory, SRAM), real-time clock (RTC), ADC/DAC, potensiometer digital, pengontrol khusus, dll.

    Komponen utama antarmuka SPI adalah register geser konvensional, sinkronisasi dan sinyal input/output bitstream yang membentuk sinyal antarmuka. Dengan demikian, protokol SPI lebih tepat disebut bukan protokol transfer data, tetapi protokol pertukaran data antara dua register geser, yang masing-masing secara bersamaan menjalankan fungsi penerima dan fungsi pemancar.

    1. Sambungan listrik

    DI DALAM berbeda dari port serial standar (eng. port serial standar ), SPI adalah antarmuka sinkron di mana setiap transmisi disinkronkan ke sinyal clock umum yang dihasilkan oleh master (prosesor). Periferal penerima (budak) menyinkronkan penerimaan urutan bit dengan sinyal clock. Beberapa IC dapat dihubungkan ke antarmuka periferal serial tunggal dari IC master. Master memilih slave untuk transmisi dengan mengaktifkan sinyal pemilihan chip pada chip slave. Periferal yang tidak dipilih oleh prosesor tidak ikut ambil bagian

    dalam transmisi SPI.

    SPI menggunakan empat sinyal digital:

    MOSI (Eng. Master Out Slave In) - output master (penunjukan alternatif DO, SDO, DOUT), input perangkat slave untuk penerimaan data serial (penunjukan alternatif DI, SDI, DIN). Digunakan untuk mentransfer data dari master ke slave.

    MISO (Eng. Master In Slave Out) - input perangkat master untuk penerimaan data serial (penunjukan alternatif DI, SDI, DIN), keluaran perangkat slave untuk transmisi data serial (penunjukan alternatif DO, SDO, DOUT). Berfungsi untuk mentransfer data dari slave ke master.

    SCLK (eng. Jam serial) - sinyal jam serial (penunjukan alternatif DCLOCK, CLK, SCK). Berfungsi untuk mengirimkan sinyal clock untuk perangkat slave.

    CS atau SS - pemilihan chip, pemilihan budak

    (Pilih Chip Bahasa Inggris, Pilih Budak).

    Ada tiga jenis koneksi ke bus SPI, yang masing-masing melibatkan empat sinyal. Koneksi paling sederhana, yang hanya melibatkan dua sirkuit mikro, ditunjukkan pada Gambar 1.

    Beras. 1. Koneksi paling sederhana ke bus SPI

    Di sini, master bus mentransmisikan data pada jalur MOSI secara sinkron dengan sinyal SCLK yang dihasilkannya sendiri, dan slave menangkap bit data yang ditransmisikan pada tepi tertentu dari sinyal clock yang diterima. Pada saat yang sama, budak mengirimkan paket datanya. Skema yang disajikan dapat disederhanakan dengan menghilangkan jalur MISO jika IC slave yang digunakan tidak menyediakan, atau tidak diperlukan untuk mengirim kembali data. Transfer data satu arah dapat ditemukan di sirkuit mikro seperti DAC, potensiometer digital, amplifier dan driver yang dapat diprogram. Dengan demikian, opsi yang dipertimbangkan untuk menghubungkan IC budak membutuhkan 3 atau 4 jalur komunikasi. Agar IC slave dapat menerima dan mengirimkan data, selain adanya sinyal clock, jalur SS juga harus digerakkan rendah. Jika tidak, IC budak akan menjadi tidak aktif. Ketika hanya satu IC eksternal yang digunakan, Anda mungkin tergoda untuk mengecualikan jalur SS juga dengan mengatur input pilihan dari IC budak menjadi rendah. Solusi seperti itu sangat tidak diinginkan dan dapat menyebabkan kegagalan atau bahkan ketidakmungkinan transfer data, karena. input pemilihan chip berfungsi untuk mengatur ulang IC ke keadaan awalnya dan kadang-kadang memulai output dari bit data pertama.

    Jika perlu menghubungkan beberapa sirkuit mikro ke bus SPI, koneksi independen (paralel) (Gbr. 2) atau koneksi kaskade (serial) (Gbr. 3) digunakan.

    Beras. 2. Koneksi independen ke bus SPI

    Beras. 3. Cascading ke bus SPI

    Koneksi independen lebih umum, karena. dicapai dengan menggunakan chip yang kompatibel dengan SPI. Di sini, semua sinyal, kecuali untuk pilihan chip, terhubung secara paralel, dan master bus, dengan mentransfer satu atau beberapa sinyal SS ke keadaan rendah, menetapkan IC budak mana yang akan ditukar dengan data. Kerugian utama dari koneksi semacam itu adalah kebutuhan akan jalur tambahan untuk menangani sirkuit mikro budak (jumlah total jalur komunikasi adalah 3 + n, di mana n adalah jumlah sirkuit mikro budak). Cascading bebas dari kekurangan ini, karena di sini dari

    beberapa sirkuit mikro membentuk satu register geser besar. Untuk melakukan ini, output data transmisi dari satu IC dihubungkan ke input data penerima dari IC lainnya, seperti yang ditunjukkan pada Gambar 3. Input pemilihan chip dihubungkan secara paralel di sini, dan dengan demikian jumlah total jalur komunikasi dipertahankan pada 4 Namun, cascading hanya mungkin jika dukungannya ditentukan dalam dokumentasi untuk chip yang digunakan. Untuk mengetahuinya, penting untuk diketahui bahwa hubungan seperti itu disebut "daisy-chaining" dalam bahasa Inggris.

    2. Protokol Transfer

    Protokol transfer SPI sangat sederhana dan, pada kenyataannya, identik dengan logika register geser, yang terdiri dari melakukan operasi shift dan, karenanya, input dan output data bit demi bit pada tepi tertentu dari sinyal sinkronisasi . Kumpulan data pada pengiriman dan pengambilan pada penerimaan selalu dilakukan pada tepi jam yang berlawanan. Ini diperlukan untuk memastikan bahwa data diambil setelah dibuat dengan andal. Jika kita memperhitungkan bahwa tepi naik atau turun dapat bertindak sebagai tepi pertama dalam siklus transmisi, maka ada empat kemungkinan opsi untuk logika antarmuka SPI. Opsi ini disebut mode SPI dan dijelaskan oleh dua parameter:

    CPOL - level awal dari sinyal sinkronisasi (jika CPOL=0, maka jalur sinkronisasi sebelum dimulainya siklus transmisi dan setelah berakhirnya memiliki level rendah (yaitu sisi pertama naik, dan sisi terakhir turun), sebaliknya, jika CPOL=1, - tinggi (yaitu bagian depan pertama turun, dan bagian depan terakhir naik));

    CPHA - fase sinkronisasi; parameter ini menentukan urutan di mana data ditetapkan dan diambil sampelnya (jika CPHA=0, maka data akan diambil sampelnya di tepi naik dalam siklus sinkronisasi, dan kemudian, di tepi turun, data akan disetel

    data; jika CPHA=1, maka data akan ditetapkan pada sisi naik dari siklus jam, dan diambil pada sisi turun).

    Chip master dan slave yang beroperasi dalam mode SPI berbeda tidak kompatibel, jadi penting untuk mengklarifikasi mode mana yang didukung oleh master bus sebelum memilih chip slave. Modul perangkat keras SPI yang diintegrasikan ke dalam mikrokontroler dalam banyak kasus mendukung kemampuan untuk memilih mode SPI apa pun dan, oleh karena itu, sirkuit mikro slave SPI apa pun dapat dihubungkan dengannya (hanya berlaku untuk opsi koneksi independen). Selain itu, protokol SPI di salah satu mode mudah diimplementasikan dalam perangkat lunak.

    Tab. 1. Mode SPI

    Sementara

    diagram

    sinkronisasi

    3. Perbandingan dengan bus I2 C

    Seperti yang telah disebutkan, untuk sirkuit mikro docking, 2-kawat juga tidak kalah populer. bis seri I2 C. Di bawah ini Anda dapat menemukan keuntungan yang diberikan oleh bus serial ini atau itu.

    Manfaat bus SPI

    Keuntungan dari bus I2C

    Kesederhanaan ekstrim dari protokol

    transmisi pada lapisan fisik

    memastikan keandalan yang tinggi dan

    kecepatan transmisi. membatasi

    Kecepatan bus SPI diukur

    Bus I2 C tetap dua kabel,

    puluhan megahertz dan, karenanya, itu

    terlepas dari jumlahnya

    ideal untuk streaming

    sirkuit mikro yang terhubung dengannya.

    data dalam jumlah besar dan luas

    digunakan dalam kecepatan tinggi

    DAC/ADC, driver LED

    layar dan chip memori

    Semua jalur bus SPI

    searah, yang penting

    Kemampuan multi-master

    menyederhanakan pemecahan masalah

    operasi ketika terhubung ke bus

    konversi tingkat dan

    beberapa sirkuit mikro terkemuka.

    isolasi galvanik dari sirkuit mikro

    Protokol I2C lebih

    terstandarisasi, jadi

    Kemudahan implementasi perangkat lunak

    Pengguna chip I2C lebih banyak

    protokol SPI.

    dilindungi dari masalah

    ketidakcocokan yang dipilih

    komponen.

    4. Protokol turunan dan kompatibel

    MICROFIRE.

    Protokol MICROWIRE dari National Semiconductor identik dengan protokol SPI dalam mode 0 (CPOL = 0, CPHA = 0).

    Antarmuka maksimal 3 kabel

    Perbedaan dengan antarmuka ini adalah bahwa alih-alih transmisi dupleks penuh melalui dua saluran searah, ia melakukan transmisi setengah dupleks melalui satu saluran DQ dua arah.

    QSPI

    Protokol tingkat yang lebih tinggi daripada SPI yang memungkinkan transfer data otomatis tanpa keterlibatan CPU.

    Selain itu, antarmuka SPI menjadi dasar untuk membangun sejumlah antarmuka khusus, termasuk. Antarmuka debug JTAG dan antarmuka kartu memori Flash, termasuk. SD dan MMC.

    Petunjuk

    SPI- Antarmuka Periferal Serial atau "Antarmuka Periferal Serial" adalah protokol transmisi sinkron untuk menghubungkan perangkat master (Master) dengan perangkat periferal (Slave). Perangkat master sering . Perangkat berkomunikasi melalui empat kabel, itulah sebabnya SPI terkadang disebut sebagai "antarmuka empat kabel". Ini bannya:
    MOSI (Menguasai Budak Masuk)- jalur transmisi data dari perangkat master ke slave;
    MISO (Tuan Dalam Budak Keluar)- jalur transmisi dari slave ke master;
    SCLK (Jam Serial)- jam sinkronisasi yang dihasilkan oleh master;
    SS (Pemilihan Budak)- jalur pemilihan perangkat slave; ketika garis adalah "0", perangkat budak "mengerti" bahwa sekarang sedang diakses.
    Ada empat mode transfer data (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) karena kombinasi polaritas jam (kami bekerja pada level TINGGI atau RENDAH), Polaritas Jam, CPOL, dan fase pulsa jam (sinkronisasi pada tepi depan atau belakang pulsa jam), Fase Jam, CPHA.
    Gambar tersebut menunjukkan dua opsi untuk menghubungkan perangkat menggunakan protokol SPI: independen dan bertingkat. Dengan koneksi independen ke bus SPI, perangkat master mengakses setiap perangkat pendukung satu per satu. Dengan kaskade - perangkat bekerja secara bergantian, dalam kaskade.

    Di Arduino, bus antarmuka SPI berada di port tertentu. Setiap papan memiliki penugasan pin sendiri. Untuk kenyamanan, kesimpulan digandakan dan juga ditempatkan pada konektor ICSP terpisah (Dalam Pemrograman Serial Sirkuit, perangkat yang termasuk dalam sirkuit, menggunakan protokol serial). Harap dicatat bahwa tidak ada pin pemilihan slave - SS pada konektor ICSP. diasumsikan bahwa Arduino akan digunakan sebagai perangkat master di jaringan. Tetapi jika perlu, Anda dapat menetapkan pin Arduino apa pun sebagai SS.
    Angka tersebut menunjukkan korespondensi standar pin ke bus SPI untuk Arduino UNO dan Nano.

    Yang khusus telah ditulis untuk Arduino yang mengimplementasikan protokol SPI. Terhubung seperti ini: di awal program, tambahkan #termasuk SPI.h
    Untuk mulai bekerja dengan protokol SPI, Anda perlu mengatur pengaturan dan menginisialisasi protokol menggunakan prosedur SPI.beginTransaction(). Anda dapat melakukan ini dengan satu pernyataan: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).
    Artinya kita menginisialisasi protokol SPI pada 14 MHz, data ditransmisikan mulai dari MSB (most significant bit), dalam mode "0".
    Setelah inisialisasi, kami memilih perangkat pendukung dengan mentransfer pin SS yang sesuai ke kondisi RENDAH.
    Kemudian kami mentransfer data ke perangkat slave dengan perintah SPI.transfer().
    Setelah transmisi, kami mengembalikan SS ke status TINGGI.
    Pekerjaan dengan protokol diselesaikan dengan perintah SPI.endTransaction(). Sangat diinginkan untuk meminimalkan waktu eksekusi transfer antara instruksi SPI.beginTransaction() dan SPI.endTransaction() sehingga tidak ada tumpang tindih jika perangkat lain mencoba menginisialisasi transfer data menggunakan pengaturan yang berbeda.

    Pertimbangkan aplikasi praktis dari antarmuka SPI. Kami akan menyalakan LED dengan menggerakkan register geser 8-bit melalui bus SPI. Hubungkan register 74HC595 ke Arduino. Kami akan menghubungkan LED ke masing-masing dari 8 output (melalui resistor pembatas). Skema ditunjukkan pada gambar.

    Mari kita menulis sketsa.
    Pertama, kita akan menghubungkan pustaka SPI dan menginisialisasi antarmuka SPI. Mari kita tentukan pin 8 sebagai pin pemilihan budak. Kosongkan register geser dengan mengirimkan nilai "0". Inisialisasi port serial.
    Untuk menyalakan LED tertentu menggunakan register geser, Anda perlu menerapkan angka 8-bit ke inputnya. Misalnya, untuk menyalakan LED pertama, kami memberikan angka biner 00000001, untuk yang kedua - 00000010, untuk yang ketiga - 00000100, dll. Bilangan biner ini diterjemahkan ke dalam sistem bilangan desimal membentuk urutan berikut: 1, 2, 4, 8, 16, 32, 64, 128 dan merupakan pangkat dari 0 sampai 7.
    Oleh karena itu, dalam loop loop(), kami menghitung ulang dari 0 hingga 7 dengan jumlah LED pow (basis, eksponen) menaikkan 2 pangkat penghitung loop. Mikrokontroler tidak bekerja sangat akurat dengan angka tipe "ganda", jadi kami menggunakan fungsi round() untuk mengonversi hasilnya menjadi bilangan bulat. Dan kami mentransfer nomor yang dihasilkan ke register geser. Untuk kejelasan, monitor port serial menampilkan nilai yang diperoleh selama operasi ini: kesatuan mengalir melalui angka - LED menyala dalam gelombang.

    Perkenalan

    SPI (3-wire) adalah antarmuka populer untuk pertukaran data serial antar sirkuit mikro. Antarmuka SPI, bersama dengan I 2 C, adalah salah satu antarmuka yang paling banyak digunakan untuk menghubungkan sirkuit mikro. Ini awalnya ditemukan oleh Motorola, dan saat ini digunakan dalam produk banyak pabrikan. Namanya adalah singkatan dari "Serial Peripheral Bus", yang mencerminkan tujuannya - sebuah bus untuk menghubungkan perangkat eksternal. Bus SPI diatur berdasarkan master-slave. Master bus biasanya berupa mikrokontroler, tetapi bisa juga berupa logika yang dapat diprogram, pengontrol DSP, atau ASIC. Perangkat eksternal yang terhubung ke bus master membentuk bus slave. Peran mereka dimainkan oleh berbagai jenis sirkuit mikro, termasuk. perangkat penyimpanan (EEPROM, Flash-memory, SRAM), real-time clock (RTC), ADC/DAC, potensiometer digital, pengontrol khusus, dll.

    Komponen utama antarmuka SPI adalah register geser konvensional, sinkronisasi dan sinyal input/output bitstream yang membentuk sinyal antarmuka. Dengan demikian, protokol SPI lebih tepat disebut bukan protokol transfer data, tetapi protokol pertukaran data antara dua register geser, yang masing-masing secara bersamaan menjalankan fungsi penerima dan fungsi pemancar. Kondisi yang sangat diperlukan untuk transfer data pada bus SPI adalah pembangkitan sinyal clock bus. Sinyal ini hanya memiliki hak untuk menghasilkan bus master dan pengoperasian bus slave sepenuhnya bergantung pada sinyal ini.

    Sambungan listrik

    Ada tiga jenis koneksi ke bus SPI, yang masing-masing melibatkan empat sinyal (lihat Tabel 1 untuk penunjukan utama dan alternatifnya). Koneksi paling sederhana, yang melibatkan hanya dua chip, ditunjukkan pada Gambar 1. Di sini, master bus mentransmisikan data pada jalur MOSI secara sinkron dengan sinyal SCLK yang dihasilkannya, dan slave menangkap bit data yang ditransmisikan pada tepi tertentu dari chip. menerima sinyal jam. Pada saat yang sama, budak mengirimkan paket datanya. Skema yang disajikan dapat disederhanakan dengan menghilangkan jalur MISO jika IC slave yang digunakan tidak menyediakan, atau tidak diperlukan untuk mengirim kembali data. Transfer data satu arah dapat ditemukan di sirkuit mikro seperti DAC, potensiometer digital, amplifier dan driver yang dapat diprogram. Dengan demikian, opsi yang dipertimbangkan untuk menghubungkan IC budak membutuhkan 3 atau 4 jalur komunikasi. Agar IC slave dapat menerima dan mengirimkan data, selain adanya sinyal clock, jalur SS juga harus digerakkan rendah. Jika tidak, IC budak akan menjadi tidak aktif. Ketika hanya satu IC eksternal yang digunakan, Anda mungkin tergoda untuk mengecualikan jalur SS juga dengan mengatur input pilihan dari IC budak menjadi rendah. Solusi seperti itu sangat tidak diinginkan dan dapat menyebabkan kegagalan atau bahkan ketidakmungkinan transfer data, karena. input pemilihan chip berfungsi untuk mengatur ulang IC ke keadaan awalnya dan kadang-kadang memulai output dari bit data pertama.


    Beras. 1. Koneksi paling sederhana ke bus SPI

    Jika perlu menghubungkan beberapa sirkuit mikro ke bus SPI, koneksi independen (paralel) (Gbr. 2) atau koneksi kaskade (serial) (Gbr. 3) digunakan. Koneksi independen lebih umum, karena. dicapai dengan menggunakan chip yang kompatibel dengan SPI. Di sini, semua sinyal, kecuali untuk pilihan chip, terhubung secara paralel, dan master bus, dengan mentransfer satu atau beberapa sinyal SS ke keadaan rendah, menetapkan IC budak mana yang akan ditukar dengan data. Kerugian utama dari koneksi semacam itu adalah kebutuhan akan jalur tambahan untuk menangani sirkuit mikro budak (jumlah total jalur komunikasi adalah 3 + n, di mana n adalah jumlah sirkuit mikro budak). Cascading bebas dari kekurangan ini, karena di sini, satu register geser besar dibentuk dari beberapa sirkuit mikro. Untuk melakukan ini, output data transmisi dari satu IC dihubungkan ke input data penerima dari IC lainnya, seperti yang ditunjukkan pada Gambar 3. Input pemilihan chip dihubungkan secara paralel di sini, dan dengan demikian jumlah total jalur komunikasi dipertahankan pada 4 Namun, cascading hanya mungkin jika dukungannya ditentukan dalam dokumentasi untuk chip yang digunakan. Untuk mengetahuinya, penting untuk diketahui bahwa hubungan seperti itu disebut "daisy-chaining" dalam bahasa Inggris.


    Beras. 2. Koneksi independen ke bus SPI


    Beras. 3. Cascading ke bus SPI

    Protokol Transfer

    Protokol transfer SPI sangat sederhana dan, pada kenyataannya, identik dengan logika register geser, yang terdiri dari melakukan operasi shift dan, karenanya, input dan output data bit demi bit pada tepi tertentu dari sinyal sinkronisasi . Kumpulan data pada pengiriman dan pengambilan pada penerimaan selalu dilakukan pada tepi jam yang berlawanan. Ini diperlukan untuk memastikan bahwa data diambil setelah dibuat dengan andal. Jika kita memperhitungkan bahwa tepi naik atau turun dapat bertindak sebagai tepi pertama dalam siklus transmisi, maka ada empat kemungkinan opsi untuk logika antarmuka SPI. Opsi ini disebut mode SPI dan dijelaskan oleh dua parameter:

    • CPOL - level awal dari sinyal sinkronisasi (jika CPOL=0, maka jalur sinkronisasi sebelum dimulainya siklus transmisi dan setelah berakhirnya memiliki level rendah (yaitu sisi pertama naik, dan sisi terakhir turun), sebaliknya, jika CPOL=1, - tinggi (yaitu bagian depan pertama turun, dan bagian depan terakhir naik));
    • CPHA - fase sinkronisasi; parameter ini menentukan urutan di mana data disetel dan diambil (jika CPHA=0, maka data akan diambil sampelnya di sisi naik dalam siklus sinkronisasi, dan kemudian, di sisi turun, data akan disetel; jika CPHA= 1, maka data pengaturan akan diambil di tepi naik dalam siklus jam dan disampel di tepi jatuh). Informasi tentang mode SPI dirangkum dalam Tabel 2.

    Chip master dan slave yang beroperasi dalam mode SPI berbeda tidak kompatibel, jadi penting untuk mengklarifikasi mode mana yang didukung oleh master bus sebelum memilih chip slave. Modul perangkat keras SPI yang diintegrasikan ke dalam mikrokontroler dalam banyak kasus mendukung kemampuan untuk memilih mode SPI apa pun dan, oleh karena itu, sirkuit mikro slave SPI apa pun dapat dihubungkan dengannya (hanya berlaku untuk opsi koneksi independen). Selain itu, protokol SPI di salah satu mode mudah diimplementasikan dalam perangkat lunak.

    Perbandingan dengan busbar I 2 C

    Seperti yang telah disebutkan, bus serial 2-kawat I 2 C tidak kalah populernya untuk memasang sirkuit mikro. Di bawah ini Anda dapat melihat manfaat yang diberikan oleh bus serial ini atau itu.

    Manfaat bus SPI Keuntungan dari bus I2C
    Kesederhanaan ekstrim dari protokol transmisi pada lapisan fisik menentukan keandalan dan kecepatan transmisi yang tinggi. Batas kecepatan bus SPI diukur dalam puluhan megahertz dan karenanya ideal untuk streaming data besar dan banyak digunakan dalam DAC/ADC kecepatan tinggi, driver tampilan LED, dan chip memori Bus I 2 C tetap dua kabel, terlepas dari jumlah chip yang terhubung dengannya.
    Semua jalur bus SPI searah, yang sangat menyederhanakan tugas konversi level dan isolasi galvanik dari sirkuit mikro Kemungkinan operasi multi-master ketika beberapa sirkuit mikro master terhubung ke bus.
    Kemudahan implementasi perangkat lunak dari protokol SPI. Protokol I2C lebih standar, oleh karena itu, pengguna chip I2C lebih terlindungi dari masalah ketidakcocokan komponen yang dipilih.

    Protokol turunan dan kompatibel

    • MICROFIRE.

      Protokol MICROWIRE dari National Semiconductor identik dengan protokol SPI dalam mode 0 (CPOL = 0, CPHA = 0).

    • Antarmuka maksimal 3 kabel

      Perbedaan dengan antarmuka ini adalah bahwa alih-alih transmisi dupleks penuh melalui dua saluran searah, ia melakukan transmisi setengah dupleks melalui satu saluran DQ dua arah.

    • QSPI

      Protokol tingkat yang lebih tinggi daripada SPI yang memungkinkan transfer data otomatis tanpa keterlibatan CPU.

    Selain itu, antarmuka SPI menjadi dasar untuk membangun sejumlah antarmuka khusus, termasuk. Antarmuka debug JTAG dan antarmuka kartu memori Flash, termasuk. SD dan MMC.

    Tab. 1. Sinyal listrik bus SPI

    Ban terdepan bis budak
    Penunjukan dasar Notasi alternatif Keterangan Penunjukan dasar Notasi alternatif Keterangan
    MOSI LAKUKAN, SDO, DOUT MOSI DI, SD, DIN
    SUP KEDELAI JEPANG DI, SD, DIN Serial menerima masukan SUP KEDELAI JEPANG LAKUKAN, SDO, DOUT Keluaran serial
    SCLK DCLOCK, CLK, SCK Keluaran sinkronisasi transfer data SCLK DCLOCK, CLK, SCK Menerima masukan sinkronisasi
    SS CS Keluaran pemilihan budak (pemilihan chip) SS CS Input pemilihan budak (pemilihan chip)


    Memuat...
    Atas