Khi máy chủ hoạt đợng, nó tìm tất cả thiết bị được kết nối vào bus USB và gán mỗi thiết bị mợt địa chi. Quy trình này được gọi là liệt kê, những thiết bị được liệt kê khi kết nối vào đường truyền. Và dữ liệu truyền nhận giữa máy chủ và thiết bị ngoại vi đều đi qua các đường ống Endpoint (EP in hoặc EP out).
Hình 4.15: Quá trình liệt kê thiết bị USB
Máy tính cũng tìm ra từ mỗi thiết bị cách truyền dữ liệu nào mà nó cần để hoạt đợng. Với mỗi cách truyền nào cũng phải có đủ 3 gói dữ liệu cần truyền là gói nhận dạng, gói dữ liệu truyền, gói bắt tay.
4.11.1 Điều khiển thíết bị ngoại vi
Khi mợt thiết bị được điều khiển qua cổng USB thì sẽ có mợt giao diện điều khiển trên Windows (ví dụ như Visual Basic). Quá trình này hoạt đợng như sau:
Đầu tiên máy chủ sẽ gửi gói nhận dạng trong đó có nợi dung yêu cầu thiết bị khai
báo tên, loại thiết bị, và sau đó gửi gói dữ liệu cài đặt đến thiết bị để chấp nhận thiết bị. Nếu thiết bị khơng phát hiện lỗi thì sẽ phát lại tín hiệu ACK nằm trong gói bắt tay.
Hình 4.16: Nhận dạng thiết bị ngoại vi USB
Khi muốn đọc dữ liệu từ thiết bị vào máy chủ thì máy chủ sẽ gửi gói nhận dạng
với nợi dung là IN, báo cho thiết bị biết là máy chủ cần nhận dữ liệu. Tiếp theo thiết bị sẽ gửi cho máy chủ dữ liệu. Cuối cùng là máy chủ sẽ gửi gói bắt tay báo ACK là đã nhận được dữ liệu thành cơng. Trong quá trình gửi dữ liệu, thiết bị nếu bận thì gửi tín hiệu NAK, hoặc nếu bị lỗi thì gửi tín hiệu STALL.
Hình 4.17: Máy tính sẽ đọc dữ liệu từ thiết bị ngoại vi USB
Khi muốn gửi dữ liệu máy tính đến thiết bị ngoại vi, thì máy chủ sẽ gửi gói
nhận dạng với nợi dung là OUT, báo cho thiết bị biết là máy chủ sẽ gửi dữ liệu. Tiếp theo máy chủ gửi cho thiết bị dữ liệu. Cuối cùng là thiết bị sẽ gửi gói bắt tay báo ACK là đã nhận được dữ liệu thành cơng. Trong quá trình gửi dữ liệu, thiết bị nếu bận thì gửi tín hiệu NAK, hoặc nếu bị lỗi thì gửi tín hiệu STALL.
Hình 4.18: Máy chủ gửi dữ liệu xuống thiết bị ngoại vi USB
4.11.2 Ngắt
Mợt thiết bị như chuợt hoặc bàn phím, gửi mợt lượng nhỏ dữ liệu, sẽ chọn chế đợ ngắt.
Quá trình ngắt cũng có quá trình gửi dữ liệu từ máy tính xuống thiết bị (hình4.18) và
quá trình nhận dữ liệu từ thiết bị về máy tính (hình 4.17). Nhưng cuối mỗi quá trình thì thiết bị đều gửi gói bắt tay thơng báo là NAK để máy chủ biết khơng cần giao tiếp với thiết bị ngoại vi ngay thời điểm này.
4.11.3 Hàng loạt
Mợt thiết bị như mợt chiếc máy in, nhận dữ liệu trong mợt gói lớn, sử dụng chế đợ truyền hàng loạt. Mợt khối dữ liệu được gửi đến máy in (mợt khối 64 byte) và được kiểm tra để chắc chắn nó chính xác. Giống với quá trình nhận dữ liệu từ thiết bị về máy tính (hình 4.17) và giống với quá trình gửi dữ liệu từ thiết bị về máy tính (hình 4.18).
4.11.4 Đẳng thời
Mợt thiết bị truyền dữ liệu theo chuỗi (lấy ví dụ như loa) sử dụng chế đợ đẳng thời. Những dịng dữ liệu giữa thiết bị và máy trong thời gian thực, và khơng có sự sửa lỗi ở đây.
Hình 4.19: Máy chủ gửi dữ liệu trong trường hợp đẳng thời
Hình 4.20: Máy chủ nhận dữ liệu trong trường hợp đẳng thời
4.12 Các thơng số USB
Khi mợt thiết bị kết nối vào máy tính thì máy tính sẽ biết được các thơng số về thiết bị nếu quá trình nhận dạng thành cơng thiết bị. Để máy chủ nhận được các thơng tin về thiết bị thì cần các thơng số khai báo. Các thơng số khai báo ví dụ như
Sau đây là sơ đờ về các thơng số khai báo được xếp theo hình cây.
Hình 4.21: Sơ đờ các thơng số khai báo trong USB
4.12.1 Thơng số mơ tả thiết bị (Device)
Bảng 4.5: Thơng số mơ tả thiết bị
STT Thơng số Số
bytes
Giá trị Nội dung mơ tả
0 bLength 1 Số Chiều dài là 18 bytes
1 bDescriptorType 1 Hằng số Mơ tả thiết bị ở địa chi (0x01)
2 bcdUSB 2 BCD Chuẩn USB
4 bDeviceClass 1 Class
Theo chuẩn của USB Org
Nếu có giá trị 00 thì mơ tả thiết bị Nếu có giá trị FF thì mơ tả nhà cung cấp Khác giá trị trên thì khơng có nghĩa
5 bDeviceSubClass 1 SubClass Mã thư mục phụ theo chuẩn USB Org
6 bDeviceProtocol 1 Protocol Mã giao thức theo chuẩn USB Org
7 bMaxPacketSize 1 Số Giá trị tối đa là 8, 16, 32, 64
8 idVendor 2 ID Nhà cung cấp theo chuẩn USB Org
10 idProduct 2 ID Thơng tin sản phẩm
15 iProduct 1 Index Tên sản phẩm
16 iSerialNumber 1 Index Số seri của sản phẩm
17 bNumConfigurations 1 Integer Số lượng có thể của cấu hình
4.12.2 Thơng số mơ tả cấu hình (Configuration )
Bảng 4.6: Thơng số mơ tả cấu hình
STT Thơng số Số
bytes Giá trị Nội dung mơ tả
0 bLength 1 Số Số byte cần dùng
1 bDescriptorType 1 Constant Mơ tả cấu hình tại địa chi (0x02)
2 wTotalLength 2 Số Tổng chiều dài tối đa của chuỗi
4 bNumInterfaces 1 Số Sổ thứ tự giao tiếp
5 bConfigurationValue 1 Số Giá trị được chọn để mơ tả cấu hình
6 iConfiguration 1 Index Chuỗi mơ tả cấu hình
7 bmAttributes 1 Bitmap D0 đến D7 dùng để thiết lập chế đợ nguờn
8 bMaxPower 1 mA Cơng suất tiêu thụ 2mA mỗi đơn vị
4.12.3 Thơng số mơ tả sự giao tiếp (Interface)
Bảng 4.7: Thơng số mơ tả sự giao tiếp
STT Thơng số Số
bytes Giá trị Nội dung mơ tả
0 bLength 1 Số Số lượng cần dùng là 9 Bytes
1 bDescriptorType 1 Hằng số Mơ tả sự giao tiếp tại địa chi (0x04)
3 bAlternateSetting 1 Số Cài đặt giá trị theo thứ tự
4 bNumEndpoints 1 Số Số lượng endpoint cần dùng
5 bInterfaceClass 1 Class Mã thư mục theo chuẩn USB Org
6 bInterfaceSubClass 1 SubClass Mã thư mục phụ theo chuẩn USB Org
7 bInterfaceProtocol 1 Protocol Mã giao thức theo chuẩn USB Org
8 iInterface 1 Index Tên mơ tả giao thức
4.12.4 Thơng số mơ tả Endpoint (Endpoint) Bảng 4.8: Thơng số mơ tả Endpoint
STT Thơng số Số
bytes Giá trị Nội dung mơ tả
0 bLength 1 Số Số Bytes cần dùng (7 bytes)
1 bDescriptorType 1 Hằng số Endpoint Descriptor (0x05)
2 bEndpointAddress 1 Endpoint
Địa chi Endpoint
Bits 0..3 số lượng Endpoint
Bits 4..6 giá trị đặt trước và được đặt về 0 Bits 7 với 0 = Out, 1 = In
3 bmAttributes 1 Bitmap
Bits 0..1 kiểu giao thức truyền nhận 00 = điều khiển, 01 = đẳng thời 10 = hàng loạt, 11 = ngắt Bits 2..7 được đặt trước
4 wMaxPacketSize 2 Số Dung lượng của gói và chi ra endpoint nào
trong việc nhận hay gửi dữ liệu
6 bInterval 1 Số Giá trị trong khung nếu là 1 thì là dùng trong
truyển hàng loạt, cịn đối với ngắt thì từ 1 đến 255
4.12.5 Thơng số mơ tả chuỗi tên (String)
Bảng 4.9: Thơng số mơ tả chuỗi tên
STT Thơng số Số
bytes
Giá trị Nội dung mơ tả
2 wLANGID[0] 2 Số Mã chọn ngơn ngữ hiển thị thứ 0 (ví dụ 0x0409 English - United States)
4 wLANGID[1] 2 Số r Mã chọn ngơn ngữ hiển thị thứ 1
(ví dụ 0x0c09 English - Australian)
n wLANGID[x] 2 Số Mã chọn ngơn ngữ hiển thị thứ x
(ví dụ 0x0407 German - Standard)
4.13 IC giao tiếp USB
Trong giao tiếp USB thì máy chủ phải có mợt bợ chip thực hiện giao diện USB, như chip PCI 430HX mới của Intel. Về phía thiết bị ngoại vi cần có chip điều khiển thiết bị ngoại vi USB như 82930A của Intel. Hiện tại đã có rất nhiều nhà sản xuất chip có kế hoạch đưa ra tính tương thích USB trong thế hệ chip của họ. Chip 82930A là chip điều khiển thiết bị ngoại vi đầu tiên tương thích USB. Trong đờ án này nhóm làm đờ án sử dụng chip PIC18F4550 của Microchip Technology.
Chip PIC18F4550 với nhiều tính năng như tốc đợ xử lý nhanh, tiêu thụ cơng suất thấp, với nhiều ứng dụng. PIC18F4550 có mợt bợ điều khiển USB mà có thể hoạt đợng ở tốc đợ thấp và tốc đợ nhanh. Nhà sản xuất cũng đã đề nghị đưa ra nhiều phương án để tạo ra những sự kết hợp khác nhau của những đặc tính.
Hình 4.22: Sơ đờ chân PIC18F4550
4.13.1 Kiến trúc của PIC18F4550
IC này là mợt họ nằm trong dịng PIC18 với hiệu quả, năng suất cao, giá thành
thấp của MICROCHIP
Bợ nhớ chương trình là bợ nhớ Flash
Mợt bợ bootloader thường trực để có thể nâng cấp firmware thơng qua port USB
IC có 34 ngõ vào ra
Có bợ chuyển ADC 10 bit
Bợ giao tiếp nối tiếp USART
Mợt bợ giao tiếp I2C hoặc SPI
Có bợ điều chế đợ rợng xung PWM
Có 2 bợ so sánh tín hiệu tương tự
Mơ đun USB và CPU USB có thể sử dụng riêng nguờn xung clock, cho phép
CPU sử dụng xung Clock chậm hơn để có thể tiết kiệm năng lượng
4.13.2 Bộ điều khiển USB của PIC18F4550
Bợ điều khiển USB của PIC18F4550 hỗ trợ tất cả bốn kiểu truyền nhận dữ liệu và
lên tới 30 địa chi endpoint cợng với các endpoint mặc định như EPO, EP1. Bợ endpoint có thể chia sẽ bợ nhớ 1 kbytes và sự di chuyển có thể sử dụng bợ đệm đơi. Đối với sự di chuyển đẳng thời thì USB có thể chuyển trực tiếp tới hay nhận trực tiếp về từ các đường ống song song.
Hình 4.23: Sơ đờ của bợ điều khiển USB của PIC18F4550
Họat đợng của USB trong PIC18F4550 được điểu khiển và quản lý qua 22 thanh
-Bit6 PPBRST = 1 Reset tất cả các bợ đệm tuần tự
PPBRST = 0 khơng reset con trỏ của bợ đệm tuần tự
-Bit4 PKTDIS = 1 khơng cho phép SIE hoạt đợng nhưng tự đợng cập nhật khi
nhận gói bắt tay có nợi dung SETUP
PKTDIS = 0 cho phép SIE hoạt đợng
4.13.4 Thanh ghi cài đặt cấu hình USB (UCFG)
Bảng 4.11: Chức năng các bit trong thanh ghi cài đặt cấu hình USB
-Bit6 UOEMON = 1 tích cực tín hiệu UOE, điều khiển tín hiệu qua D+, D-
UOEMON = 0 khơng reset tích cực tín hiệu UOE
-Bit4 UPUEN = 1 cho phép điện trở kéo lên trong chip (kéo lên D+ với FSEN=1,
kéo lên D- với FSEN = 0)
UPUEN = 0 khơng cho phép điện trở kéo lên trong chip
-Bit3 UTRDIS = 1 khơng cho phép chuyển nhận trên chip
UTRDIS = 0 cho phép chuyển nhận trên chip
-Bit2 FSEN = 1 tốc đợ nhanh
FSEN = 0 tốc đợ thấp
-Bit1-0 PPB1:PPB0
= 00 mode0 khơng cho phép bợ đệm luân phiên endpoint = 01 mode1 phép bợ đệm luân phiên endpoint EP0 OUT = 10 mode2 phép bợ đệm luân phiên tất cả endpoint = 11 mode3 phép bợ đệm luân phiên endpoint 0 đến 15
4.13.5 Thanh ghi trạng thái USB (USTAT)
Bảng 4.12: Chức năng các bit trong thanh ghi trạng thái USB
-Bit6-3 ENDP3:ENDP0
= 0000 endpoint 0
….
= 1110 endpoint 14 = 1111 endpoint 15
-Bit2 DIR = 1 gói dữ liệu cuối của quá trình là gói nhận dạng thơng báo IN
DIR = 0 gói dữ liệu cuối của quá trình là gói nhận dạng OUT hay SETUP
-Bit1 PPBI = 1 truyền nhận sau cùng là của thanh ghi bợ đệm BD lẻ
PPBI = 0 truyền nhận sau cùng là của thanh ghi bợ đệm BD chẵn
4.13.6 Thanh ghi điều khiển endpoint của bộ đệm USB (UCFG)
Bảng 4.13: Chức năng của thanh ghi điều khiển endpoint trong bợ đệm USB
-Bit4 EPHSHK = 1 tích cực tín hiệu UOE, điều khiển tín hiệu qua D+, D-
EPHSHK = 0 khơng reset tích cực tín hiệu UOE
-Bit3 EPCONDIS = 1 khơng cho phép endpoint thứ n từ việc điều khiển truyền
dữ liệu, chi cho phép OUT và IN
EPCONDIS = 0 cho phép endpoint thứ n từ việc điều khiển truyền dữ liệu,
cho phép OUT và IN
-Bit2 EPOUTEN = 1 cho phép endpoint thứ n xuất ra
EPOUTEN = 0 khơng cho phép endpoint thứ n xuất ra
-Bit1 EPINEN = 1 cho phép endpoint thứ n nhận vào
EPINEN = 0 khơng cho phép endpoint thứ n nhận vào
-Bit0 EPSTALL = 1 chốt endpoint thứ n
EPSTALL = 0 khơng chốt endpoint thứ n
4.13.7 Thanh ghi trạng thái của bộ đệm BDnSTAT
Đối với mỗi địa chi endpoint thì chương trình firmware đã được đặt trước trong bợ nhớ cho mỗi bợ đệm và mơ tả bợ đệm. Bợ mơ tả bợ đệm gờm có 4 thanh ghi.
Bợ điều khiển CPU và bợ USB SIE chia sẻ những bợ mơ tả truy nhập những bợ đệm và những bợ mơ tả bợ đệm. Quá trình này được điều khiển bởi thanh ghi trạng thái mơ tả bợ đệm.
Chế độ CPU
Bảng 4.14: Chức năng của thanh ghi trạng thái mơ tả bợ đệm ở chế đợ CPU
Trong đó:
• Bit UOWN = 0 CPU sở hữu trong bộ đệm và bộ mơ tả bộ đệm
Bit UOWN = 1 SIE sở hữu trong bộ đệm và bộ mơ tả bộ đệm
SIE có quyền sở hữu khi dữ liệu sẵn sàng để truyền đi hoặc đợi để nhận dữ liệu trên bus về. Khi SIE có quyền sở hữu thì CPU khơng truy nhập bộ đệm và bộ mơ tả bộ đệm, tránh việc đọc bit UOWN. Khi nào đang đọc một endpoint để thực
hiện một sự di chuyển, hoạt động sau cùng của chương trình firmware là thực
hiện việc cập nhật thanh ghi trạng thái để set bit UOWN để chuyển quyền sở hữu đến SIE. Khi một quá trình truyền nhận hoàn thành, SIE sẽ clear bit UOWN, quyền sở hữu lại chuyển sang CPU.
• BSTALL = 1 cho phép bợ đệm chốt và gói bắt tay được phát ra nếu nhận được gói nhận dạng là khơng cần gửi dữ liệu nữa
BSTALL = 0 khơng cho bợ đệm chốt
• BC9, BC8 là 2 bit đếm chi số byte mà dữ liệu được nhận vào hay gửi ra
Chế độ SIE
Bảng 4.15: Chức năng của thanh ghi trạng thái mơ tả bợ đệm ở chế đợ SIE
Trong đó: 4 bít PID3, PID2, PID1, PID0 làm thành số nhị phân 4 bit để biểu thị mã của PID (hình 4.4).
4.13.8 Thanh ghi đếm của bộ đệm BDnCNT
Các byte trong thanh ghi đếm cợng với 2 bit BC9, BC8 của thanh ghi trạng thái dùng để chi định số byte trong quá trình truyền nhận (IN hoặc OUT).
4.13.9 Thanh ghi địa chỉ thấp của bộ đệm BDnADRL 4.13.10 Thanh ghi địa chỉ cao bộ đệm BDnADRH
Hai thanh ghi này có địa chi thấp và cao chứa địa chi bắt đầu của bợ đệm endpoint trong bợ nhớ Ram.
Hình 4.26: Địa chi bợ đệm trong bợ nhớ Ram
Mỗi chi số của endpoint cũng có mợt bợ thanh ghi điều khiển có thể cho phép điều
khiển là IN endpoint hoặc OUT endpoint, hoặc cả 2 hai quá trình với cùng chi số endpoint. Những bit khác trong thanh ghi có thể chốt endpoint và vơ hiệu hóa gói bắt tay (đối với quá trình truyền nhận đẳng thời).
Những thanh ghi bổ sung lưu trữ địa chi của thiết bị trên bus và chứa thơng tin về
trạng thái và điều khiển cho truyền thơng USB và ngắt. Hãng Microchip cung cấp mã chương trình firmware và những ví dụ cho việc ứng dụng giao tiếp USB.
4.13.11 Thanh ghi ngắt trong USB
Trong USB có thanh ghi ngắt để báo cho bợ xử lý trung tâm hoạt đợng. Ngắt trong USB cũng hoạt đợng giống ngắt trong các vi điều khiển bình thường.
Bảng 4.16: Chức năng của thanh ghi điều khiển endpoint trong bợ đệm USB
-Bit6 SOFIF = 1 nhận được từ SIE mợt gói nhận dạng là bắt đầu mới của khung
SOFIF = 0 khơng nhận được mợt gói nhận dạng là bắt đầu mới của khung
-Bit5 STALLIF = 1 nhận được từ SIE mợt gói bắt tay là STALL
STALLIF = 0 khơng nhận được từ SIE mợt gói bắt tay là STALL
-Bit4 IDLEIF = 1 nhận ra bit idle báo kết thúc việc truyền nhận
IDLEIF = 0 khơng nhận ra bit idle
-Bit3 TRNIF = 1 quá trình truyền nhận hoàn tất