Tôi đã được giao nhiệm vụ viết trình điều khiển thiết bị cho thiết bị nhúng sẽ liên lạc với bộ điều khiển vi mô qua giao diện SPI. Cuối cùng, giao diện USB sẽ được sử dụng để tải xuống mã được cập nhật từ bên ngoài và được sử dụng trong giai đoạn xác minh.USB cho thiết bị nhúng - thiết kế ngăn xếp giao thức/trình điều khiển thiết bị
Câu hỏi của tôi là, có ai biết thiết kế hoặc tài liệu tham khảo hay hướng dẫn trực tuyến bao gồm việc triển khai/thiết kế trình điều khiển thiết bị/ngăn xếp giao thức USB trong hệ thống nhúng không? Tôi chỉ mới bắt đầu và đọc qua thông số kỹ thuật của trang HTML 2.0 v2.0 là một chút khó khăn vào lúc này.
Giống như một FYI, bộ điều khiển vi mô mà tôi đang sử dụng là Freescale 9S12.
Đánh dấu
Dựa trên ý kiến (-AD) goldenmean của tôi muốn thêm các thông tin sau:
1) Các thiết bị nhúng sử dụng một nhà điều hành tùy chỉnh và không sử dụng một COTS hoặc RTOS.
2) Thiết bị sẽ sử dụng ngắt để cho biết dữ liệu đã sẵn sàng để truy xuất từ thiết bị.
3) Tôi đã đọc qua một số tài liệu liên quan đến Linux, nhưng vì tôi hoàn toàn không quen với Linux nên không phải lúc nào cũng hữu ích (mặc dù tôi hy vọng nó sẽ rất nhanh). Cách tiếp cận thiết kế, ít nhất là để viết trình điều khiển thiết bị cho thiết bị USB thì lớp giao thức USB (I/O) sẽ nằm trên đầu trình điều khiển thiết bị để giải thích dữ liệu. Tôi cho rằng đây sẽ là cách tiếp cận tốt nhất, mặc dù tôi có thể sai.
Edit - Một năm sau
Tôi chỉ muốn chia sẻ một vài mặt hàng trước khi họ biến mất khỏi tâm trí của tôi trong trường hợp tôi không bao giờ làm việc trên một thiết bị USB một lần nữa. Tôi gặp phải một vài trở ngại khi phát triển mã và bắt đầu chạy và chạy nó lần đầu tiên.
Vấn đề đầu tiên tôi gặp phải là khi thiết bị USB được kết nối với Máy chủ (Windows trong trường hợp của tôi) là máy chủ lưu trữ, hãy đưa ra yêu cầu Đặt lại. Thiết bị USB sẽ thiết lập lại và xóa cờ kích hoạt ngắt. Tôi đã không đọc các tài liệu đủ để biết điều này đang xảy ra, vì vậy tôi chưa bao giờ nhận được yêu cầu thiết lập gián đoạn. Phải mất một thời gian tôi mới hiểu được điều này.
Vấn đề thứ hai mà tôi gặp phải không xử lý Yêu cầu thiết lập cho Set_Configuration đúng cách. Tôi đã xử lý nó, nhưng tôi đã không xử lý yêu cầu một cách chính xác trong đó các thiết bị USB đã không gửi một ACK khi yêu cầu Set-Up này đến. Tôi cuối cùng tìm thấy điều này bằng cách sử dụng một phần cứng phân tích giao thức USB.
Có nhiều vấn đề khác mà tôi gặp phải, nhưng đây là hai vấn đề lớn nhất khiến tôi mất nhiều thời gian để tìm ra. Một vấn đề khác mà tôi phải lo lắng là định dạng dữ liệu lớn và cuối cùng, Freescale 9S12 so với định dạng dữ liệu USB (Intel), tương ứng.
Tôi đã kết thúc việc tạo trình điều khiển thiết bị USB tương tự như trình điều khiển thiết bị UART mà tôi đã thực hiện trong quá khứ. Tôi đã đăng mã này vào URL sau.
http://lordhog.wordpress.com/2010/12/13/usb-drive
tôi có xu hướng sử dụng các cấu trúc rất nhiều, vì vậy mọi người có thể không thích họ vì họ không phải là cổng thông tin như sử dụng # định nghĩa (ví dụ, MAX3420_SETUP_DATA_AVAIL_INT_REQR 0x20), nhưng tôi thích họ vì nó làm cho mã hơn có thể đọc được cho tôi.Nếu bất cứ ai có câu hỏi liên quan đến nó xin vui lòng e-mail và tôi có thể cố gắng để cung cấp cho một số cái nhìn sâu sắc với nó. Cuốn sách "USB Complete: Hướng dẫn của nhà phát triển" rất hữu ích, miễn là bạn biết những khu vực cần tập trung vào. Đây là một ứng dụng đơn giản và chỉ sử dụng USB tốc độ thấp.
Marcelo, Cảm ơn thông tin và tôi sẽ đặt nó trên danh sách mong muốn, nhưng tôi cần phát triển các lớp trình điều khiển thiết bị và giao thức vào thời điểm sách này xuất hiện. Tôi đã đặt một cuốn sách khác của cùng một tác giả. – lordhog
Hm, không thấy nó chưa ra, xin lỗi. Nhưng tôi hạnh phúc vì đó là một số sử dụng cho bạn =) Sách của cô ấy rất tuyệt. –
Khi tôi hỏi về giao thức thiết bị USB, đây là cuốn sách mà khách hàng tiềm năng của tôi đề xuất. – Spike0xff