Các máy tính tương thích IBM đều được trang bị 2 cổng nối tiếp (COM1, COM2) và các cổng này được thiết kết hoạt động theo tiêu chuẩn RS232.
Vào/ra nối tiếp là phương pháp kết nối và truyền dữ liệu giữa máy tính và thiết bị ngoại vi trong đó mã chứa thông tin được truyền theo từng bít, bít nọ sau bít kia (truyền tin nối tiếp).
#Truyền tin nối tiếp có 2 dạng:
+ Truyền đồng bộ: Ngoài tín hiệu số phải thêm vào tín hiệu nhịp đồng hồ làm chuẩn. Ưu điểm của phương pháp này là tần số truyền có giá trị bất kỳ và tốc độ truyền chỉ phụ thuộc vào dải tần mà cáp dẫn và bộđiều khiển cho phép.
+ Truyền không đồng bộ: Truyền với tốc độ xác định. Thiết bị nhận và thiết bị phát đều phải làm việc trong cùng 1 tần số. Dữ liệu được đồng bộ từng byte trong 1 khung dữ liệu nằm giữa bit khởi đầu (start bit, 1) và bit kết thúc (stop bit,0).
76
giao diện song song đơn giản thì số baund bằng số bit được truyền đi trong 1 giây.
Quá trình thu phát thông tin nối tiếp qua cổng COM do vi mạch thu phát không đồng bộ vạn năng UART (Universal Asychronous Receiver and Transmitter) đảm nhiệm. Vi mạch này được thiết kế hoạt động tuân theo tiêu chuẩn RS232 dùng để:
+ Biến đổi các dữ liệu song song trong máy tính thành dòng bit nối tiếp ra cổng COM.
+ Biến đổi các bit dữ liệu nối tiếp từ cổng COM thành các từ dữ liệu song song trong máy tính. - Chuẩn truyền tin RS-232
Chuẩn truyền tin RS-232 quy định về phương pháp kết nối và giao diện giữa DTE và DCE (h.55).
DTE (Data Terminal Equipment) thiết bị đầu cuối dữ liệu: là thiết bị phát hoặc nhận dữ liệu
DCE (Data Circuit - terminating Equipment) : thiết bị truyền dữ liệu.
Chuẩn RS232 quy định về:
- Kết nối vật lý: loại đầu nối, số lượng, vị trí và chức năng truyền thông tin của mỗi chân trong đầu nối.
- Mức điện áp tín hiệu. - Tốc độ truyền
+ Kết nối vật lý: sử dụng hai loại đầu nối 9 chân hoặc 25 chân: DB9 và DB25. Kết nối DTE & DCE qua đầu nối DB25 (hình dưới):
77 Ý nghĩa của các tín hiệu, nhìn từ phía DTE
- Các tín hiệu mang dữ liệu TxD: tín hiệu dữ liệu phát RxD: tín hiệu dữ liệu nhận
- Các tín hiệu bắt tay (khi các tín hiệu có mức tích cực).
Từ DTE (từ cổng COM máy vi tính) DTR : DTE báo sẵn sàng làm việc RTS : DTE báo có dữ liệu muốn gửi Đến DTE (vào máy tính)
DSR : DCE báo sẵn sàng làm việc
CTS : DCE sẵn sàng nhận dữ liệu để gửi đi
CD : DCE báo phát hiện được sóng mang của phía bên kia RI : DCE báo nhận được tín hiệu rung chuông
+ Mức tín hiệu: +/- 25V "0" : +3V đến +25V "1" : -3V đến -25V
+ Kích thước cáp nối không quá 20m.
+ Tốc độ truyền: hai bên phát và nhận phải có tốc độ bằng nhau: từ 50 bit/s đến 20000bit/s.
Phương pháp truyền
DTE truyền dữ liệu không đồng bộ về pha nhưng đồng bộ trên từng byte dữ liệu bằng bít
"START". Dữ liệu khi được truyền có khuôn dạng sau:
78 Cấu trúc bố trí chân thực tế của DB9 và DB 25 như sau:
Cổng COM có hai dạng: đầu nối DB25 (25 chân) và đầu nối DB9 (9 chân). Ý nghĩa của các chân được mô tả như sau:
- Thiết bị giao diện vào/ra nối tiếp UART 8250/16450
Thiết bị giao diện vào/ra nối tiếp UART 8250/16450 thực hiện hai chức năng chính. + Chuyển 1 byte dữ liệu (nhận từ CPU) dạng 8 bits song song thành dạng nói tiếp, tạo khung dữ liệu dạng nối tiếp và phát đi tuần tự từng bit cho đến hết byte dữ liệu.
+ Nhận 1 khung dữ liệu dạng nối tiếp, loại bỏ các bít tạo khung (bit START, PARITY, STOP), chuyển thành dạng dữ liệu song song.
+ Tạo và nhận các tín hiệu bắt tay theo chuẩn RS232.
79
Tại sao lại cần Bộđiều hợp EIA? Vì: Mức tín hiệu theo chuẩn RS 232 là: + Logic 0: +3V -> +25V
+ Logic 1: -3V ->-25V
Mọi tín hiệu giữa -3V->+3V đều không có ý nghĩa. Vì tín hiệu bên trong máy tính chỉ có điện thế từ 0V->5V (TTL) hay thấp hơn nên tín hiệu từ máy tính ra giao diện RS 232 và ngược lại phải qua bộ chuyển mức tín hiệu. Vi mạch MAX 232 (Bộđiều hợp EIA) là một bộ chuyển mức tín hiệu hay được dùng nhất. Vi mạch này chỉ cần nguồn nuôi 5V. Bộ bơm điện tích bên trong vi mạch có khả năng tạo tín hiệu +10V và -10V từ 5V. Vi mạch này có 2 bộ chuyển mức tín hiệu cho mỗi chiều.
+ CS (CS0,CS1,-CS2): Tín hiệu chọn UART nối với bus điều khiển của máy tính.
+ A2 – A0: 3 tín hiệu chọn địa chỉ hoặc thanh ghi, xác định thanh ghi nào CPU đang thâm nhập cho đọc hoặc viết.
+ -RD: Tín hiệu đọc dữ liệu từ UART + -WD: tín hiệu ghi dữ liệu vào UART + D7-D0: Nối với bus dữ liệu của máy tính
+ INT: Tín hiệu yêu cầu ngắt ( Đưa yêu cầu ngắt về bộ vi xử lý) + OUT: OUT1: Cho người sử dụng
OUT2: Dùng làm tín hiệu cho phép ngắt chính qua cổng logic
- UART8250 có 10 thanh ghi điều khiển và trạng thái. Các thanh ghi có địa chỉ liên tiếp nhau và có thể được thâm nhập bằng 3 bit địa chỉ. Địa chỉ cơ sở của UART và cũng là của các thanh ghi được lưu trữ ở vùng số liệu của BIOS. Thường tìm các địa chỉ cơ sở và ngắt IRQ như sau:
Cổng Địa chỉ cơ sở Yêu cầu ngắt
COM1 3F8H IRQ4
COM2 2F8H IRQ3
- Nội dung các thanh ghi trong UART như sau:
Địa chỉ nền của hai thiết bị giao diện vào-ra nối tiếp: Thiết bị UART#1 (COM1) : 3F8h
Thiết bị UART#2 (COM2) : 2F8h
Thanh ghi dữ liệu phát THR
80 Địa chỉ: Địa chỉ nền +0, ghi, DLAB = 0
D7 D0
Bit D0 là bit thấp nhất, được phát hiện đầu tiên
Thanh ghi dữ liệu nhận RBR:
RBR là nơi chứa dữ liệu (hoặc ký tự) nhận được. Địa chỉ: Địa chỉ nền +0, đọc, DLAB = 0
D7 D0
DLAB là bit D7 của thanh ghi LCR
# DLAB: bit thâm nhập chốt bộ chia Thanh ghi điều khiển đường truyền LCR
Thanh ghi LCR xác định khuôn dạng dữ liệu phát/ nhận và cho phép truy nhập vào các thanh ghi THR, RBR, IER hoặc BRG.
Địa chỉ: Địa chỉ nền +3, ghi
D7 D0
D1 và D0: Xác định kích thước dữ liệu truyền
D2- xác định số lượng bit stop được tạo và kiểm tra D2 = 0 1 Bit Stop
D2 = 1 2 Bit Stop
D3- cho phép tạo hoặc kiểm tra pariy D3 = 0 không cho phép
D3 = 0 cho phép D4 - chọn kiểu parity
D4 = 0 số lượng lẻ bít "1" được báo hoặc kiểm tra D4 = 1 số lượng chẵn bit "1" được báo hoặc kiểm tra D5 - chọn mức tích cực của bit parity:
Nếu D5 = 1 và D4 = 1 thì mức tích cực của bit parity là 0 (Parity chẵn) Nếu D5 = 1 và D4 = 0 thì mức tích cực của bit parity là 1 (Parity lẻ) D6 - đặt điều khiển nghỉ (BREAK)
Khi D6 = 1 thì SOUT = 0, chú ý D6 = 0! (thường đặt)
D7-DLAB bit: cho phép truy nhập các thanh ghi THR, RBR, IER hoặc BRG D7 = 1 cho phép truy nhập cặp thanh ghi tốc độ truyền BRG.
81 D7 = 0 cho phép truy nhập các thanh ghi THR, RBR và IER.
Thanh ghi xác lập tốc độ truyền 16 bít BRG:
BRG gồm 2 thanh ghi byte cao và byte thấp, xác định hệ số chia của tốc độ truyền. Byte thấp:
Địa chỉ: Địa chỉ nền +0, ghi, DLAB = 1
D7 D0
Byte cao:
Địa chỉ: Địa chỉ nền +1, ghi,DLAB=1
D7 D0
Nội dung thanh ghi BRG:
Thanh ghi điều khiển giao diện với Modem MCR
MCR điều khiển giao diện với Modem và cho phép ngắt yêu cầu ngắt IRQ. Địa chỉ: Địa chỉ nền + 4, ghi
D7 D0 D0 - DTR bit: D0 = 1 đặt DTR tích cực. D0 = 0 đặt DTR không tích cực. D1 - RTS bit: D1 = 1 đặt RTS tích cực. D1 = 0 đặt RTS không tích cực.
D2 - OUT1 bit: ảnh huởng đến đầu ra OUT1. D3 - OUT2 bit: ảnh huởng đến đầu ra OUT2.
D3 = 1 đặt OUT2 = 0, cho phép UART phát tín hiệu IRQ. D3 = 0 không cho phép UART phát tín hiệu IRQ.
82 DTR; RTS & CTS...
D5 = D6 = D7 = 0
Thanh ghi trạng thái đường truyền LSR:
LSR cung cấp thông tin về trạng thái đường truyền tin. Địa chỉ: Địa chỉ nền +5, đọc
D7 D0
D0 - RBR bit:
D0 = 1 báo UART nhận được 1 byte dữ liệu và đã đặt vào thanh ghi RBR. (báo RBR đầy).
D1 - lỗi đè:
D1=1 báo RBR có dữ liệu nhận nhưng chưa được CPU đọc và bị 1 byte mới nhận tiếp theo đè lên.
D2 - Lỗi Parity
D2 = 1 báo lỗi có Parity (lỗi truyền tin). D3 - Lỗi khuôn dạng
D3 = 1 báo khuôn dạng dữ liệu bị nhận sai. D4 - Lỗi Break
D4 = 1 báo đầu nhận dữ liệu có trạng thái logic 0 dài hơn thời gian truyền 1 byte dữ liệu.
D5 - THR bit:
D5 = 1 báo UART sẵn sàng nhận 1 byte dữ liệu mới từ CPU để phát đi (thanh ghi THR rỗng).
D6 - TSR bit:
D6 = 1 thanh boá ghi TSR rỗng. D7 - không dùng.
Thanh ghi trạng thái Modem MSR:
MSR cung cấp thông tin về trạng thái các tín hiệu bắt tay từ Modem. Địa chỉ: Địa chỉ nền +6, đọc
D7 D0
D0 - D3: báo có sự thay đổi trạng thái của tín hiệu bắt tay từ modem. D4 - CTS bit: D4 = 1 báo hiệu CTS có mức tích cực. D5 - DSR bit: D5 = 1 báo hiệu DSR có mức tích cực. D6 - RI bit: D6 = 1 báo hiệu RI có mức tích cực. D7 – CD - bit: D7 = 1 báo hiệu CD có mức tích cực.
Thanh ghi chọn nguồn ngắt IER:
83 Địa chỉ: Địa chỉ nền +1, ghi, DLAB = 0
D7 D0
D0 - liên quan đến báo ngắt của thanh ghi dữ liệu nhận RBR.
D0 = 1 cho phép UART báo ngắt khi nó nhận được dữ liệu (khi RBR đầy) D0 = 0 không cho phép báo ngắt.
D1 - liên quan đến báo ngắt của thanh ghi phát THR.
D1 = 1 cho phép UART báo ngắt khi nó sẵn sàng nhận 1 byte dữ liệu mới từ CPU để phát đi (khi THR rỗng).
D1 = 0 không cho phép.
D2- liên quan đến báo ngắt của thanh ghi LSR.
D2 = 1 cho phép UART báo ngắt khi có thay đổi thông tin về trạng thái truyền tin trong LSR.
D2 = 0 không cho phép.
D3 - liên quan đến báo ngắt của thanh ghi MSR
D3 = 1 cho phép UART báo ngắt khi có thay đổi thông tin về trạng thái Modem trong MSR.
D3 = 0 không cho phép báo ngắt. D4 = D7 = 0
Thanh ghi nhận dạng nguồn ngắt IIR:
Thanh ghi IIR cho phép nhận dạng nguồn gây ngắt và kiểm tra trạng thái báo ngắt. Địa chỉ: Địa chỉ nền +2, đọc D7 D0 D3 ÷ D7 = 0 D0 - trạng thái báo ngắt. D0 = 0 còn nguồn báo ngắt D0 = 1 hết báo ngắt.
D1, D2: tổ hợp giá trị hai bit này chỉ thị nguồn đang báo ngắt