Giao diện thẻ MMC / SD - có quyền truy cập vào thông tin cân bằng hao mòn? (quầy, v.v.)


7

Tôi không cho rằng có một cái gì đó trong đặc tả thẻ MMC / SD để lấy bất kỳ thông tin nào về số lần xóa trên thẻ MMC / SD, phải không?

Mục tiêu của tôi là làm cho hệ thống nhúng của mình tránh ghi vào siêu dữ liệu như lần truy cập trước hoặc lần sửa đổi, phân bổ các tệp có kích thước vừa phải chứa 0xFF sa cần thiết và chỉ chắp thêm các bản ghi trong đó.

Điều này là để giảm nguy cơ mất dữ liệu, vì có thể mất điện bất cứ lúc nào.

Tuy nhiên, các thuật toán cân bằng hao mòn của thẻ MMC / SD là một ẩn số và có thể được triển khai rất kém. Tôi cần xác minh rằng các thẻ không cố xóa các khối dữ liệu nếu tôi chỉ ghi dữ liệu trên 0xFF. Vì vậy, nếu có bất kỳ loại số xóa nào (tổng cộng cho đĩa, mỗi khối, bất cứ thứ gì) có sẵn để đọc ... thì thật tuyệt.

Tôi không hoàn toàn chắc chắn câu hỏi này sống ở đâu ... nhưng vì nó liên quan đến công cụ cấp độ giao thức thẻ SD, tôi đã tìm ra có lẽ ở đây.

BIÊN TẬP

Tôi tin rằng tôi sẽ đi trước và làm quá nhiều thứ. Kiểm tra đĩa đã chứng minh rằng ít nhất các thẻ SD tôi có sẽ xóa các khối ngay cả khi dữ liệu bạn viết không thay đổi so với nội dung trên đĩa. Tôi sẽ lưu trữ tối đa 128KB dữ liệu trong NAND có thể kiểm soát trực tiếp (mà tôi có thể kiểm soát hành vi ghi tốt hơn một chút), sau đó ghi các đoạn 128KB vào tệp 128KB trên phân vùng VFAT. Điều đó sẽ hạn chế tiếp xúc càng nhiều càng tốt ... nhưng wow thật xấu xí và phức tạp.


2
Trên bộ ghi dữ liệu tiếp theo của tôi, tôi đang cân nhắc viết lại mọi thứ hai lần, vào 2 thẻ nhớ. Đầu tiên, và sau đó - sau khi tôi chắc chắn việc ghi đầu tiên đã kết thúc - sau đó ghi cùng một dữ liệu khác. Bất kể khi pin hỏng, tệ nhất là một thẻ sẽ bị hỏng và tất cả dữ liệu (ngoại trừ khối cuối cùng) đều an toàn trên thẻ kia.
davidcary

Câu trả lời:


5

Tôi không biết liệu thẻ SD cụ thể có tiết lộ thông tin về mức độ hao mòn hay không, nhưng đối với hầu hết các phần tôi sẽ đề nghị rằng mong muốn của bạn để tránh xóa các khối giữ FF bị đặt sai vị trí. Ngay cả khi một khối đĩa ảo xảy ra chỉ chứa FF, nó gần như chắc chắn sẽ chứa thông tin địa chỉ khác và dữ liệu sửa lỗi sẽ phải viết lại nếu có bất kỳ thay đổi nào được thực hiện đối với khối, bất kể nội dung trước đó là gì.

Tôi tin rằng các nhà sản xuất thẻ SD có thể tự do lựa chọn các thuật toán của riêng họ để quyết định khi nào sẽ viết lại các khối không được truy cập trong một thời gian và để đảm bảo tính toàn vẹn dữ liệu trong trường hợp mất điện. Do đó, tôi không biết bất kỳ phương pháp cụ thể nào để đảm bảo rằng thẻ SD sẽ không bị hỏng nếu mất điện trong quá trình ghi.


Ah, điểm tuyệt vời. Tôi quên các bit ECC. Điều đó khá nhiều thổi ý tưởng đó. Hmm ... Tôi đoán câu hỏi này đã xong ... Tôi sẽ hỏi hội đồng quản trị Linux về các hệ thống tập tin đáng tin cậy trong tình huống này.
darron

@darron: Đó là một câu hỏi thú vị; Tôi đã nâng cấp nó (một người khác đã đánh giá thấp nó). Vì thẻ MMC và CompactFlash đặt một lớp ánh xạ khối ảo lên trên một thiết bị flash thô, tôi không nghĩ rằng chúng có khả năng phơi bày các chi tiết cân bằng hao mòn giống như cách mà SmartMedia thực hiện. Mặc dù các tiêu chuẩn dựa trên ảo hóa như SD / MMC có khả năng thích ứng với việc thay đổi công nghệ hơn so với tiêu chuẩn "bit thô" như SmartMedia, đối với một số ứng dụng chắc chắn có những lợi thế để biết những gì đang thực sự xảy ra.
supercat

1
@darron: Tôi không biết liệu bạn có quen thuộc với cách các ổ đĩa flash hiện đại hoạt động không, nhưng chúng thường được thiết kế để được viết trong các trang 528 byte, trong khi chỉ có thể xóa được trong các khối lớn hơn nhiều (tôi nghĩ là 32KB, nhưng có lẽ 128KB hoặc thậm chí lớn hơn). Nếu một yêu cầu được thực hiện để viết một khu vực, ổ đĩa flash sẽ tìm thấy một trang trống nếu có, viết khu vực mới ở đó và bằng cách nào đó chỉ ra rằng trang mới là trang "thực" cho khu vực đó và trang cũ Là lỗi thời. Nếu số lượng trang trống có sẵn rơi vào gần giá trị của một khối (hoặc vào các thời điểm khác nhau), ...
supercat

1
@darron: ... hệ thống sẽ cố gắng tìm một khối có các trang lỗi thời nhất trên đó, sao chép tất cả các trang từ khối đó sang các trang trống, sau đó xóa toàn bộ khối. Một vấn đề với cách tiếp cận này là một đĩa có ít trang trống nhưng có một trang "lỗi thời" trên mỗi khối xóa có thể báo cáo là có nhiều chỗ trống, nhưng viết mỗi trang sẽ yêu cầu xóa một khối và sao chép một trang có giá trị dữ liệu vào khối mới. Chậm.
supercat

1
Hừm. Tệ hơn tôi nghĩ ... trong các thử nghiệm trực tiếp vào đĩa, không có bộ đệm, việc viết chính xác nội dung vào một khối mất cùng thời gian với việc viết các khối bị thay đổi (~ 10 giây cho 1000 bản ghi 64KB). Tôi cũng có thể xác định rằng eraseblock của thẻ SD cụ thể của tôi rất có khả năng là 64KB.
darron
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.