Bagilah dan taklukkan, atau tulis dengan lambat - baca dengan cepat


Dalam salah satu proyek saya, ada kebutuhan untuk perekaman sekuensial set data digital dari 3 saluran ADC. Hasil pengukuran harus disimpan pada kecepatan 6 KB / s, sedangkan durasi siklus pengumpulan data bisa sehari atau lebih. Dengan demikian, jumlah total informasi yang perlu disimpan adalah 500 MB atau lebih. Sebagai perangkat penyimpanan, diputuskan untuk memilih kartu SD.


Tugas itu rumit oleh fakta bahwa fitur desain perangkat yang dibuat tidak memungkinkan untuk mengekstraksi kartu untuk membaca data. Pengontrol XMega128A4U , di mana tugas itu dilaksanakan pada saat itu, tidak memiliki dukungan perangkat keras SDIO, tetapi diizinkan untuk bekerja dengan kartu melalui antarmuka SPI, bandwidth yang sangat mungkin untuk ditulis pada kecepatan yang diperlukan, tetapi membaca sejumlah data ke komputer melalui rantai kartu SD melalui SPI -> pengontrol -> Konverter USB-Com agak suram dan butuh waktu yang cukup lama.


Setelah beberapa pemikiran (dan upaya yang gagal untuk sedikit overclock bundel di atas), diputuskan untuk menggunakan perangkat keras SD Card Reader Controller, di mana chip GL823 yang mendukung USB 2.0 dipilih. Sekarang itu perlu untuk menyediakan akses terpisah ke kartu SD dari controller melalui SPI selama pengumpulan data dan dari komputer melalui SDIO, melalui GL823 selama membaca kecepatan tinggi. Pemisahan ini diimplementasikan menggunakan dua multiplexer 4-channel 2x1.



Baris dari sakelar U2, U3 dengan awalan "STM" terhubung ke pengontrol, garis dengan awalan "SD" terhubung ke kartu SD. Untuk mengontrol sirkuit, sinyal SD2MCU digunakan, beralih kartu SD antara MCU dan GL823 dan GL823_PWR, beralih daya GL823 melalui MOSFET .


Awalnya, saya menganggap pendekatan ini sebagai semacam "penopang", tetapi, yang mengejutkan saya, ternyata cukup fungsional untuk saya sendiri dan dikonfirmasi oleh praktik pengoperasian perangkat yang berhasil selama beberapa tahun.


Selain itu, dalam pengembangan berikut berdasarkan STM32F407 , yang memiliki dukungan SDIO untuk mengakses kartu, dan kemungkinan meningkatkan USB 2.0 HS MSD (meskipun melalui antarmuka ULPI paralel), kemungkinan menggunakan solusi GL823 berbasis bus dipertimbangkan.


Menggunakan bundel STM32F407 dengan USB3300 PHY eksternal, dimungkinkan untuk mencapai kecepatan baca kartu ~ 41 Mbit / s, sementara ketika menggunakan pembaca kartu perangkat keras, kecepatan mencapai ~ 150 Mbit / s, semua hal lain dianggap sama. Pengukuran dilakukan dengan membaca file 128 MB dari kartu SD yang diformat dalam FAT32. Kedua pendekatan memiliki nuansa penggunaannya sendiri, tetapi, bagi saya, keduanya memiliki "hak untuk hidup." Adapun nuansa: dalam kasus saya, pada iterasi selanjutnya dari pengembangan perangkat ini, perangkat keras perlu ditempatkan pada papan lebar 26 mm.


Tata letak PCB untuk LQFP100 dari kasus STM32F407 dalam kasus ini agak sulit, tetapi "adiknya" STM32F405 dalam kasus LQFP64 bahkan ditemukan. Tetapi STM32F405 tidak memiliki ULPI, oleh karena itu USB 2.0 HS tidak tersedia untuk itu, dan implementasi MSD FS kehilangan banyak dalam kecepatan membaca data dari kartu. Menggunakan solusi yang sama yang dijelaskan di atas, Anda bisa mendapatkan kecepatan akses yang memadai ke SD dari komputer saat membaca data dari perangkat.


Saya akan senang jika pengalaman saya bermanfaat bagi seseorang.


Source: https://habr.com/ru/post/id440308/


All Articles