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 18-03-2009, 04:18 PM   #1
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi eldest_daica View Post
Mình thấy là kiểu tốc usb như thế này :theo cấu hình của endpoint thì có thế cho phét truyền theo kiểu iso với dữ liệu max là 1024byte .Trong bit 11 và 12 có quy định số trasaction có thế thực hiện trong một frame là 1,2,3 .Và nếu mình đều dùng 16 endpoint thiết lập truyền cùng kiều iso thì dữ liệu có thể gửi đi là :16*3*1024byte/ms .Nhưng mà vẫn không thể là 12Mbit/s .!

Một cái nữa là :usb dùng frame hay microframe để thực transaction :
http://www.faculty.iu-bremen.de/birk..._protocol.html

thì như tài liệu mà mình xem trên net (link trên ) thấy rằng :mình muốn truyền dứ liệu nhỏ thì cũng phải mất 1ms (với frame :nếu thực hiện một transaction) và 125mcros giay với micro frame .Như vậy nếu mà thiết bị của mình chỉ hỗ chợ full speed thì có thể truyền được dữ liệu nhỏ nhưng với thời gian nhanh không (khoảng 125 micro s). ?

Bạn cho hỏi là chuẩn usb 2.0 không hỗ chợ kiều iso và bulk với tốc độ thấp hả ? Nếu mà mình cấu hình nó ở iso hoặc bulk thì sảy ra điều gì ?

Mình dùng pic18f4550 .Pic này có hỗ chợ hi speed không bạn ?
thanks!
Thứ nhất, 12 Mbit/s là tốc độ clock dữ liệu, chứ không phải data rate (đặc biệt không phải là tốc độ truyền dữ liệu có ích, vì còn overhead của frame và của các kiểu truyền dữ liệu). Thứ hai, với kiểu truyền iso bạn không thể tính như vậy, vì độ dài dữ liệu của mỗi transaction không được bảo đảm, và cũng không giống nhau giữa các transaction. Hơn nữa, tính như bạn thì data rate là 49152 byte/ms hay 49152000 byte/s = 393216000 bit/s, điều này nhất định không thể xảy ra ở tốc độ clock dữ liệu là 12 Mbit/s.

Chỉ có hi-speed mới thực hiện các transaction bằng các microframe, full-speed và low-speed chỉ có thể thực hiện transaction bằng các frame. Do đó câu trả lời cho câu hỏi của bạn là: Thiết bị full-speed không thể thực hiện các transaction ở mỗi microframe.

Tiêu chuẩn USB 2.0 không định nghĩa kiểu truyền isochronous và bulk cho low-speed. Nếu bạn vẫn cố sử dụng nó thì đơn giản là thiết bị không hiểu yêu cầu, và không đáp ứng, còn host thì không hỗ trợ các kiểu truyền đó khi thiết bị khai báo trong quá trình enumeration.

PIC18F4550 không hỗ trợ hi-speed.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263

thay đổi nội dung bởi: namqn, 18-03-2009 lúc 04:40 PM. Lý do: trả lời thiếu 1 mục
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2009, 05:57 PM   #2
eldest_daica
Nhập môn đệ tử
 
Tham gia ngày: Aug 2008
Bài gửi: 6
:
Trích:
Nguyên văn bởi namqn View Post
Thứ nhất, 12 Mbit/s là tốc độ clock dữ liệu, chứ không phải data rate (đặc biệt không phải là tốc độ truyền dữ liệu có ích, vì còn overhead của frame và của các kiểu truyền dữ liệu). Thứ hai, với kiểu truyền iso bạn không thể tính như vậy, vì độ dài dữ liệu của mỗi transaction không được bảo đảm, và cũng không giống nhau giữa các transaction. Hơn nữa, tính như bạn thì data rate là 49152 byte/ms hay 49152000 byte/s = 393216000 bit/s, điều này nhất định không thể xảy ra ở tốc độ clock dữ liệu là 12 Mbit/s.

Chỉ có hi-speed mới thực hiện các transaction bằng các microframe, full-speed và low-speed chỉ có thể thực hiện transaction bằng các frame. Do đó câu trả lời cho câu hỏi của bạn là: Thiết bị full-speed không thể thực hiện các transaction ở mỗi microframe.

Tiêu chuẩn USB 2.0 không định nghĩa kiểu truyền isochronous và bulk cho low-speed. Nếu bạn vẫn cố sử dụng nó thì đơn giản là thiết bị không hiểu yêu cầu, và không đáp ứng, còn host thì không hỗ trợ các kiểu truyền đó khi thiết bị khai báo trong quá trình enumeration.

