2009-02-05 46 views
8

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.

Trả lời

3

Tôi đã sử dụng ấn bản trước đó là USB Complete by Jan Axelson. Thực sự rất hoàn chỉnh.

Từ xem xét biên tập:

Bây giờ trong ấn bản thứ tư của mình, hướng dẫn của nhà phát triển này để giao diện Universal Serial Bus (USB) bao gồm tất cả các khía cạnh của dự án phát triển, chẳng hạn như thiết kế phần cứng, phần mềm cho máy, và máy chủ phần mềm ứng dụng.

+0

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

+0

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. –

+0

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

5

Trong khi viết trình điều khiển thiết bị cho bất kỳ giao diện nào (USB, cổng song song, v.v ...), mã cần thiết được phát triển sẽ phụ thuộc vào việc có hệ điều hành (OS) nào, RTOS đang chạy trên bộ xử lý/bộ điều khiển Micro đó . ví dụ: nếu điều đó sẽ chạy nói WinCE - Nó sẽ có Bộ phát triển Driver riêng của nó, và các bước để được theo sau trong việc phát triển trình điều khiển thiết bị. Tương tự đối với bất kỳ hệ điều hành nào khác như Linux, symbian.

Nếu mã sẽ là mã chương trình cơ sở đơn giản (Không có hệ điều hành) sẽ kiểm soát bộ vi xử lý/vi điều khiển, thì đó hoàn toàn là tình huống khác. Vì vậy, dựa trên một trong những tình huống trên mà bạn đang ở trong, người ta cần phải đọc & hiểu: -

1.) Đặc điểm phần cứng của bộ vi xử lý/bo mạch điều khiển vi mô - Đăng ký tệp, cổng, bố cục bộ nhớ, v.v.

2.) USB spec

3.) Vài gợi ý tôi tìm thấy nhanh chóng. Google shud là bạn thân của bạn! http://www.lrr.in.tum.de/Par/arch/usb/usbdoc/ - Linux USB device driver

http://www.microsoft.com/technet/archive/wce/support/usbce.mspx

-AD

0

Tôi không biết phần cứng mà bạn đang lập kế hoạch để sử dụng nhưng giả sử đó là linh hoạt, STMicro cung cấp một dòng vi điều khiển với USB/SPI hỗ trợ và thư viện mã C có thể được sử dụng với các bộ phận của chúng. - Tôi đã sử dụng vi xử lý dòng ARM7 của họ trong nhiều năm với thành công lớn.

1

Tôi tò mò, tại sao bạn chọn 9S12? Tôi đã sử dụng nó ở một công việc trước đây, và không hài lòng.

  • Nó có hỗ trợ gcc tệ hại vì vậy chúng tôi sử dụng Metrowerks
    • mà có thể là okay cho C, nhưng thường tạo ra lỗi C++
    • đã có một IDE tệ hại với các tập tin dự án nhị phân!
  • 9 giây cũng chậm, nhiều lệnh được thực hiện trong 5 chu kỳ.
  • Không có hiệu quả về điện năng.
  • không có dao phay thùng, thực hiện các hoạt động phổ biến trong mã nhúng chậm
  • không rẻ.

Điều duy nhất tôi không thích nhiều hơn là 8.051.Tôi đang sử dụng ARM CortexM3 ở công việc hiện tại, nó tốt hơn 9S12 theo mọi cách (đồng hồ nhanh hơn, nhiều công việc hơn cho mỗi đồng hồ, tiêu thụ điện ít hơn, rẻ hơn, hỗ trợ gcc tốt, 32 bit so với 16 bit).

+0

Bạn có thể chuyển đổi các tệp dự án từ nhị phân sang văn bản (XML), nhưng Codewarrior nói chung vẫn khá tệ hại. Họ hiện đang làm việc trên một IDE dựa trên Eclipse. – cschol

0

Đây là một trang web tuyệt vời được duy trì bởi Jonathan Valvano, một giáo sư tại Đại học Texas. Ông dạy bốn khóa học ở đó (ba đại học, một đại học), tất cả đều sử dụng bộ vi điều khiển 9S12. Trang web của ông chứa tất cả các ghi chú bài giảng, sách hướng dẫn trong phòng thí nghiệm và quan trọng hơn là các tệp khởi động, mà ông sử dụng cho tất cả các lớp học của mình.

Trang web trông giống như từ thập niên 90, nhưng chỉ tìm kiếm một chút và bạn sẽ tìm thấy mọi thứ mình cần.

users.ece.utexas.edu/~valvano/

+0

Tôi đã kiểm tra trang web này và xem mã, nhưng đó là nhiều dữ liệu chuyển từ giao diện RS-232 sang USB. Vì vậy, hầu hết các mã được giao tiếp với UART so với USB. – lordhog

0

Cân nhắc AVR cho dự án MCU tiếp theo của bạn vì nó là tuyệt vời LUFAV-USB thư viện.

+0

Tôi muốn, nhưng nói chung nhóm phần cứng và hệ thống kỹ thuật quyết định lựa chọn nền tảng. Tôi nhận được để chọn các công cụ biên dịch, nói chung là Green Hills. Tôi có một số lời nói trong vấn đề này, nhưng nó bị giới hạn. – lordhog

0

Tôi đang làm việc trên một dự án sử dụng Atmel V71. Bộ vi xử lý rất mạnh mẽ và trong số rất nhiều kết nối cao cấp được cung cấp trên chip là một công cụ USB sẽ thực hiện chế độ thiết bị hoặc máy chủ cho 480 Mhz hoặc 48Mhz (không phải USB 3.0). Các công cụ này miễn phí và đi kèm với một số dự án ví dụ về USB và máy chủ lưu trữ với tất cả mã ngăn xếp USB ngay tại đó. Nó hỗ trợ 10 điểm kết thúc và tất cả các chuyển được thực hiện thông qua DMA vì vậy bạn có hầu hết các mã lực bộ vi xử lý có sẵn cho các nhiệm vụ khác. Ngăn xếp USB Atmel hoạt động mà không cần RTOS

Các vấn đề liên quan