Câu trả lời:
Đó là những gì tôi đã tìm thấy:
Giao thức SD 1 bit là giao thức nối tiếp đồng bộ với một dòng dữ liệu, được sử dụng để truyền dữ liệu hàng loạt, một dòng đồng hồ để đồng bộ hóa và một dòng lệnh, được sử dụng để gửi các khung lệnh. Giao thức SD 1 bit rõ ràng hỗ trợ chia sẻ bus. Lược đồ trọng tài một chủ đơn giản cho phép nhiều thẻ SD chia sẻ một đồng hồ và dòng DAT0. Giao thức SD 4 bit gần giống với giao thức SD 1 bit. Sự thay đổi chính là việc truyền dữ liệu hàng loạt chiều rộng xe buýt xảy ra trên một bus song song 4 bit thay vì một dây đơn. Với thiết kế phù hợp, điều này có khả năng tăng gấp bốn lần thông lượng cho truyền dữ liệu số lượng lớn. Theo mặc định, cả hai giao thức SD 1 bit và 4 bit đều yêu cầu CRC bảo vệ việc truyền dữ liệu hàng loạt. CRC, hoặc Kiểm tra dự phòng theo chu kỳ, là một phương pháp đơn giản để phát hiện sự hiện diện của các lỗi đảo ngược bit đơn giản trong một khối dữ liệu được truyền. Trong chế độ SD 4 bit, dữ liệu đầu vào được ghép trên bốn dòng bus (DAT) và CRC 16 bit được tính độc lập cho mỗi trong bốn dòng. Trong triển khai toàn phần mềm, việc tính toán CRC theo các điều kiện này có thể phức tạp đến mức chi phí tính toán có thể giảm thiểu các lợi ích của bus 4 bit rộng hơn. Tuy nhiên, CRC song song 4 bit là không đáng kể để thực hiện trong phần cứng, do đó, các giải pháp logic ASIC hoặc lập trình tùy chỉnh có nhiều khả năng sinh ra từ bus rộng hơn. Trong triển khai toàn phần mềm, việc tính toán CRC theo các điều kiện này có thể phức tạp đến mức chi phí tính toán có thể giảm thiểu các lợi ích của bus 4 bit rộng hơn. Tuy nhiên, CRC song song 4 bit là không đáng kể để thực hiện trong phần cứng, do đó, các giải pháp logic ASIC hoặc lập trình tùy chỉnh có nhiều khả năng sinh ra từ bus rộng hơn. Trong triển khai toàn phần mềm, việc tính toán CRC theo các điều kiện này có thể phức tạp đến mức chi phí tính toán có thể giảm thiểu các lợi ích của bus 4 bit rộng hơn. Tuy nhiên, CRC song song 4 bit là không đáng kể để thực hiện trong phần cứng, do đó, các giải pháp logic ASIC hoặc lập trình tùy chỉnh có nhiều khả năng sinh ra từ bus rộng hơn.
http://alumni.cs.ucr.edu/~amitra/sdcard/Additable/sdcard_appnote_foust.pdf
Tôi tin rằng bạn sẽ không có đủ sức mạnh để tính toán crc32 ở chế độ 4 bit. Nhưng không có CRC thì có thể.
swapf PORTC,w,c / iorwf PORTA,w,c / movwf POSTINC0,c
, thẻ SD sẽ được đồng hồ trong mỗi lần movwf
. Việc sắp xếp thời gian hợp lý cho thời điểm bắt đầu và kết thúc của mỗi đợt có thể rất khó khăn (tất nhiên, các ngắt sẽ hoàn toàn tích cực phải bị vô hiệu hóa) nhưng có lẽ không phải là không thể. Nhắm mục tiêu tốc độ một byte trên bốn chu kỳ có thể đơn giản hóa mọi thứ.
xorwf crc,w,c / movf PLUSW1,w,c / movwf crc,f,c
sẽ hoạt động với chi phí thêm 3 chu kỳ / byte nếu một người có bảng 256 byte phù hợp trong RAM; nếu làm việc với các cặp byte thì có thể làm tốt hơn.
cải thiện thông lượng ở chế độ 1 bit
Có một sự thay đổi lớn trong hiệu suất từ thẻ SD sang thẻ khác.
(a) Tất cả các thẻ đưa ra phản hồi "bận" cho một lệnh cho đến khi nó sẵn sàng xử lý lệnh tiếp theo. Một thẻ vẫn có thể tuân thủ các tiêu chuẩn ngay cả khi phải mất một giây để viết một khối dữ liệu. Có lẽ bạn có thể thử một vài thẻ khác nhau và xem thẻ nào phù hợp nhất với bạn - thông lượng mạng tốt nhất, độ trễ thấp nhất, ít năng lượng nhất để thức dậy và lưu trữ dữ liệu và quay trở lại giấc ngủ, hoặc bất cứ điều gì là nhất quan trọng cho dự án của bạn. Nếu thông lượng là quan trọng nhất, thì bạn sẽ muốn chọn Xếp hạng loại tốc độ thẻ SD phù hợp - tốc độ cao nhất bạn có thể chi trả, hoặc ít nhất là loại thấp nhất mang lại hiệu suất phù hợp.
(b) Mặc dù tiêu chuẩn yêu cầu tất cả các thẻ SD để xử lý liên lạc với tốc độ lên tới 25 Mbit / giây ở chế độ 1 bit, một vài thẻ dường như hoạt động với tốc độ bit cao hơn nhiều - có lẽ bạn có thể thử một vài thẻ khác nhau và tăng tốc tốc độ bit của bạn đến một cái gì đó nhanh hơn hoạt động với thẻ cụ thể đó. (Có cái gì đó như "phát hiện tốc độ baud tự động" để tự động sử dụng tốc độ tối đa được hỗ trợ bởi bất kỳ thẻ nào hiện đang được cắm không?)
sử dụng chế độ 4 chân
Một vi điều khiển có thể hỗ trợ sử dụng chế độ truyền SDI bốn bit. Hai tùy chọn tôi biết là:
(a) Cắm thẻ vào bộ điều hợp thẻ SD USB sử dụng chế độ truyền SDI bốn bit. Cắm bộ chuyển đổi vào đầu nối máy chủ USB được gắn vào vi điều khiển có thể hoạt động như máy chủ USB, chẳng hạn như PIC24FJ32GB002.
(b) Cắm thẻ vào khe cắm thẻ SD được gắn trực tiếp vào vi điều khiển. Tôi có cần trả tiền bản quyền cho người dùng thẻ SD không nếu thiết bị của tôi chỉ xảy ra tình trạng tương thích với thẻ SD? Trong một thời gian dài các bằng sáng chế và bí mật thương mại khác nhau yêu cầu một người thiết kế giao diện điều khiển máy chủ như vậy phải ký NDA và mua giấy phép bằng sáng chế từ Hiệp hội Thẻ SD. Nhưng tôi nghe nói rằng tiêu chuẩn giao diện SD đang trở nên cởi mở hơn kể từ năm 2006 .