PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 16-06-2006, 07:06 PM   #1
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Sau khi có phần cứng bạn có thể nạp ngay cái firmware đính kèm dưới đây để chạy thử.

Firmware bên dưới được sửa từ firmware của microchip bới Mat admin của site www.piccoder.co.uk. Tuy nhiên để chạy được cái chương trình trên máy tính bạn cần .NET framework 1.1 (source code = C#)

Bây giờ là vấn đề chính

Làm việc với USB tôi thấy có 2 điểm khó:
1. Chuẩn USB rất rất phức tạp, USB2.0 spec dài 650 trang, USB complete hơn 500 trang. Tất nhiên để thực hiện được như mục đích đề ra từ đầu bạn cần đọc ít trang hơn nhiều. Bạn hầu như không thể nhớ hết nổi thứ tự của các quá trình, do đó lúc này bạn cần 1 tài liệu tham khảo nhanh, khuyên bạn nên có cuốn "USB in a nutshell" (http://beyondlogic.org/)
2. Rất khó debug, nếu phần cứng của bạn enumerate sai hầu như không có cách gì để debug, trừ khi bạn có 1 thiết bị debug phần cứng giá tính = ngàn dollar.
File Kèm Theo
File Type: rar USB demo.rar (237.7 KB, 5295 lần tải)
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2006, 07:46 PM   #2
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Giao thức USB được thực hiện qua nhiều lớp, lớp thấp nhất do module USB (SIE) thực hiền, công việc của bạn là xử lý các yêu cầu dưới dạng các cờ do SIE bật mà thôi.
Để có đầy đủ các cờ bạn tham khảo datasheet. Thực tế bạn cần xử lý ít nhất 2 sự kiên sau:
+RESET (cờ URSTIF): host yêu cầu device reset, bạn bắt buộc thực hiện reset không được cãi. Reset đưa tất cả các enpoint từ 1 - 15 về trạng thái disable, riêng EP0 thiết lập thành control EP. Công việc này được thực hiện với các BUFFER DESCRIPTOR (BD) (xem datasheet).
Xóa thanh ghi UADDR về 0 (thanh ghi USB address). Xóa sạch 4 thanh ghi USB status (USTAT) (coi datasheet chỗ này).
+Transaction complete (TRNIF): Công việc nằm ở đây.
. Xác định xem EP nào vừa xong, từ đó xác định BD nào chứa dữ liệu mới nhận được
. Dựa vào BD.status xác định loại TOKEN vừa được yêu cầu: SETUP, IN, OUT?
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2006, 08:13 PM   #3
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
+SETUP TOKEN: cụ thể xem spec
. Xác định loại REQUEST: tối thiểu phải xử lý standard_request.

+STANDARD_REQUEST: Tối thiểu phải xử lý 2 request sau:
GET_DESCRIPTOR, SET_ADDRESS

+SET_ADDRESS: cụ thể xem Spec

+GET_DESCRIPTOR: Tối thiểu bạn phải send DEVICE_DESCRIPTOR và CONFIGURATION_DESCRIPTOR.

vậy bạn send dữ liệu như thế nào khi host yêu cầu?

Ví dụ nó yêu cầu DEVICE_DESCRIPTOR (trong quá trình enumerate bằng GET_DESCRIPTOR request với descriptor type = 1), bạn đưa 8 byte đầu của DEVICE_DESCRIPTOR vào bộ đệm của EP0 (cụ thể coi datasheet phần BUFFER DESCRIPTOR), đảo bit kiểm tra DATA0 - DATA1 nếu cần, set bit UOWN (SIE own buffer descriptor). SIE tự trả lời dùm bạn. Sau khi host nhận được 8 byte nó có thể gửi tiếp 1 IN TOKEN yêu cầu "chưa đủ tui muốn nữa", và bạn phải tiếp tục đẩy dữ liệu vào, đảo bit kiểm tra DATA0 - 1, set UOWN, là dữ liệu lại đi tiếp.

Nếu host muốn gửi dữ liệu cho bạn? nó sẽ gửi 1 OUT TOKEN.

Quá trình enumerate ko sử dụng OUT TOKEN, dữ liệu bạn nhận được đều được đính kèm trong SETUP TOKEN. Vì vậy OUT TOKEN chỉ xày ra sau khi enumerate thành công, trong quá trình truyền nhận dữ liệu thông thường. Khi có 1 OUT TOKEN bạn xác định ở trên EP nào, sau đó nhận dữ liệu ở bộ đệm tương ứng, đảo bit kiểm tra DATA0 - 1, xử lý dữ liệu.

thay đổi nội dung bởi: bien_van_khat, 16-06-2006 lúc 08:47 PM.
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2006, 08:41 PM   #4
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
DATA0 và DATA1: cụ thể xem spec.

Đây là chỗ rất rắc rối, và khó hiểu, nhưng nói chung bạn chú ý điểm này

Gói dữ liệu đầu tiên đi kèm SETUP TOKEN luôn luôn là DATA0, và phase dữ liệu bạn đáp trả bắt buộc là DATA1 ko cần quan tâm tới phase dữ liệu cuối của SETUP TOKEN là DATA0 hay DATA1. Nói cách khác trên EP0 khi xảy ra SETUP TOKEN thì chu trình bị reset lại từ đầu (bạn bắt buộc phải ngừng mọi công việc để xử lý cái TOKEN này, và gói dữ liều đầu tiên mà bạn nhận hoặc sẽ phải gửi là hoàn toàn biết trước loại nào).


Vì tôi viết bài này hơi có 1 chút ... hứng nên một số điểm đưa ra không có dẫn chứng. Tuy nhiên mục tiêu nhắm tới là để mọi người cùng thảo luận để có 1 tut thật dẽ hiểu cho 1 vấn đề rất phức tạp.

Toàn bộ bài viết ko hề giải thích bất kỳ khái niệm nào về giao thức USB mà chỉ nhấn vào 1 mục đích: viết firmware cho 18F4550 phải làm những gì. Do đó để có thể thảo luận hiệu quả bạn nên đọc những e-book mà tôi giới thiệu, tránh những câu hỏi như "DATA0 là gì?" - xin lỗi nhé bạn nên tự tìm hiểu tự hơn!!!
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2006, 10:22 PM   #5
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Chân thành cảm ơn các bài viết của bienvankhat.

Có lẽ từ đây chúng ta sẽ có nhiều điều hay để thảo luận về USB với PIC, vì mọi người sẽ bắt đầu thử nghiệm những gì bạn cung cấp.

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-01-2025, 09:43 PM   #7
knnhubi
Đệ tử 2 túi
 
Tham gia ngày: Dec 2011
Nơi Cư Ngụ: Usa
Bài gửi: 44
:
Send a message via ICQ to knnhubi Send a message via AIM to knnhubi Send a message via Yahoo to knnhubi
Tình yêu đầu tiên bắt đầu từ một cuộc gọi điện thoại.

Tình yêu đầu tiên bắt đầu từ một cuộc gọi điện thoại.
__________________
Pretty Girls in your city
knnhubi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-10-2012, 12:23 PM   #8
duc_nam
Nhập môn đệ tử
 
Tham gia ngày: Aug 2011
Bài gửi: 1
:
Trích:
Nguyên văn bởi bien_van_khat View Post
Sau khi có phần cứng bạn có thể nạp ngay cái firmware đính kèm dưới đây để chạy thử.

Firmware bên dưới được sửa từ firmware của microchip bới Mat admin của site www.piccoder.co.uk. Tuy nhiên để chạy được cái chương trình trên máy tính bạn cần .NET framework 1.1 (source code = C#)

Bây giờ là vấn đề chính

Làm việc với USB tôi thấy có 2 điểm khó:
1. Chuẩn USB rất rất phức tạp, USB2.0 spec dài 650 trang, USB complete hơn 500 trang. Tất nhiên để thực hiện được như mục đích đề ra từ đầu bạn cần đọc ít trang hơn nhiều. Bạn hầu như không thể nhớ hết nổi thứ tự của các quá trình, do đó lúc này bạn cần 1 tài liệu tham khảo nhanh, khuyên bạn nên có cuốn "USB in a nutshell" (http://beyondlogic.org/)
2. Rất khó debug, nếu phần cứng của bạn enumerate sai hầu như không có cách gì để debug, trừ khi bạn có 1 thiết bị debug phần cứng giá tính = ngàn dollar.
Em chào anh. Em muốn lập trình giao thức USB nhưng khi em down thử file USb_demo.rar của anh về chạy thì bị báo lỗi: usbdsc.c:241:Warning [2054] suspicious pointer conversion

nó hiện lỗi ở dòng :

rom const unsigned char *rom USB_CD_Ptr[]={&cfg01,&cfg01};
rom const unsigned char *rom USB_SD_Ptr[]={&sd000,&sd001,&sd002};

Anh giải thích giúp em lỗi này là lỗi gì với ạ! Em cảm ơn anh!
duc_nam vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:23 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam