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 17-03-2009, 11:37 PM   #1
eldest_daica
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!
eldest_daica vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2009, 01:48 AM   #2
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 đọ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!
Trong USB 2.0, 1 frame là 1 ms và 1 microframe là 125 us, tức là một frame bao gồm 8 microframe.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2009, 03:20 PM   #3
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
Trong USB 2.0, 1 frame là 1 ms và 1 microframe là 125 us, tức là một frame bao gồm 8 microframe.

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,
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!
eldest_daica vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-03-2009, 04:18 PM   #4
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   #5
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   #6
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
Old 23-03-2009, 11:51 PM   #7
eldest_daica
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 .
eldest_daica vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2009, 11:59 PM   #8
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
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 .
Vấn đề là cho dù bạn có thực hiện được 10 transaction trong 1 ms, thì các transaction đó cũng không diễn ra tuần tự một cách chính xác sau mỗi 0,1 ms.

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.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-03-2009, 04:57 PM   #9
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
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 .
Bạn nên chọn giải pháp tính toán giải thuật điều khiển trên PIC / dsPIC, chỉ kết nối máy tính để nhận các tham số điều khiển như tốc độ, vị trí...

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:
Đ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 .
Bạn nên dẫn chứng đến tài liệu tham khảo, mình ko rõ bạn đang nói đến bit nào? EP descriptor hoàn toàn ko định nghĩa số lượng transaction / frame.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 09:26 PM   #10
trandaihai2003
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 4
:
Trích:
Nguyên văn bởi eldest_daica View Post
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 !
=> Một giải pháp, theo tôi thế này:
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,
trandaihai2003 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 09:38 PM   #11
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 trandaihai2003 View Post
...
Note: Interrupt này là đường interrupt của USB về Interrupt controller của CPU.
...
Trong USB 2.0, chỉ có 2 dây dữ liệu để truyền tín hiệu dạng vi sai, làm gì có đường interrupt từ ngoại vi về host. Còn nếu bạn định nói về interrupt của host gửi về CPU của máy tính thì tôi cho rằng nó chẳng có liên quan gì đến việc cập nhật trạng thái của ngoại vi nhanh hay chậm.

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.
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-03-2009, 10:26 PM   #12
trandaihai2003
Nhập môn đệ tử
 
Tham gia ngày: Aug 2006
Bài gửi: 4
:
Trích:
Nguyên văn bởi namqn View Post
Trong USB 2.0, chỉ có 2 dây dữ liệu để truyền tín hiệu dạng vi sai, làm gì có đường interrupt từ ngoại vi về host. Còn nếu bạn định nói về interrupt của host gửi về CPU của máy tính thì tôi cho rằng nó chẳng có liên quan gì đến việc cập nhật trạng thái của ngoại vi nhanh hay chậm.

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,
Sorry. Rất tiếc bạn hông hiểu ý của tôi, mà bạn còn đặt điều này điều kia ... rất là tiếc ! Làm rõ ý người khác bằng cách như vậy thì ... không tốt chút nào.

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,
trandaihai2003 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2009, 12:07 AM   #13
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 trandaihai2003 View Post
Sorry. Rất tiếc bạn hông hiểu ý của tôi, mà bạn còn đặt điều này điều kia ... rất là tiếc ! Làm rõ ý người khác bằng cách như vậy thì ... không tốt chút nào.

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,
Xin lỗi bạn nếu như tôi giải thích sai ý của bạn.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-03-2009, 08:52 AM   #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
:
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:
Nguyên văn bởi trandaihai2003 View Post
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.
Làm cách nào bạn đặt được "ngưỡng để xảy ra interrupt" của USB host controller?
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,
__________________
- 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, 28-03-2009 lúc 08:58 AM.
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-03-2009, 03:08 PM   #15
eldest_daica
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 đỡ .
eldest_daica 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à 06:33 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