SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
CHƢƠNG 1: GIỚ I THIỆ THIỆU USB VÀ PIC 18F4550 I.
Giớ Giớ i thiệ thiệu chung về về chuẩ chuẩn USB: 1. Khái niệ niệm USB: trong máy USB (U niversal niversal S erial erial B us us) là một chuẩn k ết nối tuần tự đa dụng trong máy tính. USB tính. USB sử dụng để k ết nối các thi các thiết bị ngoại vi vớ i máy tính, chúng thườ ng ng đượ c thiết k ế dướ i dạng các đầu cắm cho các thiết bị tuân theo chuẩn cắm-làchạy mà với tính năng cắm nóng thiết bị (nối và ngắt các thiết bị không cần phải khởi động lại hệ thống).
2. Các mục mục tiêu hƣớ ng ng tớ tớ i khi sử sử dụ dụng USB: - Dễ dàng mở r r ộng các thiết bị đầu cuối của máy tính. - Cung cấ p giải pháp chi phí thấ p song vẫn hỗ tr ợ ợ truy truyền dẫn tốc độ cao lên đến 480 Mb/s. ợ ứng dụng thờ i gian thực như: voice, audio, video, … - Hỗ tr ợ ứ - Giao thức linh hoạt cho các chế độ hỗn hợ p. - Tích hợ p công nghệ thiết bị tiện nghi. - Đượ c Windows và các hệ điều hành khác hỗ tr ợ do ợ do đó có thể không cần driver mức thấ p cho các thiết bị USB. - Đa năng, do đó nhiề u thiết bị có thể ghép nối vớ i PC thông qua chuẩn USB. - Độ tin cậy cao. 3. Mô tả tả hệ hệ thố thống USB: Một hệ thống USB đượ c mô tả bởi 3 định nghĩa: - K ết nối USB. - Các thiết bị USB. - USB host.
K ết nối USB đượ c hiểu là kiểu k ết nối mà trong đó các thiế t bị USB đượ c k ết nối và giao ti ế p vớ i máy tính ch ủ. K ết nối USB bao gồm các vấn đề sau: Kiến trúc BUS: mô hình k ết nối giữa các thi ết bị USB và Host. Những mối quan hệ Inter- Layer: dướ i dàng một tậ p khả năng, các tác vụ USB đượ c thực hiện tại mỗi lớ p trong hệ thống. Các mô hình lu ồng dữ liệu là: là hình th ức mà trong đó dữ liệu di chuyển trong hệ
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 1
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
thống USB. Lậ p trình USB: USB cung cấ p một sự k ết nối dùng chung. Vi ệc truy cậ p tớ i k ết nối đượ c lậ p trình theo thứ tụ để hỗ tr ợ ợ truy truyền dữ liệu đẳng thờ i khử xự phân xử ban đầu. 4. Kiế Kiến trúc BUS: Bus tuần tự đa năng nối các thi ết bị USB vớ i Host USB. Về mặt k ết nối vật lý USB đó là một kiến trúc tầng sao. Một Hub ở t tại trung tâm c ủa mỗi sao. mỗi đoạn dây là m ột k ết nối từ điểm tới điể m giữa Host và một Hub hoặc một chức năng nào đó, hoặc một Hub nối tớ i Hub khác ho ặc chức năng khác. Vớ i 7 bit địa chỉ, ngoài máy ch ủ USB ra nó có th ể quản lý tối đa 127 thiế t bị ngoại vi. Hình sau sẽ minh hoạ kiến trúc của USB.
Máy chủ USB: Chỉ có duy nhất một Host trong m ột hệ thống USB bất k ỳ. Giao diện USB tớ i hệ thống máy chủ được xem như bộ điều khiển Host. Bộ điều khiển Host có thể đượ c thực hiện trong một k ết hợ p gồm phần cứng, vi chương trình (firmware) ho ặc phần mềm. Một Hub gốc (root hub) đượ c tích hợ p chỉ trong hệ
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 2
SVTH: LÊ TẤN LỘC
5.
-
GVHD: NGUYỄN DUY THẢO
thống Host để cung cấ p một hoặc nhiều điểm lắ p thêm. Các thiết bị USB: Thiết bị USB có thể là 1 trong các thi ết bị sau: Hub: cung cấp điểm lắ p thêm vào USB. Các chức năng: cung cấ p khả năng cho hệ thống như một k ết nối ISDN, Digital Joystick hoặc Speaker. Thiết bị hiểu đượ c giao th ức USB. Cáp USB: USB truyền tín hiệu qua 1 cáp 4 s ợi như hình dướ i.i. Có 3 tốc độ truyền dữ liệu: USB tốc độ cao (USB high-speed): 480Mb/s. USB toàn tốc (USB full-speed): 12Mb/s. USB tốc độ thấ p (USB low-speed): 1.2Mb/s.
Cáp USB bao gồm 4 dây, D+ và D- được dùng để truyền tín hiệu, V bus và GND để cấ p nguồn cho thiết bị ( Thườ ng ng thì V bus =5V còn GND=0V tại nguồn). USB cho phép chi ều dài các đoạn cáp có th ể thay đổi lên tớ i vài mét. Ở phía máy ch ủ Host thì D+ và D- đượ c nối đất qua các điệ n tr ở ở R R pd còn ở cu về phía thiết bị ngoại vi, các đầu dây D+, D- đượ c bảo vệ bởi điện tr ở cuối (đó chính là các điện tr ở ở R ở nnối R pu. Thiết bị tốc độ cao hoặc toàn tốc cần có điện tr ở +3.3 V cho đầ u D+, thiết bị tốc độ thấ p cần có điện tr ở ở nnối lên 3.3 V cho đầu ở này D-. Những điện tr ở này tạo nên các mức điện thế khác nhau giữa D+ và Dgiúp cho máy ch ủ phát hiện đượ c việc cắm vào hay rút ra c ủa thiết bị cũng như tốc độ truyền dữ liệu của thiết bị.
II.
Mô hình luồ luồng dữ dữ liệ liệu USB: 1. Các thành phầ phần trong việ việc thự thự c hiệ hiện k ết nố nối USB: Việc thực hiện k ết nối USB gồm các thành phần: - Thiết bị USB vật lý: một phần cứng ở đầ ở đầu cuối của cáp USB thi hành một vài chức năng hữu dụng với ngườ i sử dụng.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 3
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
- Client Software: phần mềm thi hành trên máy chủ, đáp ứng cho thiết bị USB. Phần mềm này có thể đượ c cung cấ p bở i hệ điều hành hoặc đượ c cung cấ p cùng vớ i thiết bị USB. ợ USB - USB System Software: là phần mềm hỗ tr ợ USB trong một hệ điều hành cụ thể. Phần mềm hệ thống USB thường đượ c cung cấ p kèm vớ i hệ điều hành, nó không phụ thuộc vào một thiết bị USB cụ thể nào. - USB Host Controller: bao gồm phần cứng và phần mềm cho phép các thiết bị USB k ết nối tớ i Host. Hình sau sẽ chỉ ra sự tương tác giữ a một số lớ p và thực thể trong một k ết nối đơn giả n giữa host và thiết bị.
- USB Bus interface Layer cung c ấ p k ết nối vật lý, gói tin, báo hi ệu giữa Host và một thiết bị.
ợ thi - USB Decive Layer cho th ấy hệ điều hành hỗ tr ợ thiết bị USB cần có một phần mềm hệ thống để thực hiện việc quản lý thiết bị USB logic. - Function Layer cung c ấ p khả năng đượ c thêm vào cho Host qua ph ần mềm khách (client software). Chính client software s ẽ giúp thể hiện chức năng của thiết bị USB trên Host.
2. Bus Topology: Bus topology có 4 thành ph ần chính: - Host và các thiết bị: đây là các thành phần sơ cấ p của một hệ thống
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 4
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
USB. - Cấu trúc vật lý: cho th ấy các thành ph ần USB đượ c nối với nhau như thế nào. - Cấu trúc logic: cho th ấy vai trò và trách nhi ệm của các thành ph ần USB khác nhau và USB xu ất hiện như thế nào từ hình phối cảnh của Host và một thiết bị. - Mối liên quan gi ữa chức năng và phần mềm khách (client software).
2.1 USB Host: K ết cấu logic của Host đượ c chỉ ra trong hình 2.2 g ồm có: - Bộ điều khiển Host. - Phần mềm hệ thống USB đã đượ c gộ p chung - Phần mềm khách. (Client Software).
2.2 Các thiế thiết bị bị USB: K ết cấu logic của một thiết bị USB vật lý đượ c chỉ ra trong hình 2.3 gồm : - Giao diện bus USB. - Thiết bị USB logic. - Chức năng.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 5
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Các thiết bị USB vật lý cung cấ p các chức năng bổ sung cho Host. Các thiết bị USB khác nhau thì cung c ấ p các chức năng khác nhau. Mặ c dù vậy thì các thiết bị USB logíc có n ối ghép tới Host cơ bản giống nhau.
2.3 Kiế Kiến trúc vậ vật lý (Physical Bus Topology): K ết nối vật lý của các thi ết bị USB thông qua ki ến trúc tầng sao (tiered star topology) như ở hình ở hình 2.4. Các điể m nối USB đượ c thông qua b ở i một lớ p thiết bị USB đặc biệt đượ c hiểu là Hub. Các điể m nối bổ sung đượ c k ết nối thông qua Hub đượ c gọi là các c ổng. Host bao gồm cả một Hub đượ c nối vớ i nó gọi là Hub gốc (root hub). Các k ết nối đượ c thực hiện tại các cổng của Hub gốc. Các thi ết bị cung c ấ p các chức năng bổ sung cho Host đượ c hiểu là các chức năng (function).
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 6
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
2.4 Kiế Kiến trúc Bus Logic: Trong khi các thi ết bị vật lý đượ c k ết nối tớ i Host theo ki ến trúc tầng sao thì quá trình truyền thông giữa Host vớ i mỗi thiết bị logic được xem như là kế t nối tr ực tiế p tớ i cổng gốc (root port). Trong trườ ng ng hợ p này thì bản thân các hub cũng là các thiế t bị logic, nhưng hình 2.5 dưới đây không vẽ ra để cho hình vẽ đơn giản dễ hiểu.
phần mề 2.5 Mối quan hệ hệ giữ giữ a chức chức năng và phần mềm khách: Trong quá trình ho ạt động, phần mềm khách nên độc lậ p vớ i các thi ết bị
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 7
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
khác có th ể đượ c gắn tớ i USB.
3. Luồ Luồng truyề truyền thông USB: USB cung cấ p một dịch vụ truyền thông giữa phần mềm trên Host và chức năng USB của nó. Các chức năng có thể có yêu cầu luồng truyền thông khác nhau cho các tương tác client -to-function khác nhau. USB cung c ấ p sự sử dụng bus toàn diện hơn bằng cách tách các lu ồng truyền thông khác nhau t ớ i một chức năng USB. Mỗi luồng truyền thông đượ c k ết thúc tại một điể m cuối trên trên m ột thiết bị. Điểm cuối của thiết bị đượ c sử dụng để xác định hướ ng ng của mỗi luồng truyền thông. Hình 2.6 thuyết minh cách các lu ồng thông tin đượ c truyền qua các ống dẫn (đườ ng ng truyền) giữa các điểm cuối và các b ộ nhớ đệm phía Host. Phần mềm trên Host giao ti ế p vớ i một thiết bị logic qua m ột tậ p các luồng truyền thông. Tậ p các luồng truyền thông đượ c chọn bở i các nhà thiết k ế phần cứng/phần mềm để đáp ứng một cách có hiệu quả các nhu c ầu của thiết bị tới đặc tính truy ền tải đượ c cung cấ p bở i USB.
4. Các loạ loại truyề truyền dữ dữ liệ liệu USB: ớ đệm USB truyền dữ liệu qua một ống dẫn (đườ ng ng truyền) giữa một bên là b ộ nhớ đệ đượ c liên k ết vớ i một phần mềm khách trên máy ch ủ vớ i một bên làmột điể m cuối trên thiết bị USB. USB cung c ấ p các dạng truyền tải khác nhauđã đượ c tối ưu hoá để
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 8
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
đáp ứng một cách thích h ợ p nhất các nhu c ầu của phần mềm khách và ch ức năng. USB cung cấ p 4 loại truyền dữ liệu: truyền điềukhiển (control transfer); truy ền ngắt (interrupt transfer); truy ền đẳng thờ i (isochronous transfer) và truy ền khối (bulk transfer). 4.1 Truyền Truyền điều điều khiể khiển: Truyền điều khiển là truyền theo kiểu hai chiều. Loại truyền này thườ ng ng đượ c sử dụng để cài đặt thiết bị ngoại vi. Giao th ức truyền điều khiển đượ c bắt đầu bằng một giai đoạ n thông báo (token stage), ti ếp theo là giai đoạn dữ liệu ết thúc là giai đoạ n bắt tay (handshake stage). M ọi thiết bị (data stage) và k ết ngoại vi USB đề u phải xử lý đượ c loại truyền này. 4.2 Truyề Truyền ngắ ngắt: Truyền ngắt là kiểu truyền một chiều. Loại truyền này đượ c dùng cho các thiết bị ngoại vi như bàn phím, chuộ t, joystick . Vì Host không th ể ngắt nên các ngắt từ thiết bị ngoại vi đượ c xử lý trong vòng đợi. Ngườ i lậ p trình hệ thống có nhiệm vụ xử lý vòng đợ i này. Giao th ức truyền ngắt khởi động khi máy chủ (Host) bắt đầu bằng một thông báo IN (IN Token). Thi ết bị ngoại vi ườ ng tr ả lờ i bằng một gói NAK nếu không có ngắt. Trong tr ườ ng hợ p có ngắt thì thiết bị ngoại vi tr ả lờ i bằng một gói dữ liệu. Khi nhận hết dữ liệu máy chủ sẽ tr ả lờ i bằng một gói ACK nếu dữ liệu không có l ỗi hoặc không tr ả lờ i gì nếu có ở điểm cuối của thiết bị ngoại vi, nó sẽ gửi đến máy chủ gói lỗi. Nếu bị nghẽn ở điể STALL và đợ i phần mềm hệ thống trên máy ch ủ xử lý. 4.3 Truyền Truyền đẳng đẳng thờ thờ i: i: Truyền đẳng thời là phương pháp truyề n một chiều, hướ ng ng cuộc truyền có thể từ thiết bị ngoại vi về máy chủ hoặc ngượ c lại. Vì thế cuộc truyền cần hai điểm cuối ở thi thiết bị ngoại vi hoặc hai đườ ng ng ống dẫn phần mềm ở phía phía máy ch ủ nếu thiết bị cần dùng kiểu truyền này để thông tin 2 chi ều. Giao thức truyền đẳng thờ i bắt đầu bằng gói IN hoặc OUT từ máy chủ tuỳ thuộc vào hướ ng ng truyền và loại điểm cuối. Ví dụ trong trườ ng ng hợ p gói IN, thiết bị truyền dữ liệu về máy chủ. Trong trườ ng ng hợ p OUT, máy chủ tiế p tục bằng cách truyền dữ liệu. Truyền đẳng thờ i không dùng gói bắt tay để thông báo k ết quả truyền nên thông tin có th ể bị thất lạc. Loại truyền này thường đượ c dùng cho điệnthoại hay loa. 4.4 Truyề Truyền khố khối: Truyền khối là phương pháp truyề n một chiều. Hướ ng ng truyền có thể từ điểm cuối về máy chủ hay ngượ c lại. Như vậ y một thiết bị ngoại vi cần cả hai chiều dữ liệu sẽ cần có hai điểm cuối. Giao thức truyền khối gồm có 3 giai đoạn: Thông báo, dữ liệu và gói bắt tay. Nếu thiết bị bị k ẹt sẽ không có giai đoạn dữ liệu mà chỉ có thông báo và bắt tay. Dữ liệu sẽ đượ c truyền qua ống dẫn từ một vùng đệ m dữ liệu trong bộ nhớ
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 9
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
của chương trình tương ứ ng tớ i một điểm cuối của thiết bị ngoại vi.
III. Các lớ lớ p thiế thiết bị bị đƣợ c định nghĩa: 1. Các thành phầ phần của của 1 đặc đặc tả tả lớ lớ p thiế thiết bị bị: Một đặc tả lớ p thiết bị định nghĩa số lượ ng ng và loại các điểm cuối bắt buộc cũng như tuỳ chọn mà các thi ết bị trong lớp đó có thể có. Một đặc tả lớ p cũng có thể định nghĩa hoặc đặt tên các định dạng dữ liệu đượ c truyền trên bus. Một vài đặ c tả lớp định nghĩa các ứng dụng của dữ liệu đang đượ c truyền, điều này cho phép Host bi ết cách s ử dụng dữ liệu mà nó nhận đượ c. c. Một vài lớ p thiết bị sử dụng USB để truyền dữ liệu trong một định dạng được định nghĩa bở i một giao diện khác (ví dụ các lệnh của giao diện SCSI đượ c sử dụng bở i các thi ết bị lưu trữ thứ cấ p (mass-storage device) . Một đặc tả lớp cũng có thể định nghĩa các giá trị cho các mục trong các bộ mô tả chuẩn. 2. Các lớ lớ p thiế thiết bị bị đƣợc định nghĩa: 2.1 Thiế Thiết bị bị âm thanh (Audio): Lớ p thiết bị âm thanh chính là l ớ p các thiết bị gửi và nhận dữ liệu âm thanh. Dữ liệu âm thanh có th ể là ti ếng nói đượ c mã hoá, nh ạc hay bất k ỳ một loại âm thanh nào khác. Các thi ết bị thuộc lớ p thiết bị âm thanh có th ể sử dụng kiểu truyền đẳng thờ i cho luồng âm thanh ho ặc kiểu truyền khối cho dữ liệu đã đượ c mã hoá b ằng giao thức MIDI (Musical Instrument Digital Interface). 2.2 Thiế Thiết bị bị giao diệ diện thẻ thẻ thông minh: Thẻ thông minh là các lo ại thẻ quen thuộc đượ c sử dụng cho việc gọi điện thoại, thẻ quà tặng, thẻ ra vào, tr ả cướ c cầu đườ ng, ng, bảo hiểm y tế, giải mã cho các b ộ thu truyền hình vệ tinh và nhi ều các ứng dụng khác, những ứng dụng này yêu cầu một khối lượ ng ng thông tin nhỏ hoặc trung bình vớ i sự truy cậ p dữ liệu lưu trong thẻ một cách dễ dàng. ớ và thườ ng Mỗi thẻ là một module bao g ồm bộ nhớ và ng thêm m ột CPU. Nhiều thẻ cho phép cậ p nhật nội dung của chúng để thay đổi một số thông tin ví d ụ như giá trị tiền trong thẻ tín dụng hay mã c ủa thẻ. Để truy cậ p một thẻ thông minh, b ạn k ết nối nó vớ i thiết bị giao diện thẻ thông minh (CCID- Chip Card Interface Device) thườ ng ng bằng cách nhét thẻ vào khe đọc hoặc soi nó trướ c các bộ đọc đối vớ i loại thẻ không cần tiế p xúc. USB định nghĩa lớ p thiết bị giao diện thẻ thông minh vì có m ột số thiết bị giao diện thẻ thông minh (CCID) s ử dụng giao diện USB để giao tiế p vớ i máy tính. 2.3 Lớ p các thiế thiết bị bị truyề truyền thông: Lớ p các thiết bị truyền thông bao gồm hai loại thiết bị chính là: thiết bị thoại và các thiết bị mạng tốc độ trung bình. Thiết bị thoại bao gồm điện thoại tương tự ,modem tương tự, Các bộ thích nghi đầu cuối ISDN và điện thoại số. Các thiết bị mạng bao
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 10
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
gồm modem ADSL, modem điện tín, 10BASE-T Ethernet adapter và hub. 2.4 Lớ p thiế thiết bị bị bả bảo mậ mật: Lớ p thiết bị bảo mật định nghĩa cách thức giúp ta điề u khiển sự truy cậ p tớ i các file, âm nhạc, hình ảnh hoặc các dữ liệu khác đượ c truyền trên bus (ví d ụ muốn copy một file nào đó lên thiế t bị hoặc đọc nội dung được lưu trong thiế t bị thì phải có password). 2.5 Lớ p thiệ thiệt bị bị cho phép cậ cập nhậ nhật Firmware từ t ừ Host: Host: Lớ p thiết bị cậ p nhật firmware định nghĩa mộ t giao thức cho phép máy ch ủ gửi firmware tăng cườ ng ng hoặc vá cho một thiết bị. Sau khi nh ận sự nâng cấ p firmware thì thiết bị sẽ đượ c thiết lậ p lại để sử dụng firmware m ớ i của nó. 2.6 Lớ p thiế thiết bị bị giao diện diện ngƣờ i sử sử dụ dụng (HID): Lớ p thiết bị giao diện ngườ i sử dụng bao gồm các loại bàn phím, thi ết bị con tr ỏ và các bộ điều khiển dùng để chơi game. Đối vớ i những thiết bị này, máy ch ủ đọc thông báo từ thiết bị và gần như lậ p tức thực hiện theo các yêu cầu của ngườ i sử dụng (các yêu cầu này mang tính giao ti ế p tr ực tiế p giữa ngườ i sử dụng và máy) như sự ấn phím, sự di chuyển của con chuột. Máy chủ phải đáp ứng đủ nhanh sao cho ngườ i sử dụng không nhận thấy độ tr ễ r ất nhỏ giữa yêu cầu của họ và các đáp ứng của máy. 2.7 Cầu liên k ết dữ dữ liệ liệu hồ hồng ngoạ ngoại (Infrared Data Association Bridge): Lớ p thiết bị cầu liên k ết dữ liệu hồng ngoại định nghĩa nhữ ng yêu cầu về phần cứng và các giao th ức cho phép việc truyền tải dữ liệu ở kho khoảng cách ngắn thông qua năng lượ ng ng hồng ngoại. Thiết bị cầu liên k ết dữ liệu hồng ngoại sẽ đượ c nối vớ i máy chủ qua cổng USB cho phép máy ch ủ sử dụng giao diện USB để giám sát, điều khiển và truyền dữ liệu qua một giao diện hồng ngoại. 2.8 Lớ p thiế thiết bị bị lƣu trữ thứ thứ cấ cấp: Lớ p thiết bị lưu trữ thứ cấ p chính là các thiết bị có thể truyền dữ liệu theo cả hai hướ ng ng (từ máy chủ tớ i thiết bị hoặc từ thiết bị về máy chủ). Điển hình cho lớ p thiết bị này có thể k ể đến các ổ đĩa mềm, ổ đĩa cứng, ổ CD, ổ DVD và ổ nhớ flash. flash. Các lo ại camera cũng có thể sử dụng lớp lưu trữ thứ cấ p để cho phép việc truy cậ p các file hình ảnh trong bộ nhớ c của camera. Trong các máy tính s ử dụng hệ điều hành Windows, các thiết bị thuộc lớp lưu trữ thứ cấ p sẽ xuất hiện như các ổ đĩa trong cửa sổ My Computer và hệ điều hành cho phép ngườ i sử dụng sao chép, di chuy ển và xoá các d ữ liệu trong các thiết bị đó. 2.9 Lớ p các thiế thiết bị bị in ấn: Lớ p các thiết bị in ấn được định nghĩa cho các thiế t bị chuyển dữ liệu nhận đượ c từ máy chủ thành định dạng chữ hay hình ảnh trên giấy hay vật liệu nào đó. 2.10 Lớ p thiế thiết bị bị lƣu giữ ảnh giữ ảnh tĩnh:
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 11
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Lớ p thiết bị này bao g ồm Các loại máy ảnh và máy quét. Công vi ệc chủ yếu của lớ p thiết bị này là truyền dữ liệu hình ảnh từ thiết bị lên máy tính ch ủ. Ngoài ra m ột vài thiết bị còn có thể nhận dữ liệu từ máy tính. N ếu tất cả những gì ta cần là truyền các file hình ảnh từ một máy ảnh lên máy tính ch ủ thì ta có th ể đưa một máy ảnh vào lớ p thiết bị lưu trữ thứ cấ p. 2.11
Lớ p các thiế thiết bị bị đo lƣờ ng ng và kiể kiểm tra:
Lớ p các thiết bị đo lườ ng ng và kiểm tra là để dành cho các thi ết bị đo đạc như các bộ ADC, DAC, cảm biến và các b ộ chuyển đổi (chuyển đổi đơn vị vật lý chẳng hạn). Các thiết bị này có thể là một khối riêng r ẽ hoặc là một cạc trong một máy tính l ớ n. n. 2.12 Lớ p các thiế thiết bị bị ảnh động: động: ợ các Lớ p các thiết bị ảnh động hỗ tr ợ các thiết bị ghi hình số xách tay, webcam, và m ột số ợ thiết bị có chức năng gửi, nhận hay can chỉnh ảnh động. Lớ p thiết bị này cũng hỗ tr ợ việc truyền các ảnh tĩnh từ các thiết bị ảnh động. 2.13 Thự Thự c hiệ hiện các chức chức năng không tiêu chuẩn: chuẩn: Một vài thiết bị không có s ự phù hợ p rõ r ệt vớ i một lớ p thiết bị đượ c định nghĩ a. a. Ví dụ như các thiết bị điều khiển động cơ, rơ le, hay các cơ cấ u chấ p hành khác. Một ví dụ khác là các thi ết bị k ết nối giữa hai máy vi tính (C ầu sử dụng USB). Nếu một thiết bị đầu cuối mà không phù h ợp để gán vào một lớp được định nghĩa thì ngườ i thiết k ế sẽ phải viết driver cho thi ết bị để cung cấ p cho máy chủ các thông tin giúp nó giao tiếp đượ c vớ i thiết bị đó. IV. Lớ p thiế thiết bị bị giao diện diện ngƣờ i sử sử dụ dụng: Lớ p thiết bị giao diện ngườ i sử dụng (HID-Human Interface Device) là m ột trong ợ . Trên những chiếc máy tính cá những lớp đầu tiên đượ c hệ điều hành windows hỗ tr ợ nhân sử dụng Windows 98 hoặc các phiên b ản muộn hơn thì những ứng dụng có thể giao tiế p vớ i các thi ết bị giao diện ngườ i sử dụng bằng cách sử dụng các bộ điều khiển (driver) đượ c xây dựng sẵn trong hệ điều hành. Cũng chính vì lý do trên mà nhiều nhà cung cấ p thiết bị đầu cuối USB sử dụng lớ p thiết bị giao diện ngườ i sử dụng cho sản phẩm của họ. Chương này sẽ trình bày v ề lớ p HID vớ i mục đích giúp người đọc nhận định xem một thiết bị nào đó có phù hợp để gán vào l ớ p HID hay không. Chỉ ra các yêu c ầu đối vớ i vi chương trình (firmware) để định nghĩa một thiết bị thuộc lớ p HID và cho phép nó trao đổi dữ liệu vớ i máy tính chủ. Chương cũng sẽ giớ i thiệu 6 yêu cầu điều khiển cụ thể. 1. Khái niệ niệm về về HID: Từ “giao diện ngườ i sử dụng” trong tên gọ i của lớp HID để chỉ ra sự tương tác trự c tiế p giữa con ngườ i vớ i thiết bị thuộc lớ p này. Ví dụ một con chuột có thể phát hi ện việc chúng ta di chuyển hay nhấn chuột để gửi thông tin lên máy ch ủ và máy ch ủ sử dụng thông tin này để đem lại các đáp ứng mà ngườ i sử dụng đang mong đợ i trong
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 12
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
một ứng dụng cụ thể nào đó. Bên cạnh các thiết bị phổ biến của lớp HID như bàn phím, con chuột, cần điều khiển (joystick) thì l ớ p HID còn bao gồm một số thiết bị khác như các núm điều chỉnh, các chuyển mạch, nút nhấn, thanh trượt, điề u khiển từ xa, bàn phím điệ n thoại, các thi ết bị điều khiển dùng cho game như bao tay, bánh lái. Tuy nhiên m ột thiết bị thuộc lớ p HID không nhất thiết phải có một giao diện ngườ i sử dụng. Một thiết bị có th ể gán vào lớ p HID khi các chức năng của nó nằm gọn trong các giớ i hạn của đặc tả lớp HID. Dưới đây là các giớ i hạn và khả năng chủ của các thiết bị thuộc lớ p HID: - Tất cả dữ liệu được trao đổi dướ i cùng một dạng cấu trúc đượ c gọi là báo cáo (report). Máy chủ gửi và nhận dữ liệu bằng cách gửi các báo cáo và yêu c ầu các báo cáo trong các phương thức truyền điều khiển hoặc truyền ngắt. Định dạng báo cáo là khá linh hoạt và nó có th ể áp dụng cho r ất nhiều dạng của dữ liệu song đối vớ i mỗi một báo cáo đã được định nghĩa thì kích cỡ c của nó là xác định. - Một giao diện HID phải có một điể m cuối ngắt vào (interrupt IN enpoint) để gửi dữ liệu lên máy chủ. - Một giao diện HID có th ể có tối đa một điể m cuối ngắt vào và một điể m cuối ngắt ra (interrupt OUT enpoint). N ếu ta cần nhiều điểm cuối ngắt hơn nữa thì ta có th ể tạo một thiết bị đa chức năng gồm nhiều thiết bị HID ở trong trong nó. Một ứng dụng phải đảm bảo sự điều khiển riêng biệt tớ i từng HID trong thi ết bị đa chức năng. - Điểm cuối ngắt vào cho phép HID g ửi thông tin lên máy ch ủ ở nh những thời điểm mà không hề biết trướ c. c. Ví dụ không thể có cách nào giúp máy tính bi ết trướ c khi nào ngườ i sử dụng ấn một phím nào đó trên bàn phím p hím do đó bộ điều khiển máy chủ sử dụng giao tác ngắt để thăm dò có định k ỳ nhằm thu lượ m dữ liệu mớ i.i. - Tốc độ trao đổi dữ liệu là hạn chế, đặc biệt là khi truyền ở t tốc độ thấ p hoặc toàn t ốc. Điểm cuối ngắt tốc độ thấ p không thể vượ t quá 800 bytes/sec [2], v ới các điểm cuối toàn tốc thì tốc độ tối đa là 64 KB/s [2] còn điểm cuối ngắt tốc độ cao thì t ốc độ tối đa vào khoảng 24 MB/s [2]. Lưu ý là giao diệ n HID có thể chỉ là một trong nhiều kiểu giao diện đượ c hỗ tr ợ ợ bbở i một thiết bị. Ví dụ một loa USB có th ể sử dụng phương thứ c truyền đẳng thờ i cho âm thanh đồng thời cũng có thể có một giao diện HID cho vi ệc điều khiển độ to nhỏ, cân bằng, treble và bass. M ột giao diện HID thườ ng ng sẽ r ẻ hơn cách thức điều khiển vật lý truyền thống trên một thiết bị. 2. Các yêu cầ cầu về về phầ phần cứ cứ ng: ng: 2.1 Các điểm điểm cuố cuối: Tất cả các kiểu truyền của HID sử dụng hoặc điểm cuối điều khiển hoặc điểm cuối ngắt. Tất cả các HID phải có một điểm cuối ngắt vào để gửi dữ liệu tớ i máy ch ủ. Một điểm cuối ngắt ra là tu ỳ chọn.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 13
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
2.2 Các loạ loại báo cáo: Yêu cầu đối vớ i một điểm cuối ngắt vào cho th ấy mọi HID phải có tối thiểu là một report đầu vào được định nghĩa trong bộ mô tả report của HID. Các report đầ u ra và report đặc biệt là tu ỳ chọn. 2.3 Các yêu cầ cầu có thể thể gử gử i từ từ Host Host tớ tớ i thiế thiết bị bị trong kiể kiểu truyề truyền điều điều khiể khiển: Đặc tả HID định nghĩa 6 yêu cầ u cụ thể mà Host có th ể gửi tớ i thiết bị. Hai trong số đó là Set_Report và Get_Report, đem lại cách để Host và thiết bị trao đổi report thông _Report để qua kiểu truyền điều khiển. Host sử dụng Set_Report để gửi report và Get _Report nhận thông báo. Bốn yêu cầu còn lại liên quan t ớ i việc cấu hình thiết bị. Các yêu c ầu Set_Idle và Get_Idle dùng để thiết lậ p và đọc tốc độ r ỗi, cái cho bi ết có hay không việc một thiết bị gửi lại dữ liệu không hề thay đổi k ể từ lần thăm dò cuối. Các yêu cầu Set_Protocol và Get_Protocol thi ết lập và đọc giá tr ị giao thức. Giá tr ị giao thức sẽ cho biết một thiết bị có thể đượ c sử dụng hay không ngay c ả khi bộ điều khiển đầy đủ của nó chưa đượ c tải trên Host (ví d ụ con chuột và bàn phím có th ể thực hiện chức năng của nó ngay trong giai đoạ n khởi động - khi mà bộ điều khiển chính thức của nó chưa đượ c tải ở trên trên Host). Các lo ại yêu cầu vừa nêu sẽ đượ c trình bày chi ti ết hơn ở đoạn sau. 2.4 Kiể Kiểu truyề truyền ngắ ngắt: Các điểm cuối ngắt đem lại sự luôn phiên trong vi ệc trao đổi dữ liệu, đặc biệt khi phía thu phải có đượ c dữ liệu một cách nhanh chóng ho ặc định k ỳ. Truyền điều khiển có thể bị tr ễ nếu bus quá b ận trong khi băng thông cho truyền ngắt lại được đả m bảo. Khả năng thực hiện truyền ngắt ra (OUT) đượ c bổ sung ở phiên phiên bản 1.1 của chuẩn ợ USB USB. Windows 98 SE là phiên b ản Windows đầu tiên hỗ tr ợ USB 1.1 và HID 1.1 [2]. 3. Các yêu cầ cầu về về vi chƣơng trình (Firmware): Vi chương trình phả i phù hợ p vớ i các yêu c ầu của lớ p thiết bị. Các bộ mô tả của thiết bị phải bao gồm một bộ mô tả giao diện để định nghĩa thiế t bị thuộc lớ p HID, một bộ mô tả HID và một bộ mô tả điểm cuối ngắt vào (IN). Bộ mô tả điểm cuối ngắt ra (OUT) là tu ỳ chọn. Vi chương trình cũng phả i chứa một bộ mô tả report. Một HID có ợ m thể hỗ tr ợ một hay nhiều report. Bộ mô tả report chỉ ra kích thướ c và nội dung của dữ liệu chứa trong report cũng như cách mà phía thu sẽ sử dụng dữ liệu nhận đượ c. c. Các giá tr ị trong bộ mô tả sẽ chỉ ra mỗi report là m ột report đầu vào, đầu ra hay là m ột report đặc biệt. Máy chủ nhận dữ liệu chứa trong report đầ u vào và g ửi dữ liệu chứa trong report đầu ra. Một report đặc biệt có thể đượ c truyền theo cả hai hướ ng ng Mọi ợ ttối thiểu một report đầu vào để máy chủ có thể thu nhận dữ liệu thiết bị nên hỗ tr ợ thông qua truyền ngắt hoặc truyền điều khiển. Các report đầu ra là tuỳ chọn. Để tương thích vớ i Windows 98 Gold thì các thi ết bị sử dụng các report đầu ra nên hỗ tr ợ ợ việc gửi report thông qua truyền điều khiển. Sử dụng truyền ngắt cho các thông báo
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 14
SVTH: LÊ TẤN LỘC
4.
-
-
-
GVHD: NGUYỄN DUY THẢO
đầu ra là tu ỳ chọn. Còn các thông báo đặ c biệt cũng là tuỳ chọn và nếu đượ c sử dụng thì nó luôn đượ c truyền thông qua truyền điều khiển. để chỉỉ ra mộ Cách thức thức để ch một thiế thiết bị bị thuộ thuộc lớ lớ p HID: Vớ i bất k ỳ thiết bị USB nào thuộc lớ p HID thì các bộ mô tả của nó chỉ cho máy ch ủ cái máy ch ủ cần biết để giao tiế p vớ i thiết bị. Máy chủ tìm hiểu về giao diện HID trong suốt quá trình thi ết lậ p bằng cách gửi một yêu cầu Get_Descriptor. Các b ộ mô tả của một thiết bị thuộc lớ p HID bao gồm: Bộ mô tả thiết bị (Device Descriptor), b ộ mô tả cấu hình (Configuration Descriptor), b ộ mô tả giao diện (Interface Descriptor), b ộ mô tả HID (HID Descriptor), b ộ mô tả điểm cuối ngắt vào (IN interrupt Enpoint Descriptor), bộ mô tả điểm cuối ngắt ra (OUT Interrupt Endpoint Descriptor) và b ộ mô tả điểm cuối ngắt đặc biệt (Feature Interrupt Endpoint Descriptor). Hai b ộ mô tả sau cùng là tu ỳ chọn (tức có thể có hoặc không). Ngoài các b ộ mô tả vừa liệt kê ở trên trên thiết bị thuộc lớ p HID còn phải có một bộ mô tả nữa đó là bộ mô tả Report. Một HID vớ i giao diện khởi động sẽ có thể thực hiện một phần chức năng của mình khi mà driver c ủa nó chưa đượ c máy chủ tải đến. Hoàn cảnh này có th ể xuất hiện khi máy tính khởi động tr ực tiế p từ DOS hoặc khi sử dụng chế độ an toàn (safe mode) c ủa Windows để gỡ l lỗi hệ thống. Một bàn phím ho ặc con chuột vớ i giao diện khởi động ợ b bở i hệ thống vào ra có thể sử dụng một giao th ức đã được đơn giản hoá đượ c hỗ tr ợ cơ sở ợ giao (BIOS) của nhiều máy tính chủ. Trườ ng ng protocol=1 t ức là thiết bị hỗ tr ợ giao diện ợ giao bàn phím còn nếu bằng 2 thì thiết bị hỗ tr ợ giao diện con chuột. Bộ mô tả HID (HID Descriptor) là b ộ mô tả đượ c bổ sung cho lớ p HID. Bộ mô tả này có th ể có 7 trườ ng ng hoặc nhiều hơn tuỳ thuộc vào số lượ ng ng các bộ mô tả đượ c thêm vào cho thi ết bị: Trường bLength có kích thướ c 1 byte cho bi ết độ dài của bộ mô tả HID tính theo byte. Trườ ng ng bDescriptorType có giá tr ị là 21h để chỉ ra bộ mô tả này là b ộ mô tả HID. Trường bcdHID có kích thước 2 byte để chỉ ra phiên bản USB mà thiết bị tuân theo. Trườ ng ng bCountryCode, Nếu thiết bị đượ c sử dụng chỉ trong phạm vi địa lý của một nước nào đó thì trườ ng ng này sẽ mang mã của quốc gia đó (Đặ c tả HID có danh sách mã của các nướ c). c). Nếu việc sử dụng thiết bị không phụ thuộc vào vị trí địa lý thì trườ ng ng này có giá tr ị 00h. Trườ ng ng bNumDescriptors ch ỉ ra số lượ ng ng các bộ mô tả lớ p thuộc cấ p dướ i của bộ mô tả này . Trườ ng ng bDescriptorType ch ỉ ra loại của bộ mô tả thuộc cấp dướ i của bộ mô tả này. (Ví dụ như trườ ng ng này có giá tr ị 22h để chỉ ra r ằng bộ mô tả cấp dướ i của nó là bộ mô tả Report) . wDescriptorLength cho bi ết kích thướ c tổng cộng của các bộ mô tả đã đượ c mô tả trướ c nó và phần kích thướ c k ể từ đầu cho đến trườ ng ng này của bộ mô tả HID .
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 15
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Nếu thiết bị có thêm m ột bộ mô tả vật lý (physical descriptor) thì b ộ mô tả HID sẽ có thêm hai trườ ng ng nữa đượ c liệt kê lần lượ t là: - bDescriptorType có giá tr tr ị là 23h để chỉ ra bộ mô tả cấp dướ i là bộ mô tả vật lý. - wDescriptorLength cho bi ết tổng kích thướ c của các b ộ mô tả đã đượ c mô tả tính từ đầu cho đến hết trườ ng ng này. 5. Bộ mô tả tả báo cáo (Report Descriptor): Một bộ mô tả thông báo định nghĩa khuôn dạ ng và công dụng của dữ liệu chứa trong các report. Ví d ụ nếu thiết bị là một con chuột thì dữ liệu trong report s ẽ thông báo cho máy ch ủ biết sự di chuyển của con chuột và sự click chu ột, nếu thiết bị là một bộ điều khiển rơle thì dữ liệu trong báo cáo s ẽ cho biết rơle nào mở và ở và rơle nào đóng. Bộ mô tả report cần phải đủ linh hoạt để điều khiển thiết bị vớ i các mục đích khác nhau. Dữ liệu lưu trong report cần đượ c tối ưu hoá về kích thước để tránh lãng phí không gian lưu trữ và rút ng ắn thờ i gian khi truyền trên bus. Sau đây là một ví dụ về bộ mô tả report của một keyboard và s ẽ trình bày m ột số kiến thức liên quan đế n bộ mô tả report thông qua vi ệc giải thích ví dụ này ( hiểu đầy đủ và cặn k ẽ về bộ mô tả report là một điều không hề đơn giản vì vậy mà ví d ụ này chỉ mớ i nêu ra đượ c một phần kiến thức về bộ mô tả). Để tạo bộ mô tả Report cho l ớ p HID ta sử dụng phần mềm “HID Descriptor Tool”, đây là một tiện ích mi ễn phí và có th ể tải về từ địa chỉ sau: http://apps.intel.com/scripts- uti l/download.a l/download.as sp?ur p?ur l= /in telpr telpr ess/usb/Example /usb/Examples s/Zi pFi les/DT les/DT .zip& .zip& titl e=H I D+D escr iptor+T ool& ool& f ul lpg=3& site=Deve ite=Develope loper r
6. Các yêu cầ cầu mà Host có thể th ể gử gử i tớ tớ i 1 lớ lớ p thuộ thuộc lớ lớ p HID: HID định nghĩa 6 yêu cầ u mà Host có thể gửi tớ i một thiết bị thuộc lớ p HID. Tất cả ợ Get_Report, còn đối vớ i các thi ết bị hỗ tr ợ ợ giao các HID phải hỗ tr ợ Get_Report, giao thức khởi động thì phải đáp ứng đượ c các yêu c ầu Get_Protocol và Set_Protocol. Các yêu c ầu còn lại gồm Set_Report, Get_Idle và Set_Idle là tu ỳ chọn, tr ừ trườ ng ng hợp đối vớ i một ợ Set_Idle. Set_Idle. Nếu một HID không có keyboard sử dụng giao thức khởi động phải hỗ tr ợ một điểm cuối ngắt ra (OUT) ho ặc nếu HID đang giao tiế p vớ i một máy chủ chỉ hỗ ợ USB 1.0 như Windows 98 Gold chẳ ng hạn thì HID đó nế u muốn nhận report từ tr ợ USB ợ Set_Report. Set_Report. Các yêu c ầu ở trên host nó phải hỗ tr ợ trên sẽ đượ c Host gửi tớ i thiết bị trong giai đoạn setup của truyền điều khiển. Giai đoạn setup của truyền điều khiển như đã đượ c trình bày trong m ục 3.5.2 diễn ra như sau: ban đầu host phát ra gói thông báo setup, theo sau đó là gói dữ liệu dành cho giao tác setup có kích thướ c của phần dữ liệu là 8 byte, cu ối cùng host ch ờ gói gói bắt tay ACK để biết r ằng giao tác tác setup có thành công hay không. Các yêu c ầu của host đượ c chứa trong 8 byte d ữ liệu của gói
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 16
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
dữ liệu theo sau gói thông báo setup, nó có khuôn d ạng như sau:
Có một số bit trong gói trên có giá tr ị giống nhau đối vớ i cả 6 yêu cầu đó là: - 5 bit Destination type =00000B để chỉ ra đích đến của yêu cầu là một thiết bị. (00001B: đích là mộ t giao diện cụ thể, 00010B: đích là một điể m cuối trên thi ết bị, 00011B: đích là mộ t trong các thành ph ần khác trong thiết bị). - 2 bit Request Type =01 để chỉ ra loại yêu cầu này là để dành cho một lớ p thiết bị cụ thể. (00: tức request là một trong các request chu ẩn (có 11 loại request chu ẩn), 10: request được định nghĩa bở i nhà cung cấ p thiết bị)..
6.1 Get_Report: Host gửi yêu cầu này khi nó muốn nhận một Input report hoặc Feature report t ừ HID sử dụng truyền điều khiển. Bit Direction = 1 để chỉ ra r ằng có một giai đoạn dữ liệu sau giai đoạn setup và hướ ng ng truyền của dữ liệu là từ thiết bị về host. bRequest = 01h cho biết yêu cầu mà host g ửi tớ i thiết bị là Get_Report. wValue: Byte cao ch ứa thông tin cho biết host mu ốn nhận loại report nào t ừ thiết bị (1=Input, 3=Feature), byte th ấ p chứa report ID. wIndex: chứa số lượ ng ng giao diện mà yêu cầu được hướ ng ng tớ i.i. wlength: chứa chiều dài tối đa cho phép của report trong giai đoạ n dữ liệu tính theo ợ yêu byte. Lưu ý: tấ t cả các HID nên h ỗ tr ợ yêu cầu Get_Report. 6.2 Get_Idle: Host gửi yêu cầu này để đọc tốc độ r ỗi từ thiết bị. Bit Direction = 1. bRequest = 02h. wValue: Byte cao = 00h, byte b yte th ấ p chỉ ra report ID c ủa report mà yêu c ầu tác động tớ i.i. Nếu byte = 00h thì có nghĩa là yêu cầ u sẽ tác động tớ i tất cả các Input report c ủa HID. ợ yêu wIndex chứa số lượ ng ng giao diện hỗ tr ợ yêu cầu này. wlength = 1. 1 byte trườ ng ng dữ liệu của gói dữ liệu trong giai đoạ n dữ liệu sẽ chứa tốc độ r ỗi tính theo số nguyên lần của 4 ms. ợ yêu Các HID không buộc phải hỗ tr ợ yêu cầu Get_Idle.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 17
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
6.3 Get_Protocol: ợ giao Mục đích của yêu cầu này là để host biết đượ c HID có hỗ tr ợ giao thức khởi động hay không. Bit Direction = 1. bRequest = 03h. wValue = 0000h. ợ yêu yêu cầu này. wIndex chứa số lượ ng ng giao diện hỗ tr ợ ợ giao wLength = 1. Nếu 1 byte trườ ng ng dữ liệu của gói dữ liệu = 0 tức có hỗ tr ợ giao thức ợ giao khởi động còn nếu 0 tức là không hỗ tr ợ giao thức khởi động. ợ giao Các thiết bị có hỗ tr ợ giao thức khởi động thì phải đáp ứng lại yêu cầu này. 6.4 Set_Report: Host gửi yêu cầu này để thông báo r ằng nó muốn gửi một Output hoặc Feature report tớ i thiết bị bằng cách s ử dụng truyền điều khiển. Bit Direction = 0 để chỉ ra r ằng hướ ng ng của report trong giai đoạ n dữ liệu là từ host tớ i thiết bị. bRequest = 09h. wValue: Byte cao ch ứa thông tin về loại report sẽ đượ c gửi trong giai đoạn dữ liệu (2: Output report, 3: Feature report). Byte th ấ p chứa report ID. wIndex ch ứa số lượ ng ng giao diện mà yêu cầu này được hướ ng ng tớ i . wLength: cho biết chính xác kích thướ c của report tính theo byte s ẽ đượ c gửi trong giai đoạn dữ liệu. ợ ho ợ yêu Các HID có thể hỗ tr ợ hoặc không hỗ tr ợ yêu cầu Set_Report. N ếu một HID không có điểm cuối ngắt ra (OUT) hoặc HID đang làm việ c vớ i một máy ch ủ chỉ hỗ tr ợ ợ phiên phiên bản USB 1.0 mà l ại muốn nhận dữ liệu từ Host thì việc đáp ứng lại yêu cầu Set_Report là cách duy nh ất để có thể nhận dữ liệu từ host. 6.5 Set_Idle: Host gửi yêu cầu này là để tiết kiệm băng thông bằng thông qua việc giớ i hạn tần số gửi báo cáo c ủa một điểm cuối ngắt vào (IN) khi d ữ liệu chứa trong báo cáo không có sự thay đổi so vớ i báo cáo g ần nhất. Bit Direction = 0 để chỉ ra hướ ng ng của dữ liệu trong giai đoạ n dữ liệu nếu có thì sẽ là từ host tớ i thiết bị. bRequest = 0Ah. wValue: Byte cao thi ết lậ p khoảng thờ i gian tối thiểu phải trôi qua gi ữa hai Input report có d ữ liệu giống nhau mà lại đượ c gửi k ế tiế p nhau, Byte thấ p chứa report ID của report mà yêu cầu này tác động tớ i.i. Nếu byte thấ p là 00h thì có nghĩa là yêu cầ u này tác động tớ i tất cả các Input report c ủa HID. ợ yêu wIndex chứa số lượ ng ng giao diện hỗ tr ợ yêu cầu này. wLength 0000h: Cho thấy không có giai đoạ n dữ liệu theo sau giai đoạn setup. Chú thích: Kho ảng thờ i gian giữa hai Input report là m ột số nguyên lần của 4 ms, như
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 18
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
vậy vớ i 1 byte cao c ủa wValue thì khoảng thờ i gian này sẽ nằm trong phạm vi từ 4 tớ i 1020 ms. Nếu byte cao c ủa wValue = 00h thì có nghĩa là HID chỉ đượ c gửi Input report khi d ữ liệu của report đã có thay đổi so vớ i lần gửi ngay trước đó. Nế u dữ liệu của report có thay đổi so vớ i lần gửi ngay trước đó thì nó có thể đượ c gửi ngay khi có một thông báo IN b ất k ể giá tr ị byte cao của wValue là bao nhiêu. Trong trườ ng ng hợ p dữ liệu của report không h ề có thay đổi gì so v ớ i lần gửi ngay trước đó mặ t khác khoảng thời gian đượ c gán trong byte cao c ủa wValue chưa trôi qua kể từ lần gửi report ngay trướ c mà lại có một thông báo IN t ừ host thì HID sẽ gửi gói bắt tay NAK. Còn nếu khoảng thời gian đượ c gán trong byte cao c ủa wValue đã trôi qua kể từ lần gửi report ngay trướ c thì HID s ẽ gửi tớ i host report m ặc dù dữ liệu của report không hề có thay đổi so vớ i lần gửi ngay trướ c. c. Nếu HID tr ả lờ i yêu cầu Set_Idle c ủa host bằng gói bắt tay STALL thì nó có th ể gửi report b ất cứ khi nào có thông báo IN t ừ host k ể cả khi dữ liệu của report không hề có sự thay đổi. ợ yêu Các HID không bị bắt buộc phải hỗ tr ợ yêu cầu Set_Idle c ủa host ngoại tr ừ keyboard có sử dụng giao thức khởi động. 6.6 Set_Protocol: Host gửi yêu cầu này để chỉ định HID có nên s ử dụng giao thức khở i động hay không. Bit Direction = 0 để chỉ ra hướ ng ng của dữ liệu trong giai đoạ n dữ liệu nếu có thì sẽ là từ host tớ i thiết bị. bRequest = 0Bh. wValue = 0000h: nên s ử dụng giao thức khởi động; wValue 0000h: không nên s ử ợ yêu dụng giao thức khởi động. wIndex chứa số lượ ng ng giao diện hỗ tr ợ yêu cầu này wLength 0000h: Cho thấy không có giai đoạ n dữ liệu theo sau giai đoạn setup. ợ yêu Thiết bị muốn thực hiện chức năng trong quá trình khởi độ ng phải hỗ tr ợ yêu cầu Set_Protocol. V. Giớ Giớ i thiệ thiệu PIC 18F4550: PIC 18F4550 là một sản phẩm của họ vi xử lý thông d ụng của công ty Microchip. Điểm riêng biệt của vi xử lý PIC 18F4550 là nó là 1 trong nh ững PIC hỗ tr ợ ợ toàn toàn thể cho USB, nghĩa là nó USB gắn trong có sẵn các chân đầu ra để nối tr ực tiế p vớ i máy tính mà không c ần mạch kéo hay bất cứ mạch gắn ngoài nào khác.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 19
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
ợ tinh Hỗ tr ợ tinh thể dao động ký nhiều tần số như đầu vào và bộ cân bằng nên bộ xử lý có thể hoạt động vớ i tần số 48MHz của dao động ký độ c lậ p khi k ết nối. Khi k ết thúc hoạt động thì chỉnh dao động ký đượ c k ết nối (thông qua các bit c ấu hình). Làm việc vớ i tốc độ 48MHz là vì điề u kiện tiên quyết để chuyển sang chế độ toàn tốc nhờ c cồng USB. Vì vậy, Driver USB chuyển sang chế độ toàn tốc (1.5Mbyte/s) qua USB và tương thích vớ i chuẩn USB 2.0. Nó cũng có 35 chân IN/OUT và có s ẵn vỏ bọc gồm DIP-40 nên r ất thuận tiện cho nhà phát triển và những ngườ i nghiệ p dư quan tâm. ớ SRAM hay hơi và Vớ i bộ nhớ , có 32Kb Flash l ứu dữ liệu chương trình, 2kb bộ nhớ SRAM ớ không bay hơi) để lưu trữ dài hạn dữ liệu như cấu hình… 256 byte EEPROM (bộ nhớ không Các chỉ thị dài 1 byte v ớ i số ngoại lệ dài 2 byte (CALL,MOVF,GOTO,LSFR). Sử dụng cơ chế đườ ng ng ống để thực thi mã b ằng việc khiến các thiết bị chỉ thị liên tiế p hoạt động trong 4 xung (độ dài xung) và có 4 l ần nhảy xung đượ c thêm vào.
Các đặc tính đáng chú ý khác là đồ ng hồ, ngắt (đồng hồ gắn trong và ngoài) v ớ i hai mức ưu tiên và dùng cả hai mức như bộ so sánh tương tự kèm theo vớ i bộ phát điện thế chuẩn có 16 mức (hữu ích khi dùng trigger ở m mức phần cứng).
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 20
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Cuối cùng, PIC 18F4550 cũng có bộ chuyển đổi tương tự 10 bit nhưng dao độ ng ký không đủ yêu cầu về tốc độ cao cần thiết. Vì vậy, máy phát dao động có tốc độ 48MHz giữa thờ i gian tr ễ do truyền tải và các ng ắt khác (vòng lặ p .. ). Không thể đạt đượ c tốc độ lớn hơn 200khz.
1. Sơ đồ chân: đồ chân:
Ta có thể thấy chân D- và D+ cho k ết nối USB ở chân chân 23 và 24. 2. Công cụ cụ lậ lập trình: Có nhiều công cụ lậ p trình và biên dịch cho PIC như: CCS, Keil C, MPLAB X, Mikro C,… Nhưng với đề tài này thì em th ấy Mikro C hỗ tr ợ ợ khá khá tốt và đầy đủ, đặc biệt là đơn ở đây em chon viết bằng Mikro C. giản và dễ hiểu. Nên ở đây ở đây ta giao tiế p vớ i máy tính nên ta c ần có 1 giao di ện để giao tiế p vớ i PIC qua Và ở đây ở đây em chọn thiết k ế giao diện bằng C# trong bộ Visual Studio 2010 cổng USB nên ở đây của Microsoft.
CHƢƠNG 2: THIẾT THIẾT K Ế MẠ MẠCH
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 21
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Tính toán điện tr ở ở hhạng dòng cho led: Ta có điện áp trên m ỗi led là 3V và dòng qua led là 10mA nên ta tính toán được điệ n ở hhạng dòng cho led là: tr ở
ở 220 Ω. Ta chọn điện tr ở 220 CHƢƠNG 3: VIẾT CHƢƠNG TRÌNH I.
Chƣơng trình cho PIC 18F4550: Ta dùng ph ần mềm Mikro C để lậ p trình cho PIC.
Đầu tiên ta t ạo 1 Project m ớ i:i: File/New/Project
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 22
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Step 1: ta chọn đườ ng ng dẫn lưu project, và chọ n loại vi điều khiển sử dụng, kèm theo là ở đây ta dùng PIC 18F4550 và tầ n số khai báo t ần số thạch anh mà mình s ử dụng, ở đây thạch anh là 20MHz. Step 2: bỏ qua vì không dùng đế n. Step 3: chọn thư việ n cần dùng, ta chọn “Include None (Advanced)”
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 23
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Step 4: ta tick vào ô vuông và nh ấn Finish.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 24
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Lúc này 1 cửa sổ “Edit Project” sẽ hiện ra, ta ch ọn các thông sô như trong hình:
Ở đây ta có 2 cách để chọn tần số hoạt động cho CPU, ở hình hình vẽ ta th ấy có 2 Option là đầu vào xung nhị p p cho CPU. Vớ i Option 1 là: HSPLL và Option 2 là: XT, HS. - Ta chọn sử dụng HSPLL, tức là Option 1. Th ạch anh thật là 20MHz, qua bộ chia PLLDIV để được 4MHz và đưa qua bộ 96MHz PLL, đầu ra nhận đượ c tần số 96MHz, cái này s ẽ đượ c chia 2 (như hình vẽ ) 96/2=48 MHz, vậy là USB hoạt động vớ i xung nhị p p là 48MHz. - Khi khai báo sử dụng HSPLL thì XT,HS b ị vô hiệu, chính vì thế chúng ta sẽ lấy xung nhị p p từ bộ HSPLL để cấp cho CPU, như hình trên xung nhị p sẽ được đưa qua bộ chia CPUDIV nhỏ nhất là 2, t ức là 96/2=48MHz. điều này có nghĩa là CPU sẽ hoạt động vớ i xung nhị p p cao nhất 48MHz, mặc dù đầu vào thạch anh chỉ có 20MHz. Và lúc này điều quan tr ọng là chúng ta ph ải sữa lại giá tr ị thạch anh đã đặt cho Project là 20MHz thành 48MHz mặc dù thạch anh thật bên ngoài là 20MHz. Ngoài ra chúng ta cần phải Enable cho pin 18 để lấy điện áp 3.3V tại chân này.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 25
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Tiế p theo ta tiến hành viết code.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 26
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Code:
sbit LCD_RS at RE0_bit; sbit LCD_EN at RE2_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit;
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 27
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISE0_bit; sbit LCD_EN_Direction at TRISE2_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit;
unsigned char readbuff[64] absolute 0x500; unsigned char writebuff[64] absolute 0x540; char cnt; char kk,tam; char i,j; void interrupt(){ USB_Interrupt_Proc(); } void main(void){ ADCON1 |= 0x0F; CMCON |= 7; TRISB = 0x00; Lcd_Init(); HID_Enable(&readbuff,&writebuff);
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 28
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); while(1){ while(!HID_Read()) ; for(cnt=0;cnt<64;cnt++) writebuff[cnt]=readbuff[cnt]; if(writebuff[0]==0){ switch(writebuff[1]){ case 1: portb.b0=!portb.b0; break; case 2: portb.b1=!portb.b1; break; case 3: portb.b2=!portb.b2; break; case 4: portb.b3=!portb.b3; break; case 5: portb.b4=!portb.b4; break; case 6: portb.b5=!portb.b5; break; case 7: portb.b6=!portb.b6; break; case 8: portb.b7=!portb.b7; break; case 9: portb=0xFF; break; case 10: portb=0x00; break; default: break; }} else { char hang1[16]; char hang2[16];
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 29
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
for(i=0;i<16;i++) hang1[i]=writebuff[i+1]; for(j=16;j<32;j++) hang2[j-16]=writebuff[j+1]; Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,1,hang1); Lcd_Out(2,1,hang2); } while(!HID_Write(&writebuff,64)) ;
}} Vậy là xong phần code, ta ti ến hành Desciption cho thi ết bị.
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 30
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
ở thư mục đã tạo và Add vào Project. - Lưu nó ở thư
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 31
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Vậy là xong phần Code, ta tiến hành Build (Ctrl+F9) vào n ạ p vào PIC.
II.
Giao diệ diện C# trên máy tính: Do HID đã có sẵn Driver trên máy và t ự cài đặt, chúng ta sẽ không cần quan tâm đến Driver. Đầu tiên chúng ta t ạo 1 project m ới và Add thư việ n liên k ết ết động “HIDLib.dll” . Trong cửa sổ Solution Explorer, nh ấn chuột phải vào References, ch ọn Add Reference…
Sau đó ta tiế n hành thiết k ế giao diện và viết Code:
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 32
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
Code: using System; using System; using using System.Collections.Generic; using System.ComponentMode System.ComponentModel; l; using System.Data; System.Data; using using System.Drawing; using System.Linq; System.Linq; using System.Text; System.Text; using using System.Windows.Forms; using HIDLib; using HIDLib;
namespace USBHID namespace USBHID { public partial class Form1 Form1 : : Form { HIDDevice dev HIDDevice dev = new HIDDevice HIDDevice(); (); byte[] byte [] data = new byte byte[64]; [64]; int i; int i; public Form1() public Form1() { InitializeComponent(); dev.vid = 0x04D8; dev.pid = 0x0003; dev.in_size = 64; dev.out_size = 64; dev.Initialize(); }
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 33
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
protected override void void WndProc( WndProc(ref ref Message Message m) m) { dev.DeviceChange( ref ref m); m); base.WndProc( base .WndProc(ref ref m); m); } private void void btn_onall_Click_1(object btn_onall_Click_1( object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1]=9; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn_offall_Click_1(object btn_offall_Click_1( object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 10; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn1_Click( btn1_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 1; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn2_Click( btn2_Click(object object sender, sender, EventArgs EventArgs e) e) {
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 34
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 2; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn3_Click( btn3_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 3; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn4_Click( btn4_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 4; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn_send_Click( btn_send_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 1; string chuoi; string chuoi; chuoi = this this.txt.Text; .txt.Text; if (chuoi.Length if (chuoi.Length > 32) MessageBox MessageBox.Show( .Show("Vui "Vui long nhap it hon 32 ky tu !"); !" ); else for for (i (i = 1; i <= chuoi.Length; i++) { data[i] = Convert Convert.ToByte(chuoi[i-1]); .ToByte(chuoi[i-1]);
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 35
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
} if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn5_Click( btn5_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 5; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn6_Click( btn6_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 6; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn7_Click( btn7_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0; data[1] = 7; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } private void void btn8_Click( btn8_Click(object object sender, sender, EventArgs EventArgs e) e) { if (dev.AttachedState) (dev.AttachedState) { data[0] = 0;
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 36
SVTH: LÊ TẤN LỘC
GVHD: NGUYỄN DUY THẢO
data[1] = 8; for (i for (i = 2; i < 64; i++) data[i] = 0; if if (!dev.Transmit(data)) MessageBox MessageBox.Show( .Show("Error" "Error"); ); } else MessageBox MessageBox.Show( .Show("Disconnected!" "Disconnected!" ); } } }
TÀI LIỆU THAM KHẢO 1. 2. 3. 4.
https://sites.google.com/site/lhpscienceclub/ http://www.picvietnam.com/forum/forumdisplay.php?f=45 http://www.microchip.com/ USB in nutshell - Craig Peacock
MẠCH GIAO TIẾP MÁY TÍNH QUA CỔNG USB
TRANG 37