PDA

View Full Version : USB for everyone


falleaf
14-11-2005, 11:34 AM
Đây là bài viết của Quên mang kính trên diễn đàn ttvnol:

http://www3.ttvnol.com/dtvt/280997/trang-1.ttvn

Bài viết về USB khá tổng quan, giúp các bạn hình dung một số khái niệm cơ bản về USB.

Một vấn đề đặt ra là làm sao thực hiện giao tiếp USB với PIC18F2550 và 18F4550.

Chúng ta sẽ có dịp thảo luận vấn đề này trong thời gian tới.

Chúc vui.

falleaf
14-11-2005, 11:41 AM
Đầu tiên là sơ đồ chân và thông số cổng USB cho bạn nào cần biết:

- Thông tin lấy chủ yếu từ trang Web chính thức của hiệp hội phát triển USB

www.usb.org

http://www.ttvnol.com/uploaded/quen_mang_kinh/usblayout.jpg



USB Technical Overview
( David J. Meppelink, April 10, 2003)

Giới thiệu

USB [Universal Serial Bus] là một chuẩn kết nối ngoại vi như là chuột, bàn phím, camera, ổ đĩa đến PC.

1. Đầu tiên USB thay thế tất cả các loại đầu nối cổng song song và nối tiếp khác với một đầu cắm chuẩn và kết hợp cổng.

2. Với PCs kèm theo USB và ngoại vi bạn chỉ cần cắm chúng và bật chúng lên. USB thực hiện mọi quá trình tự động.

3. USB là thiết bị thay nóng, không cần bật tắt máy khi cắm hay rút thiết bị USB.

4. USB hỗ trợ cắm nhiều thiết bị trong cùng một lúc.

5. Một đặc điểm dễ chịu khác của USB là cung cấp điện cho nhiều thiết bị ngoại vi. USB khiến PC tự động phát hiện công suất yêu cầu và cung cấp cho thiết bị.

I. Chuẩn USB:

Chuẩn USB được phát triển Diễn đàn thực hiện USB (Compaq, Hewlett-Packard, Intel, Microsoft, NEC, Phillips, etc)... Các máy Mac cũng hỗ trợ nó:

Có hai phiên bản chuẩn:

- USB 1.1 (1995) định nghĩa hai tốc độ 12Mbps (full speed) và 1.5Mbps (low speed) và hai dạng đầu nối Series A và Series B.

- USB 2.0 (5-2000) định nghĩa 3 tốc độ 480Mbps (high speed), 12Mbps và 1.5Mbps. Nó hoàn toàn tương thích ngược với USB 1.1.

Sau khi chuẩn USB 2.0 phát hành (10-2000), Engineering Change Notice (ENC) thêm đầu nối Series mini-B.


Xem chi tiết hơn bằng link cung cấp phía trên.
Bạn nào có thể chép tiếp bài này sang đây dùm nhé.

Cám ơn quên mang kính
Tiểu sử, QMK hiện đang công tác ở BKHCM, sinh hoạt nhiều trên diendandientu.com, là một thành viên tích cực phát triển AVR và các vấn đề về máy tính, vi xử lý...

falleaf
15-11-2005, 12:41 AM
i. So sánh tốc độ:


Bảng sau cho thấy tốc độ truyền (megabytes per second) của USB và các chuẩn giao diện thường sử dụng khác:


Connection Type Mbytes/sec

serial port 0.013

standard parallel port 0.115

Original USB 1.5 (10x faster than typical IO ports)

ECP/EPP parallel port 3

IDE 16.7

SCSI-1 5

SCSI-2 (Fast SCSI, Fast Narrow SCSI) 10

Fast Wide SCSI (Wide SCSI) 20

Ultra SCSI (SCSI-3, Fast-20, Ultra Narrow) 20

UltraIDE 33 (typical max for PC disks)

Wide Ultra SCSI (Fast Wide 20) 40

Ultra2 SCSI 40

IEEE-1394 (Firewire) 50

Hi-Speed USB 60 (2x faster than typical disks)

Wide Ultra2 SCSI 80

Ultra3 SCSI 80

Wide Ultra3 SCSI 160

FC-AL Fiber Channel 400


This table is adapted from the Frequently Asked Question “How does this compare to other connections used with PCs and workstations?” at http://www.usb.org/faq

