Apakah kartu SD dalam mode SPI menghormati chip pilih / slave pilih? Tampaknya diatur ulang di aplikasi saya

9

Saya memiliki aplikasi di mana saya memiliki mikrokontroler (NXP LPC1343 ) yang terhubung ke FPGA melalui 16-bit SPI. Ada juga kartu SD yang menggunakan port SPI yang sama (MISO / MOSI) tetapi dengan pin CS / SS yang berbeda (keduanya aktif rendah, sesuai spesifikasi SPI). Salah satu hal yang perlu saya lakukan adalah menulis data dari FPGA ke file di SD Card menggunakan FAT32 , dan ini adalah pekerjaan mikrokontroler. Mikrokontroler menjalankan FatFS , yang telah saya kerjakan dengan andal dengan sendirinya.

Karena mikrokontroler hanya memiliki sejumlah kecil RAM, hanya sejumlah kecil data yang dapat disangga sekaligus. Oleh karena itu, mikro harus membaca buffer dari FPGA, mengubah mode SPI menjadi 8-bit, dan kemudian menulis data itu ke FATFS. Ingatlah bahwa untuk mengkonfigurasi kartu SD untuk mode SPI, sebuah perintah harus dikirim ketika bus SPI berjalan pada 400 kHz, dan sejumlah menunggu harus terjadi. Karena itu, saya hanya perlu melakukan inisialisasi satu kali.

Namun, melakukan transaksi pada FPGA bahkan sambil memegang CS tinggi pada kartu SD tampaknya membuat kartu SD dalam keadaan aneh sehingga perlu melalui inisialisasi lagi. Ini tentu saja tidak diinginkan, karena inisialisasi mungkin memerlukan beberapa milidetik, untuk menulis hanya 4 kB atau lebih data (sekali lagi dibatasi oleh kemampuan RAM kecil mikro saya). Karena saya perlu menulis beberapa megabyte secepat mungkin, ini mengurangi kinerja dari sekitar 500 kB / s menjadi kurang dari 100 kB / s.

Saya menyadari bahwa kartu SD secara teknis tidak sepenuhnya memenuhi SPI, tetapi bagaimana masalah ini dapat diatasi?

Zuofu
sumber
Seharusnya menghormatinya, sejauh yang saya tahu. Mungkin mencoba kartu SD yang berbeda?
Marko
Ini pertanyaan yang bagus. Terima kasih telah bertanya (dan menjawab) itu.
markrages

Jawaban:

7

Oke, saya sudah tahu sebenarnya. Seharusnya saya googled sedikit lebih dalam. Ternyata kartu SD tidak bertindak persis seperti perangkat SPI saat berbagi bus sesuai dengan Cara Menggunakan MMC / SDC :

Di bus SPI, setiap perangkat pendukung dipilih dengan sinyal CS yang terpisah, dan perangkat jamak dapat dilampirkan ke bus SPI. Perangkat slave SPI generik menggerakkan / melepaskan sinyal DO-nya dengan sinyal CS secara serempak untuk berbagi bus SPI.

Namun, MMC / SDC drive / melepaskan sinyal DO dalam menyinkronkan ke SCLK. Ini berarti ada kemungkinan konflik bus dengan MMC / SDC dan budak SPI lainnya yang melekat pada bus SPI. Gambar kanan menunjukkan waktu drive / lepaskan MMC / SDC (sinyal DO ditarik ke 1/2 V cc untuk melihat status bus). Oleh karena itu untuk membuat sinyal DO DO MMC / SDC, perangkat master harus mengirim byte setelah sinyal CS ditetapkan.

Kartu SD dan FPGA mungkin mencoba drive DO dan kartu SD hilang, sehingga reset. Mengirim byte tambahan tampaknya telah memperbaikinya.

Zuofu
sumber
Ini memungkinkan Anda untuk bergantian antara FPGA dan kartu, kan? Apakah Anda juga menemukan bahwa Anda dapat menyela selama transfer data dan melanjutkan? Dari apa yang tertulis di elm-chan, sepertinya itu tidak mungkin, tapi aku akan tertarik untuk mengetahui apakah Anda mengonfirmasi atau membantahnya.
krs013
1
Ya, itu berfungsi seperti yang diharapkan untuk berganti-ganti antara FPGA dan SD, tetapi Anda tidak dapat mengganggu transfer antara panggilan ke FatFS. Setidaknya saya tidak bisa membuatnya bekerja. Itu berarti Anda tidak dapat (misalnya) menanggapi interupsi selama file menulis dan membaca dari sensor menggunakan bus SPI bersama.
Zuofu