Tôi có một ứng dụng mà tôi có một vi điều khiển (NXP LPC1343 ) được kết nối với một FPGA qua 16-bit SPI. Ngoài ra còn có thẻ SD sử dụng cùng cổng SPI (MISO / MOSI) nhưng với chân CS / SS khác nhau (cả hai đều hoạt động ở mức thấp, theo thông số kỹ thuật SPI). Một trong những điều tôi cần làm là ghi dữ liệu từ FPGA lên một tệp trên Thẻ SD bằng cách sử dụng FAT32 và đây là công việc của vi điều khiển. Bộ vi điều khiển đang chạy FatFS , mà tôi đã tự mình làm việc một cách đáng tin cậy.
Do vi điều khiển chỉ có một lượng RAM nhỏ, nên chỉ một lượng nhỏ dữ liệu có thể được đệm cùng một lúc. Do đó, micro phải đọc bộ đệm từ FPGA, thay đổi chế độ SPI thành 8 bit, sau đó ghi dữ liệu đó vào FATFS. Hãy nhớ lại rằng để định cấu hình thẻ SD cho chế độ SPI, một lệnh phải được gửi trong khi bus SPI đang chạy ở tốc độ 400 kHz và một số lượng chờ nhất định phải xảy ra. Do đó, tôi muốn chỉ thực hiện khởi tạo một lần.
Tuy nhiên, việc thực hiện các giao dịch trên FPGA ngay cả khi giữ CS cao trên thẻ SD dường như khiến thẻ SD rơi vào trạng thái kỳ lạ đến mức nó cần phải tiếp tục khởi tạo lại. Điều này tất nhiên là không mong muốn, vì việc khởi tạo có thể mất vài mili giây, để ghi chỉ 4 kB hoặc hơn dữ liệu (một lần nữa bị giới hạn bởi khả năng RAM nhỏ của micro của tôi). Vì tôi cần phải viết vài megabyte càng nhanh càng tốt, điều này làm giảm hiệu suất từ khoảng 500 kB / s xuống dưới 100 kB / s.
Tôi biết rằng thẻ SD không tuân thủ SPI đầy đủ về mặt kỹ thuật, nhưng vấn đề này có thể được khắc phục như thế nào?