ii. Bus cấu trúc [Bus Topology]

Thiết bị USB bao gồm cả hubs, là thiết bị cung cấp thêm các điểm gắn cho USB hoặc các functions - cung cấp khả năng như digital camera, disk, keyboard, mouse.

USB sử dụng tiered star topology [mạng xếp tầng ngôi sao] để thực hiện hub và các nút function. Một hub đặt tại trung tâm của mỗi ngôi sao. Một đoạn dây là nối điểm-đến-điểm giữa hub và các hub khác hoặc function đặt ở tầng [tier] tiếp theo.

Vì sự ép buộc về thời gian [timing constraints], USB giới hạn ở 7 tầng. Host nằm một mình ở tầng 1 và cũng chỉ có thể có một host trong một hệ thống USB. Chỉ cho phép functions ở tầng 7. Các tầng từ 2 - 6 có thể có cả hubs hoặc functions. Một thiết bị phức hợp mà có cả hub và function chiếm hai tầng vì vậy nó không thể đặt ở tầng 7.

falleaf
15-11-2005, 12:44 AM
ii. Đặc tính điện
USB sử dụng dây dẫn 4 sợi: 5V nguồn và đất (28 - 20 AWG) và hai dây tín hiệu (28 AWG cặp xoắn)

Có 3 tốc độ truyền: tốc độ cao (480MHz), tốc độ đầy đủ (12Mbps) và tốc độ thấp (1.5 Mbps). Nếu thiết bị ở tốc độ đầy đủ hoặc thấp được gắn vào host qua một hoặc nhiều hub và sau đó truyền tín hiệu giữa host và hub thì tín hiệu này được truyền ở tốc độ cao. Điều này làm giảm thiểu băng thông tiêu thụ bởi thiết bị.

Xung clock được chuyển mã [encode] dựa trên NRZI với dồn bit .

Non Return to Zero Invert (NRZI): A method of encoding serial data in which ones and zeroes are represented by opposite and alternating high and low voltages where there is no return to zero (reference) voltage between encoded bits. This eliminates the need for clock pulses.

Bit Stuffing: Insertion of a zero bit into a data stream to cause an electrical transition on the data wires, allowing a PLL to remain locked.

Tài liệu chi tiết định nghĩa những lớp công suất sau:

[B]1. Bus-power hubs: lấy công suất cho bản thân hub và downstream ports từ upstream port. Lấy 100mA tại thời điểm bắt đầu và 500mA hoặc ít hơn sau khi cấu hình. Mỗi downstream port có thể nhận tối đa 100mA, không tính dòng rút từ các port khác.

2. Self-powered hubs: lấy công suất cho bản thân hub và downstream port từ một nguồn ngoài. Nhưng nó có thể rút đến 100mA theo yêu cầu đến function khi hub không được cấp công suất [powered off]. Hub có thể cung cấp 100 - 500mA cho mỗi downstream port.

3. Low power bus-powered function: không được rút nhiều hơn 100mA từ USB port.

4. High power bus-powered function: không được rút nhiều hơn 100mA từ USB port lúc mới cấp và lên đến 500mA sau khi cấu hình. Công tắc để chuyển dang công suất cao điều khiển bởi phần mềm.

5. Self powered functions: có thể rút ra từ 100mA theo yêu cầu function khi thiết bị tắt nguồn. Tất cả các tiêu thụ công suất khác lấy từ nguồn ngoài.

Nếu các thiết bị rút quá nhiều dòng, hub sẽ thông báo tình trạng cho phần mềm USB.

USB cũng hỗ trợ quản lý nguồn vì vậy host có thể tắt thiết bị.

falleaf
15-11-2005, 12:47 AM
. Cơ khí


USB định nghĩa 4 loại connectors:

1. Series A: đầu cắm hình chữ nhật (15.7mm x 7.5 mm) và luôn luôn hướng đến host. Series A cũng cho phép function như là ngõ ra từ hosts và/hoặc hubs.

2. Series B: đầu cắm gần hình vuông (11.5 mmx 10.5mm) và luôn luôn hướng đến thiết bị. Series B chấp nhận functions như là ngõ vào đến hubs hoặc thiết bị.

