Ở đây ta chỉ nói đến lớp HID được sử dụng với chuẩn giao tiếp USB 2.0. Lớp
HID bao gồm các thiết bị cơ bản được sử dụng bởi con người để điều khiển thao tác của các hệ thống tính toán. Các ví dụ điển hình của lớp HID bao gồm:
• Các thiết bị bàn phím và con trỏ - ví dụ, các thiết bị chuột máy tính tiêu chuẩn, các quả bóng xoay, và các cần điều khiển.
• Các bộ phận điều khiển tìm thấy trong các thiết bị chẳng hạn như điện thoại, điều khiển từ xa, các thiết bị trò chơi hoặc mô phỏng.
• Các thiết bị không cần tới thao tác của con người nhưng cung cấp dữ liệu theo định dạng giống như lớp thiết bị HID – ví dụ, các máy đọc mã vạch, nhiệt kế đo nhiệt độ, hoặc vôn kế.
Thông tin về bản thân một thiết bị USB được lưu trữ bên trong các segment của bộ nhớ ROM của nó. Các segment này được gọi là các descriptor. Một giao diện
descriptor có thể nhận dạng một thiết bị như là thuộc về một trong số các lớp đã được định nghĩa của nó.
Một thiết bị lớp HID sẽ sử dụng một tham chiếu tới trình điều khiển lớp HID
để lấy dữ liệu và định tuyến nó.Và công đoạn này được hoàn thành bằng việc kiểm tra các descriptor của thiết bị và dữ liệu nó cung cấp.
Hình 2.26 Tham chiếu giữa trình điều khiển lớp HID và thiết bị HID Descriptor của thiết bị lớp HID được sử dụng để nhận dạng các descriptor của lớp HID khác tại thời điểm hiện tại và cho biết các kích thước của chúng. Ví dụ, các descriptor Report và Physical như chỉ ra ở hình dưới đây:
Hình 2.27 Ví dụ về descriptor của thiết bị lớp HID
Một descriptorreport mô tả mỗi phần dữ liệu mà thiết bị sinh ra và đo lường dữ liệu trong thực tế là gì. Ví dụ, nó định nghĩa các mục để mô tả một vị trí hoặc trạng thái nút bấm. Thông tin về các mục này sẽ được sử dụng để:
• Quyết định định tuyến đầu vào ở đâu .
• Cho phép phần mềm thao tác các chức năng đầu vào.
Bằng cách kiểm tra một mục (còn được gọi là descriptor report) trình điều khiển của lớp HID có thể quyết định kích thước và bố cục dữ liệu được báo cáo từ thiết bị lớp HID.
Descriptor physical thiết lập các descriptor tùy chọn để cung cấp thông tin các phần hoặc các bộ phận trên cơ thể con người được sử dụng để kích hoạt bộ điều khiển trên một thiết bị.
Tất cả những cái này có thể được kết hợp lại để minh họa cấu trúc descriptor
Hình 2.28 Cấu trúc các descriptor của thiết bị lớp HID
2.2.2.2 Mô hình hoạt động
Tại mức cao nhất, một descriptor bao gồm hai bảng thông tin được tham chiếu tới là descriptor device và descriptor string. Với thiết bị theo chuẩn giao tiếp USB thì descriptor device sẽ chịu trách nhiệm chỉ ra mã số sản phẩm ( product ID) và các thông tin khác về thiết bị đó. Ví dụ, descriptor device có thể bao gồm các trường thông tin cơ bản sau:
• Các thông tin về lớp (Class)
• Các thông tin về phân lớp (Subclass)
• Các thông tin về nhà sản xuất (Vendor)
• Các thông tin về sản phẩm (Product)
• Các thông tin về phiên bản của sản phẩm (Version) Với các thiết bị lớp HID thì hơi có sự khác biệt ở chỗ :
• Kiểu lớp không được định nghĩa tại mức descriptor device của thiết bị. Mà nó sẽ được định nghĩa bởi descriptor interface.
• Trường phân lớp được sử dụng để nhận dạng các thiết bị khởi động .
Trước đây các descriptor được minh họa bằng các sơ đồ các mục dữ liệu được biểu diễn dưới dạng các bảng thông tin. Mỗi bảng thông tin có thể được sử dụng như một khối dữ liệu.Tuy nhiên hiện tại thay vì làm theo cách đó, các descriptor report sẽ bao gồm nhiều đoạn thông tin. Mỗi đoạn thông tin được gọi là một danh mục (item) như hình minh họa dưới đây.
Hình 2.29 Các descriptor report bao gồm các đoạn thông tin là các danh mục Một danh mục là một đoạn thông tin về thiết bị. Tất cả các danh mục đều có một byte đầu tiên để chứa thẻ danh mục, kiểu danh mục, và kích thước danh mục.
Hình 2.30 Cấu trúc một danh mục
Một danh mục có thể bao gồm các dữ liệu tùy chọn của danh mục đó. Kích thước của phần dữ liệu đó được quyết định bởi kiểu cơ sở của danh mục đó. Có hai kiểu danh mục cơ sở là: các danh mục ngắn và các danh mục dài. Nếu là một danh mục ngắn, thì kích thước phần dữ liệu của nó có thể là 0, 1, 2, hoặc 4 byte. Còn nếu là kiểu danh mục dài, thì giá trị tham số bSize luôn luôn là 2. Dưới đây là ví dụ minh họa các giá trị có thể ở bên trong một byte đầu tiên cho một danh mục dài.
Hình 2.31 Ví dụ về một danh mục dài
2.2.3 Vi điều khiển PIC18F2550 và sơ đồ khối mạch điều khiển
Vi điều khiển PIC18F2550 nằm trong họ PIC18 ,là dòng vi điều khiển PIC có tính thực thi cao của hãng Microchip. Đây là dòng vi điều khiển được sử dụng nhiều trong các ứng dụng hệ thống nhúng công nghiệp. Dưới đây ta sẽ tìm hiểu qua về vi điều khiển PIC18F2550 ,một thành viên tiêu biểu của họ mà tôi đã lựa chọn để sử dụng vì tính thân thiện với các ứng dụng nhỏ của sinh viên .
Thông qua công nghệ Nanowat, hãng Microchip đã đưa vào bên trong thiết bị PIC18F2550 các chức năng đặc trưng mà khiến nó có thể giảm được đáng kể sự tiêu thụ năng lượng trong suốt quá trình hoạt động.Bao gồm như:
• Các chế độ chạy xen kẽ: Bằng cách tạo xung nhịp cho khối điều khiển từ nguồn Timer1 hoặc từ khối tạo dao động ở bên trong , năng lượng tiêu thụ trong suốt quá trình thực thi mã có thể giảm được tới 90%.
• Các chế độ Idle: Khối điều khiển cũng có thể chạy với lõi CPU của nó không hoạt động nhưng các thiết bị ngoại vi vẫn ở trạng thái hoạt động. Trong các trạng thái này,năng lượng tiêu thụ có thể giảm tới mức thấp hơn nữa, ít nhất là bằng 4% mức cần thiết trung bình để hoạt động.
• Chế độ chuyển mạch on-the-fly: Các chế độ quản lý năng lượng được gọi ra bởi người dùng trong suốt quá trình thao tác mã, cho phép họ có thể đưa ra các ý tưởng tiết kiệm năng lượng vào bên trong các thiết kế phần mềm của ứng dụng.
• Các chế độ khóa tiêu thụ ít năng lượng: khiến cho năng lượng cần cho cả bộ Timer1 và bộ Watchdog Timer là rất nhỏ.
Khi nói đến các dòng vi điều khiển hay vi xử lý nói chung, thì không thể không nhắc tới bộ tạo xung dao động cho nó. Với thiết bị PIC18F2550 cùng các anh chị trong họ của nó (như PIC18F2455,PIC18F4550,...) đã được Microchip hỗ trợ lên tới mười hai lựa chọn chế độ dao động khác nhau,vì vậy người dùng sẽ tùy biến hơn rất nhiều trong việc thiết kế phần cứng ứng dụng so với các loại vi điều khiển khác. Nó bao gồm:
• Bốn chế độ dao động tinh thể bằng cách sử dụng các bộ cộng hưởng tinh thể hoặc ceramic.
• Bốn chế độ dao động xung ở bên ngoài.
• Một khối tạo dao động ở bên trong cung cấp một xung tín hiệu có tần số 8 MHz (với độ chính xác là ±2%) và một nguồn INTRC (khoảng 31 kHz),cũng như là một phạm vi sáu tần số xung người dùng có thể lữa chọn,nằm giữa 125 kHz và 4 MHz, trong tổng số tám kiểu tần số xung.
• Một bộ nhân tần số PLL ,có thể bao gồm cả chế độ dao động tinh thể tốc độ cao và các chế độ dao động ở bên ngoài, cho phép tốc độ xung có một phạm vi rộng từ 4 MHz tới 48 MHz.
• Hai xung hoạt động không đồng bộ với nhau, cho phép module USB có thể
chạy được với bộ tạo dao động tần số cao trong khi phần còn lại của vi điều khiển thì được tạo xung dao động từ một bộ tạo dao động công suất thấp ở bên trong.
Ngoài ra thiết bị PIC18F2550 còn được đưa vào một mô đun truyền thông USB đầy đủ phù hợp với các đặc điểm kỹ thuật của chuẩn USB 2.0. Mô đun hỗ trợ cả hai kiểu truyền thông low-speed và full-speed cho tất cả các kiểu dữ liệu mà nó hỗ trợ. Nó cũng được tích hợp thêm một bộ thu-phát và bộ điều chỉnh điện áp 3.3V trên chip của nó và hỗ trợ sử dụng với các bộ thu- phát và bộ điều chỉnh điện áp ở bên ngoài.
Dưới đây là hình dạng đóng gói của thiết bị PIC18F2550 trong thực tế cùng tên các chân của chúng:
Hình 2.32 Hình dạng đóng gói vi điều khiển PIC18F2550
Trong đồ án này , thì vi điều khiển PIC18F2550 có thể nói là thành phần quan trọng nhất. Nó thực hiện hai nhiệm vụ chính là:
• Kết nối với chip RFID EM4095 để nhận kết quả mã số thẻ trả về và lưu trữ trong bộ nhớ ROM ,đồng thời đưa ra các cảnh báo LED để giúp người dùng biết được trạng thái hiện tại của hệ thống.
• Kết nối với máy tính cá nhân qua chuẩn giao tiếp USB2.0 , để thực hiện
truyền dữ liệu mã số thẻ lưu trữ trong bộ nhớ ROM về máy tính, để cho phần mềm quản lý trên máy tính thực hiện khâu tiếp theo.
Hình 2.33 Sơ đồ khối mạch điều khiển chính
2.3 Thiết kế phần mềm quản lý
Như đã nói trong phần giới thiệu chung về một hệ thống RFID ,hệ thống RFID có thể hoạt động mà không cần tới thành phần này.Tuy nhiên, nếu như không sử dụng thành phần này thì hệ thống RFID sẽ trở nên vô giá trị.Vì vậy vẫn có thể nói rằng, thành phần này đóng góp phần quan trọng làm nên thành công của một hệ thống RFID được triển khai. Ở đây ta xây dựng không phải là một hệ thống phần mềm mà chỉ là phần mềm quản lý đơn giản để thử nghiệm. Nó có khả năng quản lý kết nối giữa máy tính và reader thông qua giao tiếp USB, và quản lý cở sở dữ liệu trên máy tính. Dưới đây là chi tiết về phần mềm quản lý tôi đã xây dựng cho đồ án này.
2.3.1 Xây dựng giao diện
Visual Csharp hiện là ngôn ngữ lập trình được sử dụng rộng rãi nhất để viết các ứng dụng chạy trên hệ điều hành windows. Visual Csharp cho phép phát triển nhanh chóng các ứng dụng truyền thống được thiết kế theo mô hình đặc trưng của windows. Với Csharp người thiết kế có thể rất nhanh chóng và dễ dàng tạo ra được một giao diện trực quan thân thiện với người sử dụng. Ngoài ra các cú pháp trong Csharp cũng khá giống với ngôn ngữ hướng đối tượng C++. Nên khi sử dụng qua ngôn ngữ này người lập trình sẽ có cái nhìn tổng quan hơn về lập trình hướng đối tượng, một xu hướng trong nghành công nghệ thông tin.
• Visual Csharp là một ngôn ngữ lập trình có cấu trúc tương đối đơn giản
• Ngôn ngữ này là lý tưởng để phát triển các giao diện đồ họa người dùng
(GUI).
• Các thư viện MSDN trực tuyến cung cấp một tương tác toàn diện và hệ
thống trợ giúp trực tuyến.
• Dễ dàng xây dựng các phần mềm quản lý giao tiếp giữa máy tính và thiết bị ngoại vi thông qua các chuẩn như RS232, USB 2.0 chỉ đơn giản bằng cách gọi các hàm WIN API đã có sẵn trong hệ điều hành windows.
Bây giờ ta sẽ bắt tay đi vào xây dựng giao diện cho phần mềm quản lý của ta. Giao diện của nó chỉ đơn giản gồm bốn Form. Trong đó Form đầu tiên chủ yếu thực hiện nhiệm vụ gọi các hàm WIN API để giao tiếp với reader qua chuẩn giao tiếp USB 2.0 và nhận kết quả trả về là mã số thẻ (32 bit) ,rồi hiển thị mã số đó dưới dạng mã hexa. Lúc đầu , khi thiết bị chưa kết nối tới máy tính qua cổng USB thì giao diện chương trình như dưới đây:
Hình 2.34 Giao diện ứng dụng khi chưa có thiết bị kết nối vào
Khi thiết bị đã được kết nối tới cổng USB thì giao diện của chương trình sẽ có thêm thông tin cấu hình USB trên vi điều khiển PIC18F2550 .Sau đó người dùng thực hiện nhấn lên nút “Đọc thẻ” thì sẽ nhận được kết quả mã thẻ trả về trong một ô text:
Hình 2.35 Giao diện ứng dụng khi thiết bị đã kết nối vào cổng USB
Trên đây là các hình ảnh về Form đầu tiên chỉ thực hiện nhiệm vụ kết nối USB giữa thiết bị và máy tính. Các Form sau đều là các Form thực hiện truy nhập tới cơ sở dữ liệu và thực hiện các tác vụ tới các cơ sở dữ liệu đó. Dưới đây là hình ảnh về Form thực hiện tác vụ cập nhật mới cơ sở dữ liệu bệnh nhân trong ứng dụng:
Còn tiếp theo đây là hình ảnh về Form thực hiện tác vụ lấy thông tin từ cơ sở dữ liệu và hiển thị nó:
Hình 2.37 Form thực hiện tác vụ lấy thông tin từ cơ sở dữ liệu
Bên cạnh sử dụng các Form trong C sharp , tôi cũng sử dụng cả ngôn ngữ lập trình web php để dễ dàng hơn trong việc giao tiếp với cơ sở dữ liệu mysql. Các trang php sẽ được nhúng vào bên trong các Form tương ứng. Dưới đây là hình ảnh trang giới thiệu về hệ thống RFID được nhúng vào Form đầu tiên:
Để cập nhật thông tin về một bệnh nhân thì ta phải tạo ra các trang php với các form cho người dùng điền vào. Các trang này sẽ được nhúng vào các Form thực hiện tác vụ cập nhật cơ sở dữ liệu bệnh nhân ở trên. Dưới đây là giao diện các trang php để thực hiện các nhiệm vụ là cập nhật thông tin cá nhân và thông tin bệnh án:
Hình 2.39 Trang php thực hiện tác vụ cập nhật thông tin cá nhân
Hình 2.40 Trang php thực hiện tác vụ cập nhật thông tin bệnh án
Thông tin về người dùng bao gồm các thông tin về cá nhân người đó và thông tin về bệnh điều trị của người đó. Các thông tin này sẽ được hiển thị thông qua các trang php. Các trang php này sẽ được nhúng vào bên trong các Form thực hiện tác vụ lấy thông tin từ cơ sở dữ liệu mà ta đã trình bày ở trên.Dưới đây là các hình ảnh
Hình 2.41 Trang php thực hiện hiển thị thông tin cá nhân
Hình 2.42 Trang php thực hiện hiển thị thông tin bệnh án
2.3.2 Xây dựng cơ sở dữ liệu
Cơ sở dữ liệu mà ta sẽ lựa chọn sử dụng ở đây là MySQL. MySQL là giải pháp nhanh nhất để sử dụng hệ thống quản lý dữ liệu quan hệ RDMS. MySQL là một phần mềm mã nguồn mở mạnh mẽ được cấp phép của tổ chức GPU,nên người dùng không phải trả phí.Ngoài ra nó khá dễ dàng trong việc cài đặt và sử dụng nên rất phù hợp với các ứng dụng không đòi hỏi tính chuyên nghiệp cao. MySQL bao gồm một MySQL server, và một số chương trình tiện ích giúp quản lý cơ sở dữ liệu
MySQL như workbench giúp người dùng tạo cơ sở dữ liệu với giao diện sử dụng rất thân thiện.
Ta sẽ thiết kế một cơ sở dữ liệu nhỏ có tên là “rfid” bao gồm hai bảng dữ liệu để lưu trữ thông tin cá nhân và thông tin bệnh án ,đó là các bảng có tên là “PersonalDetail” và “MedicalDetail”.Với bảng thông tin cá nhân ta cần phải đề cập đến các mục :
• Tên bệnh nhân (‘firstname’)
• Họ bệnh nhân (‘lastname’)
• Địa chỉ (‘address’)
• Ngày sinh (‘dateofbirth’)
• Số điện thoại (‘phone’)
Còn với bảng thông tin bệnh án ta phải đề cập đến các mục như :
• Bệnh hiện đang điều trị (‘presentcomplaint’)
• Ngày nhập viện (‘date’)
• Tiền sử bệnh gia đình (‘fmhistory’)
• Dữ liệu ảnh trong quá trình điều trị (‘pictureurl’)
Bây giờ ta sẽ đi vào cụ thể ,xây dựng ra cơ sở dữ liệu chỉ ra ở trên bằng các lệnh trong màn hình quản trị DOS:
Chúng ta sẽ bắt đầu MySQL bằng cách gõ vào dòng lệnh dưới đây: