Thẻ SD ở chế độ SPI có tôn trọng chip chọn / nô lệ không? Có vẻ như được đặt lại trong ứng dụng của tôi


9

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?


Nó nên tôn vinh nó, theo như tôi biết. Có thể thử một thẻ SD khác?
Marko

Đâ là một câu hỏi tuyệt vời. Cảm ơn đã hỏi (và trả lời) nó.
đánh dấu

Câu trả lời:


7

Được rồi, tôi đã tìm ra nó thực sự. Tôi nên đã googled sâu hơn một chút. Hóa ra, thẻ SD không hoạt động chính xác như các thiết bị SPI khi chia sẻ xe buýt theo Cách sử dụng MMC / SDC :

Trong bus SPI, mỗi thiết bị phụ được chọn với các tín hiệu CS riêng biệt và các thiết bị số nhiều có thể được gắn vào bus SPI. Thiết bị nô lệ SPI chung điều khiển / giải phóng tín hiệu DO của nó bằng tín hiệu CS không đồng bộ để chia sẻ bus SPI.

Tuy nhiên, ổ đĩa MMC / SDC phát hành / phát tín hiệu DO trong việc đồng bộ hóa với SCLK. Điều này có nghĩa là có khả năng xảy ra xung đột xe buýt với MMC / SDC và bất kỳ nô lệ SPI nào khác gắn liền với xe buýt SPI. Hình ảnh bên phải hiển thị thời gian ổ đĩa / phát hành của MMC / SDC (tín hiệu DO được kéo đến 1/2 V cc để xem trạng thái bus). Do đó, để tạo tín hiệu DO giải phóng MMC / SDC, thiết bị chính phải gửi một byte sau khi tín hiệu CS được xác nhận lại.

Thẻ SD và FPGA có lẽ đều cố gắng điều khiển DO và thẻ SD bị mất, vì vậy nó được đặt lại. Gửi thêm một byte dường như đã sửa nó.


Điều này cho phép bạn xen kẽ giữa FPGA và thẻ, phải không? Bạn cũng thấy rằng bạn có thể làm gián đoạn trong quá trình truyền dữ liệu và tiếp tục? Từ những gì nó nói trên elm-chan, có vẻ như điều đó là không thể, nhưng tôi rất muốn biết liệu bạn đã xác nhận hay từ chối nó.
krs013

1
Có, nó hoạt động như mong đợi để xen kẽ giữa FPGA và SD, nhưng bạn không thể làm gián đoạn quá trình chuyển giữa các cuộc gọi đến FatFS. Ít nhất tôi đã không thể làm việc đó. Điều đó có nghĩa là bạn không thể (ví dụ) trả lời ngắt trong khi ghi và đọc tệp từ cảm biến bằng bus SPI được chia sẻ.
Zuofu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.