3. Series mini-B: đầu cắm gần hình chữ nhật nhỏ (6.8 mmx 10.5mm) và luôn luôn hướng đến thiết bị. Series mini-B chấp nhận functions như là ngõ vào đến hubs hoặc thiết bị.

4. Captive cable assembly: là bất kì đầu cắm phi chuẩn nào nối đến thiết bị nó phải sử dụng một phía đầu nối Series A cắm vào host hoặc hub.

Những đầu nối này đề phòng sắp xếp dây nối sai thứ tự.

Bản mô tả kĩ thuật này không khuyến khích nối dài dây vì nó chỉ có thể cho phép nối từ điểm đến điểm không quá giới hạn là 5m.

vi. Giao thức Bus

USB là một bus hỏi vòng [polled bus]; Bộ điều khiển host khởi tạo tất cả các dữ liệu giao dịch [transaction] chuyển qua. Phần lớn các giao dịch liên quan đến 3 gói:

1. Bộ điều khiển Host gửi một "token packet" [gói đánh dấu] mô tả loại và hướng của hành vi giao dịch, địa chỉ thiết bị và số điểm kết thúc [endpoint number].

- Device Address: A seven-bit value representing the address of a device on the USB. Devices are assigned a unique device address by the USB System Software.

- Device Endpoint: A uniquely addressable portion of a USB device that is the source or sink of information in a communication flow between the host and device.

2. Nguồn của giao dịch gửi gói dữ liệu hoặc một gó "no data" [dữ liệu trống].

3. Đích sẽ gửi gói bắt tay [handshacking packet] mà chỉ ra dữ liệu truyền thành công.

Giao dịch giữa bộ điều khiển host và một hub sử dụng 4 gói để quản lý dữ liệu ở tốc độ thấp và tốc độ đầy đủ.

Giao thức bao gồm những CRC ( error check) khác nhau và trường dữ liệu của mỗi gói. CRC cho 100% bao hàm trên lỗi bit đơn và lỗi bit kép. Phục hồi lỗi có thể thực hiện bằng phần cứng (thử lại 3 lần) và phần mềm (thực hiện theo chỉ dẫn ở client).

Dữ liệu kết nối dữ phần mềm host và một điểm kết thúc riêng gọi là ống [pipe]. Mỗi ống hoạt động độc lập và một thiết bị đơn có thể có nhiều hơn một ống.

Một ống hỗ trợ chỉ một trong các kiểu truyền sau đây tại một thời điểm:

1. Control Transfer [Truyền điều khiển]: được dùng để cấu hình một thiết bị và có thể sử dụng cho các thiết bị có mục đích tương tự khác bao gồm điều khiển các ống khác trong thiết bị.

2. Bulk Data Transfer [Truyền dữ liệu trọng tải lớn] : tạo ra hoặc tiêu thụ một lượng số liệu tương đối lớn và theo khối mà không có những định hạn quét.

[B]3. Interrupt Data Transfers [Truyền dữ liệu gián đoạn]: được sử dụng cho dữ liệu cần nhận đúng thời điểm và có độ tin cậy. Ví dụ: chuột, game pad.

4. Isochoronous Data Transfers [] (còn gọi là truyền luồng dữ liệu thời gian thực) giữ và dàn xếp trước [prenegotiated] một số băng thông USB với một hệ thống phân phát ngầm thỏa thuận trước [prenegotiated delivery latency]. Dữ liệu thì liên tục và thời gian thực trong quá trình tạo ra, phân phát và tiêu thụ.

falleaf
15-11-2005, 12:50 AM
Sau đây là giải thích một số khái niệm còn chưa rõ lắm ở đoạn dịch trên:

- USB Hub thường ít gặp trong các thiết bị vì hai lý do: Nếu một thiết bị có thêm hub sẽ tăng giá thành - phần mềm sẽ phức tạp hơn. Bạn nghe nói đến những bàn phím có thể gắn chuột vào, rồi màn hình có thể gắn loa và bàn phím vào... nhưng ít gặp vì lý do trên. Hub phổ biến nhất chính là root hub đi kèm với host nói nôm na là hai hay bốn cái lỗ USB ở trên máy tính mà mình cắm thiết bị vào đấy.

