- Su dung 8sw gat cong tac bit on Su dung key pad gat cong tac bit off
PS/2 giao tiếp Keyboard
Là một ma trận nút nhấn được giám sát bởi 1 vi xử lý được gọi là bộ mã hóa phím. Vi xử lý này có thể khác nhau trên mỗi loại bàn phím nhưng chúng có cùng 1 chức năng là giám sát sự nhấn và nhả của phím sau đó gửi sữ liệu tương ứng đến hot.
• Hoạt động của bàn phím :
Bộ vi xử của bàn phím sẽ dành phần lớn thời gian để quét và giám sát ma trận phím. Nếu nó thấy 1 phím được nhấn, nhả hay giữ bàn phím sẽ gửi 1 gói thông tin tương ứng gọi là scancode đến hot. Một scancode có thể là make code hoặc break code.
• Make code được gửi khi 1 phím được nhấn hoặc giữ
• Break code được gửi khi phím được nhả
Mỗi phím được gán 1 Make code và Break code riêng nhờ vậy hot có thể dựa vào đó để nhận biết được phím nào dược nhấn. Tập các Make code và Break code người ta gọi là tập Scancode (Scancode set). Có 3 chuẩn dành cho tập Scancode gọi là scancode set1, scancode set2 và scancode set 3, thông thường bàn phím sử dụng scancode set 2.
Hình 1-19 Keyboard scancode set 2
Khi 1 phím được nhấn 1 make code được gửi tới hot. Make code này tượng trưng cho phím chứ không biểu thị cho ký tự được in trên đó, điều này có nghĩa là make code không phải là mã ASCII.
• Khi nhấn 1 phím : giả sử chúng ta nhấn phím a, make code của a là 1Ch được tạo, break code F0h,1Ch được tạo. Như vậy scancode của a là : 1Ch,F0h,1Ch sẽ tuần tự được gửi tới host.
• Khi nhấn nhiều phím : gửi ký tự ‘A’
o Nhấn phím Shift trái : make code 12h được tạo.
o Nhấn phím a : make code 1Ch được tạo
o Nhả phím a : break code a được tạo F0h,1Ch
o Nhả Shift : break code Shift dược tạo F0h,12h
Như vậy 1 chuỗi dữ liệu sẽ lần lượt được gửi tới hot sẽ là 12h, 1Ch, F0h, 1Ch, F0h, 12h.
• Nhấn và giữ 1 phím : khi nhấn và giữ 1 phím thì phím đó trở thành
typematic (repeat). Khi phím ở chế độ typematic thì make code của phím đó sẽ được gửi liên tục cho tới khi phím đó được nhả hoặc có 1 phím khác được nhấn.
• Trạng thái bus (chân tín hiệu) của giao thức PS/2
Hình 1-20 Trạng thái bus giao thức PS/2
Thuật ngữ sử dụng
• Bus : tổ hợp hai đường data và Clock
• Device : bàn phím hoặc chuột
• Host : chỉ các thiết bị có khả năng điều khiển như PC hay vi điều khiển.
• Cấu trúc 1 khung truyền :
o 1 start bit (luôn có mức logic “0”).
o 8 bit dữ liệu (được truyền LSB đến MSB).
o 1 bit parity (“1” nếu số bit “1” trong 8 bit data là chắn, “0” nếu là
lẻ).
o 1 stop bit (luôn bằng 1).
Tần số hoạt động tối đa cho giao thức này là 33Khz, thông thường sử 10Khz -20Khz.
Dữ liệu được truyền từ device đến host được lấy mấy ở cạnh xuống (falling edge), từ host đến device tới host thì được lấy mẫu tại canh lên (rising edge).
• Thông tin trên đường truyền
o Device đến Host : nếu muốn truyền dữ liệu device phải giám sát
trạng thái bus để biết được bus có đang ở trạng thái IDLE hay không. Nếu đường clock ở mức thấp tức host đang cấm truyền dữ liệu, lúc này device phải đệm lại các dữ liệu cần được gửi cho đến khi host trả lại đường clock. Và đường clock phải được duy trì ở trạng thái cao it nhất 50us thì device mới truyền dữ liệu.
Hình 1-21 Khung truyền dữ liệu từ device tới host
Dữ liệu được device dịch trên đường data theo sườn lên của clock và phải được host đọc tại cạnh xuống của clock.
Trong quá trình truyền host có khả năng cấm truyền bằng cách kéo đường clock xuống mức “0” trong ít nhất 100us. Nếu device đang truyền dở thông tin mà gặp phải trạng thái cấm, nó sẽ ngừng gửi và lưu gói thông tin lại vào bộ nhớ đệm cho đến khi host cho phép, sau khi được cho phép nó sẽ gửi lại toàn bộ gói thông tin từ đầu (gói thông tin có thể là make code hoặc break code).
o Host tới Device : device luôn là đối tượng tạo clock, nếu host
muốn truyền dữ liệu thì nó phải yêu cầu device phát clock.
o Lái bus vào trạng thái cấm thông tin
o Chuyển qua trạng thái request to send
Device sẽ kiểm tra trạng thái này trong khoảng 10ms, sau đó bắt đầu phát clock. Host sẽ dịch dữ liệu tại sườn xuống của clock và được device đọc vào tại sườn lên.
Hình 1-22 Khung truyền dữ liệu từ host đến device
Sau khi bit stop được nhận device sẽ trả về 1 ACK cho byte vừa nhận bằng cách kéo đường data xuống mức thấp, đồng thời tạo thêm 1 xung clock thứ 12 để host có thể nhận được bit này. Nếu sau khi bit ACK này được gửi đi mà host không kéo đường data lên trạng thái cao thì device tiếp tục phát clock, device xem đây là trạng thái lỗi.