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?
Jawaban:
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 :
Kartu SD dan FPGA mungkin mencoba drive DO dan kartu SD hilang, sehingga reset. Mengirim byte tambahan tampaknya telah memperbaikinya.
sumber