- Function hơi khác với device một chút. Một device có thể có một hoặc nhiều function. Những thiết bị có nhiều function thì gọi là thiết bị phức hợp. Ví dụ như một điện thoại IP cắm qua cổng USB sẽ có function: audio stream, button input...

- Khái niệm endpoint từa tựa như khái niệm địa chỉ trong các bus khác nhưng mà endpoint là một khái niệm hoàn toàn logic. Bạn không đơn thuần đọc ghi một địa chỉ vật lý nào đó để truy xuất đến cổng USB. Nếu bạn sử dụng cổng song song hoặc nối tiếp chẳng hạn bạn sẽ đọc ghi dữ liệu vào một vùng đệm có địa chỉ đọc từ BIOS hình như là 278h với LPT1 và 3F8 với COM1 (đúng ko nhỉ). Bạn thao tác với cổng tức là bạn thao tác với địa chỉ này. Endpoint cũng gần như vậy tức là khi đã cấu hình xong bạn sẽ truyền nhận với thiết bị qua những endpoint. Nhưng khác với các cổng COM/LPT (địa chỉ không phụ thuộc vào thiết bị) endpoint là do thiết bị qui định, mọi thiết bị đều có một endpoint zero để cấu hình và truyền nhận dữ liệu, sau đó chính phần mềm sẽ yêu cầu tạo ra một pipe để truyền dữ liệu đến endpoint.

- USB có 3 lớp phần mềm và 3 lớp phần cứng khác nhau như trên hình. Rõ ràng so với COM hay LPT USB phức tạp hơn nhiều nhưng sử dụng lại cực kì đơn giản

Có vài điều nhỏ muốn các bạn tranh luận thêm:

- Bạn đã hiểu USB có những chức năng gì, hiểu qua host, hub và funtions vậy nếu là người thiết kế bạn sẽ xây dựng hệ thống USB như thế nào để đáp ứng chức năng đấy ??? (Cả nec, intel, compag va ms... cãi nhau mãi mới đưa ra USB chắc nó sẽ phức tạp rồi)

- USB là serial bus theo bạn thế nào mới là một bus ??? (Cái này tôi cũng muốn các bạn tranh luận thêm)

Còn đây là một hình vẽ để bạn nào quan tâm đến USB tìm hiểu mình sẽ giải thích sau:

http://www.ttvnol.com/uploaded/quen_mang_kinh/usbim.jpg

falleaf
15-11-2005, 12:53 AM
Giới thiệu

Qua hơn 2 năm, MS đã làm việc với các thành viên trong ngành công nghiệp với dự án USB2.0. Driver USB 2.0 sẽ có sẵn cho Microsoft Windows XP qua Windowws Update vào đầu nằm 2002. USB 2.0 Driver hỗ trợ cho Win 2000 vẫn đang được phát triển và sẽ có vào quí một năm 2002.

Ms không cung cấp hỗ trợ USB 2.0 cho Win98 và WinNT.

Bài viết này cung cấp chi tiết kế hoạch hỗ trợ cuả Ms cho USB 2.0. Phần kiến trúc USB mô tả cấu trúc của ngăn xếp USB 2.0 trên Win2000 và so sánh nó với WinXP và Windows Server 2003.

Phần cuối thảo luận kế hoạch của Windows Hardware Quality Lad [WHDL] để hỗ trợ việc kiểm tra các bộ điều khiển host USB 2.0, thiết bị và hub.

Kiến trúc USB trong Windows

Những phần sau mô tả ngăn xếp driver USB trên Windows XP và so sánh nó với Win2000.

WinXP USB Driver Stack

Hình một mô tả WDM driver stack mà được tạo trong WinXP cho hai thiết bị USB, một kết hợp [composte] và hai không kết hợp. Thiết bị kết hợp có hai giao thức, mỗi giao thức được điều khiển bởi một client driver riêng

http://www.ttvnol.com/uploaded/quen_mang_kinh/untitled.gif

falleaf
15-11-2005, 12:56 AM
Đại diện cho diễn đàn picvietnam, tôi xin chân thành cám ơn bác Quên mang kính vì đã viết bài này lên ttvnol. Trong một lần dạo qua ttvnol, tôi vô tình thấy bài viết này, chưa xin phép bác, nhưng về nguyên tắc dữ liệu trên mạng đã cung cấp thì public, tôi copy nguyên văn bài viết và giữ đường link gốc mà tôi đã tham khảo.

