Đôi khi, byte dữ liệu đầu tiên từ đọc SPI của thẻ SD rất tệ


7

Thiết bị tôi đang phát triển là một tiện ích lưu trữ thẻ SD cho máy tính retro, thẻ SD SanDisk Ultra II 1.0 GB trong ổ cắm thẻ SD (Tôi không biết thương hiệu này có quan trọng không, nó chỉ là thứ tôi có) .

Thẻ SD là thiết bị duy nhất trên xe buýt SPI; bộ dịch mức đảm bảo thẻ được cấp tín hiệu ở mức 3,3 V; MISO cung cấp thông qua chuyển đổi xe buýt sang một GPU 3,3 V. FPGA thực hiện cơ chế thanh ghi dịch chuyển có xung nhịp, đồng hồ tám lần, chuyển dữ liệu đầu ra sang MOSI và thu thập dữ liệu đầu vào từ MISO.

Nhiều thiết bị gắn vào nhiều máy tính hoạt động tốt.

Tôi sử dụng chế độ SPI. Tôi kích hoạt thẻ, tăng tốc lên 4 MHz và gửi lệnh đọc khối đơn.

Tôi quan sát thấy rằng byte dữ liệu đầu tiên được trả về thỉnh thoảng có lỗi một bit. Thông thường bit 0 được đặt khi không nên, nhưng tôi cũng đã thấy bit 1 được đặt khi không nên. Tất cả các byte khác là hoàn toàn chính xác, luôn luôn.

Nhiều thiết bị đã được thử nghiệm gắn vào nhiều máy tính chủ. Vấn đề chỉ được nhìn thấy với một thiết bị gắn vào một máy tính. Thiết bị hoặc máy tính hoạt động tốt với các máy tính hoặc thiết bị khác.

Tôi nghi ngờ lỗi thời gian trong mã trình điều khiển của mình, nhưng tôi chắc chắn rằng tôi đã thực hiện tám chu kỳ đồng hồ (gửi 0xFF, đọc byte dữ liệu đầu tiên) trước khi tôi đọc nó.

Tôi đang tự hỏi, điều này có thể liên quan đến mức điện áp hoặc mức hiện tại, có thể khác nhau một cách tinh tế tùy thuộc vào thiết bị hoặc máy tính?

Tôi đang tự hỏi, một thẻ SD đột nhiên cần rút thêm dòng điện, giống như khi nó bắt đầu xuất dữ liệu?


7
Vâng, thật dễ dàng để tưởng tượng rằng nhu cầu hiện tại có thể tăng đột biến. Bạn có thể thử thêm các tụ điện cục bộ ngay tại ổ cắm. Tuy nhiên, cũng có thể thời gian SPI của bạn gần như sắp hết thời gian thiết lập nói chung và trường hợp này phơi bày vấn đề.
Chris Stratton

Bạn có thể thử những gì xảy ra ở tốc độ thấp hơn? Và dây cáp của bạn dài bao nhiêu? Có thể có một cái gì đó như điện dung hoặc điện cảm không mong muốn?

Câu trả lời:


5

Phân tích với một mẫu phân tích logic USB giá rẻ ở 16 MHz cho thấy đôi khi dường như chỉ có 7 chu kỳ xung nhịp được nhóm lại với nhau. Từ VHDL phần cứng, tôi biết điều này là không thể - một khi quá trình truyền byte được bắt đầu, nó sẽ trao đổi bit trên 8 đồng hồ sau.

Tôi đã đưa ra giả thuyết rằng có nhiễu trên tín hiệu SCLK, khiến cho máy phân tích nhìn thấy đồng hồ quá nhanh và quá nhanh để máy tính có thể bật lên, nhưng Thẻ SD thực sự đã trao đổi một chút.

Vì vậy, tôi đã thêm logic khử nhiễu vào nguồn tín hiệu SCLK và vấn đề đã biến mất.

Lưu ý bên lề: Máy tính chủ là máy tính retro chạy ở tốc độ 4 MHz. một lượng nhiễu nhất định trên đồng hồ có thể không nhìn thấy được đối với hầu hết các thành phần trong máy tính đó, nhưng với tiện ích bổ sung dựa trên công nghệ đồ họa hiện đại của tôi (có thể dễ dàng chạy các thiết kế với fMax> 50 MHz) thì những điều đó đột nhiên trở thành một vấn đề.

Cảm ơn những người đã phản hồi.


2
FYI: bạn có thể (và nên) chấp nhận câu trả lời của riêng bạn.
exscape
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.