![]() |
|
Tài trợ cho PIC Vietnam |
Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Aug 2008
Bài gửi: 6
: |
Tốc độ của chuẩn Usb 2.0 ?
Mình đọc tài liệu về usb .Có một vài điểm chưa dõ mong các bạn giải thích hộ với .
Trong usb 2.0 có frame là 1ms hay nó là microframe là 125micro giây .? Tại sao tốc độ của full speed là 12Mbps và của Hi speed là 480Mbps ? Tại sao tốc độ thấy ko thể dùng kiều bulk và iso ?Vì mình thấy việc cấu hình các endpoint ko có gì khác biệt giứa các kiều truyền ? Trong một frame thì max ta có thể thực hiện được bao nhiêu transaction ứng với mỗi kiểu truyền ? Mình cũng không được dõ lắm về thông số binterval trong endpoint descriptor ,mong các bạn giải thích kỹ hộ mình ! Một cái nữa là các bạn giải thích hộ mình về thiết bị hỗ chợ hi speed ?làm soa để biết được ?Rất mong mõi người cùng thảo luận để có thể cùng nhau tiến lên! |
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
Tốc độ clock dữ liệu của full-speed là 12 Mbps, và tốc độ clock dữ liệu của hi-speed là 480 Mbps, được định nghĩa bởi USB IF. Do đó câu hỏi của bạn nên được chuyển cho USB IF. Tiêu chuẩn không định nghĩa kiểu truyền bulk và iso cho low-speed, do đó không dùng được. Câu hỏi kế tiếp của bạn tôi không rõ câu trả lời (có lẽ nằm trong tài liệu "USB Complete"). Về bInterval của endpoint descriptor, nó chỉ có nghĩa với Iso và Interrupt transfer. Với Iso, nó bắt buộc có giá trị là 1. Đây là số frame (với low hay full-speed) hay microframe (với hi-speed) giữa các lần poll dữ liệu của endpoint. Những thông tin trên có thể tìm thấy trong tài liệu "USB in a nutshell", đã được giới thiệu nhiều lần ở picvietnam. Thiết bị hỗ trợ hi-speed ban đầu sẽ xuất hiện như một thiết bị full-speed, sau đó nó sẽ thiết lập chế độ trao đổi dữ liệu hi-speed với host trong giai đoạn reset (xem http://www.usbmadesimple.co.uk/ums_6.htm). 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 |
|
![]() |
![]() |
![]() |
#3 | |
Nhập môn đệ tử
Tham gia ngày: Aug 2008
Bài gửi: 6
: |
Trích:
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! |
|
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#5 | |
Nhập môn đệ tử
Tham gia ngày: Aug 2008
Bài gửi: 6
: |
Trích:
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 ! |
|
![]() |
![]() |
![]() |
#6 | |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
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:
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ì? thay đổi nội dung bởi: bien_van_khat, 21-03-2009 lúc 11:14 AM. |
|
![]() |
![]() |
![]() |
#7 |
Nhập môn đệ tử
Tham gia ngày: Aug 2008
Bài gửi: 6
: |
thân ,
Mục đích của mình là truyền thông số về dòng điện lên máy tính ,sau đó đk động cơ . Do đk vòng lặp dòng điện nên mình nó đáp ứng nhanh trong khoảng 0.1 ms . Vì thời gian trao đổi là của frames là 1ms .Mình quan tâm đến vấn đề là trong một frames ấy mình cấn thực hiện được khoảng 10 transaction với các endpoint in và 10 transaction với các endpoint out . Mục đích của mình không phải gửi một lần với số lượng dữ liệu lớn mà là thực hiện được cành nhiều trao đổi dữ liệu nhưng với kích thước nhỏ trong 1frames để đảm bảo đk dòng điện . Mình ban đầu của mình là đk một động cơ ,sau thì đk nhiều hơn ,nên mình rất quan tâm đến vấn đề này ! Khi xem usb complete ,chỉ với kiểu truyền control mới cho phép cả endpoint in và endpoint out được sử dụng trong một frames thôi thì phải ? 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. Điều này bạn nói có thể thực sự chính xác không ,vì mình thấy trong endpoint description chỉ cho phét định nghĩa tối đa 3 transaction /frames :bit 11 và 12 . Mình định sử dụng nhiều endpont khác nhau thực hiện việc trao đổi dữ liệu với khối lượng nhỏ để có thế thực hiện được nhiều transaction /frames ,không biết có được không . |
![]() |
![]() |
![]() |
#8 | |
Trưởng lão PIC bang
|
Trích:
Cần hiểu thế này: mỗi 1 ms, host sẽ hỏi các ngoại vi nối vào bus xem có cần truyền dữ liệu không, nếu cần sẽ thực hiện truyền (bao nhiêu transaction trong mỗi lần truyền thì tùy theo thiết lập mà host đã ấn định sau khi hoàn tất negotiation). Nếu host không hỏi thì ngoại vi có hàng ngàn byte dữ liệu cũng sẽ phải để nằm chờ ở đó. Nếu chỉ truyền dữ liệu lên máy cho mục đích lưu trữ, hiển thị, thì bạn chỉ cần lưu ở bộ đệm của PIC, rồi mỗi lần được phép truyền thì đẩy toàn bộ dữ liệu đang đệm lên PC. Điều mà bạn muốn là tần suất cập nhật thông tin cao, và nếu tần suất này là > 8000 lần mỗi giây thì ngay cả hi-speed USB cũng bó tay (USB không được thiết kế cho mục đích này). Ví dụ, bạn muốn thay đổi trạng thái của một ngõ ra trên ngoại vi một cách bất đồng bộ trong vòng 100 us thì hi-speed USB cũng chịu chết. Và tiêu đề của luồng này cũng không phản ánh chính xác điều mà bạn muốn đạt được, bạn muốn có update rate cao, chứ không quan tâm lắm đến data rate. 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, 24-03-2009 lúc 12:08 AM. |
|
![]() |
![]() |
![]() |
#9 | ||
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Trích:
Như anh Nam đã phân tích, cách tiếp cận của bạn ko khả thi. Ngay cả nếu đưa 1 con chip Hi-speed USB vào giải pháp này thì vẫn ko hiệu quả về giá thành, thời gian phát triển. Bạn có thể tham khảo Hi-speed USB MCU của Cypress, tuy nhiên mình ko chắc USB stack của nó có miễn phí hay ko. Trích:
|
||
![]() |
![]() |
![]() |
#10 | |
Nhập môn đệ tử
Tham gia ngày: Aug 2006
Bài gửi: 4
: |
Trích:
Như bạn biết: một frame (1ms) có 8 micro-frame (125us). Bạn có thể sử dụng chế độ interrupt trong USB host controller 2.0. Ta có thể đặt ngưỡng để xảy ra interrupt là từ 1 tới 8 micro-frame trong frame sẽ xảy ra interrupt. Note: Interrupt này là đường interrupt của USB về Interrupt controller của CPU. Điều kiện để làm đc điều này là chip ( MCU, SOC, Processor ..) của bạn hỗ trợ điều này. Còn tùy vào tần số làm việc của chip bạn nữa. Regards, |
|
![]() |
![]() |
![]() |
#11 | |
Trưởng lão PIC bang
|
Trích:
Cần chú ý rằng USB là giao tiếp thuộc loại host-concentric, nghĩa là mọi sự truyền thông trên bus đều do host khởi đầu. Do đó, nếu sử dụng hi-speed mode (mà hiện nay chưa được bất kỳ vi điều khiển PIC nào hỗ trợ), thì bạn cũng chỉ có thể yêu cầu cập nhật trạng thái từ ngoại vi sau mỗi 125 us. 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, 27-03-2009 lúc 09:56 PM. |
|
![]() |
![]() |
![]() |
#12 | |
Nhập môn đệ tử
Tham gia ngày: Aug 2006
Bài gửi: 4
: |
Trích:
Tôi chỉ nhắc tới khả năng sử dụng interrupt ở cả Host function và device function, ví dụ sau mỗi transaction/micro-frame sẽ có interrupt .. đó là một hướng. ![]() Regards, |
|
![]() |
![]() |
![]() |
#13 | |
Trưởng lão PIC bang
|
Trích:
Tôi muốn nhắc nhở bạn rằng đây là diễn đàn về PIC/dsPIC, nên bạn chú ý đến khả năng thực sự của những chip này khi đưa ra ý kiến. Vì nếu bạn đưa ra những giải pháp mà không áp dụng được với PIC/dsPIC thì có thể khiến người khác mất thời gian một cách vô ích. Nếu bạn nêu ra một giải pháp mà không có PIC/dsPIC nào đáp ứng được thì đề nghị bạn giới thiệu cụ thể một vài chip khác có khả năng đó, để tránh cho người đọc đi vào ngõ cụt. Cụ thể trong trường hợp này, dùng interrupt ở phía device có lẽ chỉ giúp device đáp ứng với các sự kiện bus nhanh hơn, chứ không tăng được tần suất trao đổi dữ liệu giữa host và device. Và với các PIC/dsPIC hiện nay thì không thể dùng microframe. 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 |
|
![]() |
![]() |
![]() |
#14 | |
...Damned...
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
: |
Có thể mình cũng ko hiểu ý bạn, nhưng
Nếu bạn nói đến Interrupt Transfer của USB protocol thì chữ Interrupt hoàn toàn ko có nghĩa là ngắt, nó chỉ mang ý nghĩa rằng: Host đảm bảo với các Interrupt EP rằng bọn này sẽ được host phục vụ liên tục cứ sau 1 khoảng thời gian mà thiết bị yêu cầu (1, 2, 4... frame/micro frame). Mức ưu tiên phục vụ của các loại transfer là Control > Interrupt > Isochronous > Bulk. Nhưng host phục vụ ngay khi cần, ko có nghĩa là software của bạn cũng được báo cáo ngay lập tức. Windows ko phải là HDH thời gian thực, do đó, thời gian trễ giữa 2 sự kiện này là hoàn toàn ko thể biết trước. Trích:
Làm cách nào bạn phục vụ ngắt của Host controller về CPU trong phần mềm của bạn? Mình nghĩ ý tưởng của bạn là cho máy tính boot từ bootloader của bạn, load phần mềm của bạn. Phần mềm của bạn bây giờ chạy hoàn toàn ko dựa trên bất kỳ hệ điều hành nào, lúc đó, với toàn quyền truy xuất phần cứng bạn có thể viết driver cho cả USB Host controller, VGA, Sound, ethernet..., tha hồ thao túng hệ thống, sound cool, ![]() thay đổi nội dung bởi: bien_van_khat, 28-03-2009 lúc 08:58 AM. |
|
![]() |
![]() |
![]() |
#15 |
Nhập môn đệ tử
Tham gia ngày: Aug 2008
Bài gửi: 6
: |
hi ,
Những điều bạn nói ,có nghĩa là với khối lượng lớn hay nhỏ thì với full speed mình chỉ có thể thiết lập được một kênh truyền dũ liệu giữa host và ngoại vi sau mỗi 1ms ,và vói hi speed là 125micoro giây .pic nào hỗ chợ chuẩn hi speed vậy bạn Bạn có sử biết đến một chuẩn nào khác có tốc độ update cao hơn không ? Rất mong được giúp đỡ . |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|