Nếu bác quên mang kính còn nhớ falleaf tôi và có tham gia picvietnam, xin phép bác, nếu bác có bản gốc tài liệu bác viết, tôi muốn chuyển dạng thành pdf để phổ biến cho mọi người dễ đọc và dễ sao chép.

Chân thành cám ơn.

Chúc vui.

dohoangnam
18-07-2006, 09:48 AM
cảm ơn bác F điều hành, đóng góp không mệt mỏi cho diễn đàn và anh em!

Ngoc Du
19-07-2006, 10:44 PM
Em đã có tìm hiểu sơ về USB nên xin đính chính lại chỗ này

2. Với PCs kèm theo USB và ngoại vi bạn chỉ cần cắm chúng và bật chúng lên. USB thực hiện mọi quá trình tự động.

USB thực hiện bán tự động bởi với những sản phẩm không thuộc các lớp được định nghĩa sẵn (chuẩn USB 2.0 định nghĩa 12 lớp thiết bị) thì nhà cung cấp thiết bị phải cung cấp luôn cả driver.


Có hai phiên bản chuẩn:
- USB 1.1 (1995) định nghĩa hai tốc độ 12Mbps (full speed) và 1.5Mbps (low speed) và hai dạng đầu nối Series A và Series B.

- USB 2.0 (5-2000) định nghĩa 3 tốc độ 480Mbps (high speed), 12Mbps và 1.5Mbps. Nó hoàn toàn tương thích ngược với USB 1.1.

USB1.1 được đưa ra vào tháng 9 năm 1998
USB2.0 được đưa ra vào tháng 4 năm 2000

Có tới 3 phiên bản chuẩn USB, ngoài 1.1 và 2.0 nêu thì còn 1.0
Version 1.0 được công bố vào tháng 1 năm 1996. So với chuẩn 1.1 thì cái đáng kể nhất là nó không hỗ trợ điểm cuối ngắt ra. Thiết bị dùng truyền ngắt kiểu như bàn phím mà muốn nhận thông báo về các đèn Caps Lock, Num Lock, Scroll Lock từ máy chủ thì phải nhận gói report thông qua truyền điều khiển. Còn 1.1 thì có hỗ trợ điểm cuối ngắt ra. Ngoài ra vào ngày 12 tháng 5 năm 2005 đã có chuẩn Wireless USB1.0.
2.0 so với 1.1 thì có nâng cấp đáng kể là hỗ trợ tốc độ cao 480 Mbps. Và vào năm 2001 thì đã định nghĩa một lớp thiết bị khá đặc biệt là On-The-Go. Đây là loại thiết bị giúp cho hai máy tính chủ có thể truyền thông với nhau thông qua thiết bị này. Nó có thể được hiểu như một host có tính năng hữu hạn (tức hỗ trợ không đầy đủ chuẩn USB bằng các host thông thường). Chính sự ra đời của lớp thiết bị này mà ta có thể in trực tiếp tài liệu từ một thiết bị lưu trữ USB bằng máy in mà không cần thông qua máy tính hay bộ loa để nghe nhạc từ một cái USB có chứa file âm thanh mà không cần tới máy tính...

Em có một tutorial tương đối tổng quan về chuẩn USB muốn chia sẻ với mọi người nhưng không biết là up lên thế nào. Có gì em gửi qua email cho anh F để nhờ anh up lên cho mọi người.

NBTrung
22-10-2010, 06:04 PM
cho em hỏi cái Bus Powered là tiêu thụ nguồn từ chân Vbus hay các chân tín hiệu D+, D- ạ?

Với những VĐK có hỗ trợ Vusb 3.3V (Vbus) thì dùng Bus powered hay self powered?

Em còn ngu ngơ, đọc code CCS k thấy thể hiện j vấn đề này nên hi vọng các bác giúp với ạ, nếu có code cho PIC kết nối USB dùng HTPic hoặc C18 thì share em với để e ngâm cứu.
Em xin cảm ơn nhiều

dinhminh09
24-10-2010, 10:34 AM
[QUOTE=falleaf;964]ii. Đặc tính điện
ra là do thế này mà cái pickit2 chế không nạp được chíp mà phải dùng nguồn ngoài.