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, 06:49 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
:
USB có khủng khiếp như bạn nghĩ không?

Mục đích:
Chỉ có 1 mục đích duy nhất viết 1 firmware đơn giản nhất đến mức có thể cho 18F4550, đủ để nó enumerate + truyền nhận 1 vài gói dữ liệu nhỏ.

Bạn nên đọc:
+USB 2.0 spec ít nhất là chương 8, 9, 10
+USB complete chương 1, 2, 3, 4, 5, 6
+Nên đọc thêm USB design by example, USB in a nutshell.

Bạn cũng cần:
+Ít nhất 1 con 18F4550, 2550, 2455 hoặc 4455
+Mạch điện như sơ đồ đính kèm. Chú ý, vì USB hoạt động ở tốc độ cao, bạn nên sắp xếp để cái USB header hoặc điểm nối giữa cable USB vào board mạch của bạn càng gần con PIC càng tốt. Nếu bạn làm trên test board thì đặc biệt chú ý không để 2 dây nối vào đường D+ và D- chéo nhau.


------------------

16-4-2008: Microchip đã cho ra các dòng chip tích hợp usb embeded host + usb on-the-go, cùng với framework mới để hỗ trợ, các bạn quan tâm có thể tham khảo ở đây

http://www.microchip.com/stellent/id...param=en534494
File Kèm Theo
File Type: rar PIC USB - Hardware.rar (13.5 KB, 5918 lần tải)

thay đổi nội dung bởi: bien_van_khat, 16-04-2008 lúc 11:36 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, 07:06 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
:
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   #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
:
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   #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
:
+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   #5
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   #6
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 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
Old 17-06-2006, 12:43 PM   #9
ntc
Đệ tử 8 túi
 
ntc's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: HCM city
Bài gửi: 264
:
Send a message via Yahoo to ntc
Em có thấy anh bien_van_khat bên diễn đàn USB của Microchip.

Trong giai đoạn sắp tới, em sẽ có cơ hội tiếp xúc và làm việc với USB, hy vọng sẽ có nhiều vấn đề để trao đổi với anh.

Em cũng có ý định tương tự như anh sau giai đoạn này, đó là một tut cực kì đơn giản về USB, nhưng anh làm trước rồi.
__________________

ntc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-06-2006, 09:34 PM   #10
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
:
hì hì, chính xác thì chưa làm xong mà. Mọi người mà ko góp tay thì chẳng bao giờ xong.

Hỏi trên microchip vừa nhanh vừa được trả lời kỹ, nhưng nếu mình hỏi "ngu" quá nó lại ko thèm trả lời. Đành chịu, nên kiếm anh em thảo luận thì vui 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 18-06-2006, 11:49 AM   #11
doianhve
Đệ tử 2 túi
 
Tham gia ngày: Feb 2006
Bài gửi: 44
:
USB muỗi !

Bạn muốn làm USB của 18f2455/18f24550... thì chẳng có gì khó cả.Chỉ cần có bản CCS bản quyền (Có chứa trong đĩa ICD2) là có ngay ví dụ cho firmware.Cố gắng đọc , sửa và chèn mã code là chạy ngon.Tôi làm cách này chạy ầm ĩ .Dùng hai phần mềm sau để TEST.USBio_demo hay WinDriver.(Chúng có khả năng tự sinh mã code nguồn VB hoặc VC++).Nếu bạn là sinh vien ĐHBKHN nếu cần mang USB đến chỗ tôi,tôi sẽ cho bạn các phần mềm đó.Nhưng phải gửi Mail trước.
why1884@yahoo.com
Chúc bạn thành công.
doianhve vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-05-2024, 12:46 PM   #13
hyvongct
Đệ tử 1 túi
 
Tham gia ngày: Dec 2011
Nơi Cư Ngụ: Usa
Bài gửi: 11
:
Send a message via ICQ to hyvongct Send a message via AIM to hyvongct Send a message via Yahoo to hyvongct
Supreme Сasual Dating - Genuine Ladies

Turn casual moments into unforgettable dates – choose the best casual dating site!
Legitimate Girls
Super casual Dating
__________________
Pretty Girls in your town
hyvongct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-06-2006, 01:17 PM   #14
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
:
Vậy hay quá, sao bạn ko up lên mạng đi. Jungo WinDriver 8.01 thì tôi có rồi, có cả crack nhưng chưa giới thiệu cho anh em, vì tôi nghĩ chưa phải lúc. Còn CCS C như bạn nói thì chưa có. Nếu có thể bạn tạo file ISO cái đĩa của bạn, nén lại, rồi chia nhỏ sau đó upload lên rapidshare.com để mọi người cùng tải về, chứ rất nhiều người không ở Hà Nội cũng muốn được xài. Nếu bạn có host khác nhanh hơn thì càng tốt.
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-06-2006, 02:58 PM   #15
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
Cứ là hoạt động chia sẻ, picvietnam sẽ hỗ trợ host cho các bạn làm việc. Hoàn toàn không có vấn đề gì.

Chúc vui
falleaf 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à 09:27 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