PIC18F4550 không hỗ trợ hi-speed.

Thân,
Than ,
MÌnh thấy chuẩn usb có nói đến max payload transaction /frame .Và có một cái nữa kèm theo là khả năng cung cấp số truyền packet trong một frame .Ví dụ với kiểu iso :
khi payload là 1byte thì max transfer /frame là 150 .MaximumBandwidth /s là 150kb/s .
...Khi paylaod =1023byte max transfer /frame =1 .MaximumBandwidth/s =1.023Mb/s .(trang 124usb system architechture)


Trong một endpoint ,thì chỉ có thực hiện 3 transaction /frame .
Như vậy thông số 150 ở trên có phải là có nghĩa :cho phét thực hiện 150 transaction /fram nhưng ứng với nhiều endpoint khác nhau trên nhiều thiêt bị khác nhau cùng kết nối vào bus .

Một endpoint mình cấu hình là in ,còn endpoint khác mình cấu hình là out .Vĩ dụ payload của mình cũng chỉ là 1byte .thì trong 1ms ấy ,mình có thể thực hiện được cả 2 transaction trên 2 endpoint này không .Và nếu mà được như thế ,Thì nếu mình cấu hình 16 enpoint có 7in và 7out thì mình có thể thực hiện được 14 transaction /ms không ! Bạn có thẻ giải thích ký hơn hộ mình về chính sách quản lý bandwidth trên bus !
rất mong được giải đáp !
eldest_daica vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-03-2009, 10:53 AM   #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
:
Trích:
Nguyên văn bởi eldest_daica View Post
Trong một endpoint ,thì chỉ có thực hiện 3 transaction /frame .
Mình ko nghĩ như vậy. Mỗi frame hoặc microframe là khoảng thời gian để host và device giao tiếp. Vì vậy phụ thuộc vào tốc độ bus, tốc độ host, tốc độ device mà số lượng transaction được thực hiện có thể ít hay nhiều.

Trích:
Một endpoint mình cấu hình là in ,còn endpoint khác mình cấu hình là out .Vĩ dụ payload của mình cũng chỉ là 1byte .thì trong 1ms ấy ,mình có thể thực hiện được cả 2 transaction trên 2 endpoint này không .Và nếu mà được như thế ,Thì nếu mình cấu hình 16 enpoint có 7in và 7out thì mình có thể thực hiện được 14 transaction /ms không ! Bạn có thẻ giải thích ký hơn hộ mình về chính sách quản lý bandwidth trên bus !
rất mong được giải đáp !
Theo lý thuyết thì bạn có thể hoàn tất nhiều transaction trên nhiều EP trong cùng 1 frame hoặc micro frame. Tuy nhiên thực tế, như đã nói, phụ thuộc nhiều vào host và device (tốc độ MCU, loại EP, khả năng duy trì luồng dữ liệu của MCU, phụ thuộc cả vào software).

Bạn có thể xem hình test tốc độ đọc ghi USB trong file đính kèm:
* driver: winusb
* software: VB.net
* device: PIC24F starter kit (PIC24FJ256GB106 @ 16MIPS), BULK EP out 64byte + BULK EP In 64byte

Thử nghiệm đọc hoặc ghi 64KB dữ liệu "không có gì", tức là PIC chỉ đọc EP buffer ngay khi có dữ liệu đến và ghi vào EP buffer ngay khi buffer này empty để hạn chế tối đa PIC NotACK làm giảm rất nhiều tốc độ truy xuất.

Tốc độ đỉnh đạt được:
* Write: 587KB/s (hàng thứ 1), ~ 9 BULK Out transfer/frame
* Read: 1015KB/s (hàng thứ 1), ~ 16 BULK In transfer/frame

Tuy nhiên đây chỉ là kiểm tra theo kiểu "gửi không làm gì", khi vào ứng dụng thực tế,
FW và SW phải xử lý dữ liệu, các tác vụ khác, luồng dữ liệu ko ổn định... tốc độ truyền tải sẽ giảm đi rất nhiều!

Mình thấy bạn quan tâm đến Isochronous transfer ko rõ bạn đang định làm gì?
Hình Kèm Theo
File Type: jpg WinUsb_Read_Write_SpeedTest.JPG (44.0 KB, 190 lần tải)
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]

thay đổi nội dung bởi: bien_van_khat, 21-03-2009 lúc 11:14 AM.
bien_van_khat 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à 08:27 AM.


Đượ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