Theo cách truyền này thì các ký tự được truyền riêng rẽ, phân làm từng frame có bit bắt đầu, các bit dữ liệu của ký tự cần truyền, bit chẵn lẻ để kiểm tra lỗi đường truyền, và các bit kế
Trang 1CHƯƠNG 4:
TRUYỀN THÔNG NỐI TIẾP VÀ RS-232 4.1.Giới thiệu :
Khi phát triển các hệ thống thông tin thì nhu cầu trao đổi dữ liệu giữa các thành phần của hệ thống được đặt ra Do các thành phần của hệ thống có thể do các nhà sản xuất khác nhau tạo ra, cho nên cần thiết phải có tiêu chuẩn nào đó cho việc trao đổi dữ liệu
Hiện nay các tiêu chuẩn truyền thông cũng theo hai hướng phân biệt nhau dựa vào cách truyền : song song hay nối tiếp Nhưng do cách truyền song song rất dễ
bị nhiễu tác động nên không thể truyền đi xa được, do đó cũng ít được sử dụng Truyền nối tiếp cũng có 2 loại : đồng bộ hay không đồng bộ Trong cách truyền đồng bộ, dãy ký tự được truyền sẽ kèm theo ký tự đồng bộ là SYN (mã ASCII là 22) Phương thức này cho tốc độ truyền khá cao nhưng do mạch xử lý truyền và nhận (bao gồm mạch thêm ký tự đồng bộ, phát hiện và báo sai… ) khá phức tạp nên chỉ dùng trong các ứng dụng có yêu cầu cao về tốc độ truyền Còn trong các ứng dụng thông thường, nhất là các ứng dụng trong lĩnh vực điều khiển tự động thì không có yêu cầu về tốc độ mà yêu cầu về độ tin cậy nhưng mạch thực hiện đơn giản, rẻ tiền Khi đó, cách truyền không đồng bộ rất phù hợp Theo cách truyền này thì các ký tự được truyền riêng rẽ, phân làm từng frame có bit bắt đầu, các bit dữ liệu của ký tự cần truyền, bit chẵn lẻ (để kiểm tra lỗi đường truyền), và các bit kết thúc.Trong khuôn khổ Luận Văn này, chúng ta sẽ tìm hiểu và sử dụng chuẩn
truyền thông RS-232C (RS :Recommended Standard), là một chuẩn truyền nối
tiếp bất đồng bộ rất phổ biến hiện nay
Hình :Các mức điện áp của chuẩn RS-232
Trang 2Chuẩn RS-232C không phải là một hệ thống bus , nó cho phép dễ dàng tạo ra hình thức liên kết điểm với điểm giữa hai thiết bị cần trao đổi thông tin với nhau chỉ với 3 hoặc 4 dây nối tùy theo phương thức truyền bắt tay hay không
Đặc điểm kỹ thuật của chuẩn RS-232C:
• Ở chuẩn này, một thiết bị (ví dụ như máy tính) gửi dữ liệu qua ngõ TxD cho thiết bị khác và nhận dữ liệu về qua chân RxD Do đó để cho hai thiết bị trao đổi thông tin với nhau được thì TxD của thiết bị 1 phải nối với RxD của thiết bị 2 và ngược lại Còn các chân khác trên cổng COM đóng vai trò hỗ trợ trong quá trình trao đổi thông tin
• Theo chuẩn này, các bit dữ liệu được truyền đi theo kiểu đảo ngược nghĩa là các bit có giá trị “1” sẽ có mức điện áp LOW và bit có giá trị “0” sẽ có mức điện áp HIGH Mức điện áp phát ra trên TxD (hoặc thu trên RxD) thường từ +3V đến +12V (bit 0) hoặc từ –3V đến –12V (bit 1) Dưới đây là hình mô tả 1 dòng dữ liệu điển hình theo chuẩn RS-232C :
+25 +12 +5 +3
0 -3 -5 -12 -25
Không xác định
Không xác định RS232C
RS232C
Logic 0
Logic 1 Điện áp(v)
RS232B RS232B
Trang 3• Trở kháng tải về phía bộ nhận của mạch phải lớn hơn 3000 ohm nhưng phải nhỏ hơn 7000 ohm
• Tốc độ truyền , nhận dữ liệu cực đại là 100kbits/giây
• Các lối vào của bộ nhận phải có điện dung nhỏ hơn 2500pF
• Độ dài của cáp nối giữa máy tính và thiết bị ghép nối qua cổng nối tiếp không thể vượt quá 15 m nếu không sử dụng MODEM
• Việc truyền dữ liệu theo RS-232C là bất đồng bộ, nghĩa là không có xung Clock gửi theo data Ở trạng thái tĩnh trên đường dây dẫn có điện áp –12V Một bit khởi động (start bit) sẽ mở đầu cho việc truyền dữ liệu Tiếp đó là các bit dữ liệu được gửi riêng lẻ từng bit một, trong đó những bit chỉ số thấp (trọng số thấp) sẽ được gửi trước Ở cuối byte dữ liệu sẽ có 1 bit stop (stop bit) sẽ đặt lại trạng thái đường dây là –12V Ở một số định dạng (format) có thể có bit kiểm tra chẵn lẻ (parity bit) để phát hiện sự thừa hay thiếu bit dữ liệu để khắc phục
• Bằng tốc độ baud ta thiết lập tốc độ truyền dữ liệu Các giá trị thông thường là 50,75,110,150,300 ,600 ,1200 ,2400 ,4800 ,9600 ,19200,28800 ,… ,56600 baud Baud tương ứng với số bit truyền được trong 1 giây (trong thời gian có dữ liệu truyền) Nhược điểm chính của truyền nối tiếp là tốc độ truyền bị hạn chế ,mỗi giây chỉ truyền được baud/10 bytes
• Còn một vấn đề nữa là khuôn mẫu truyền dữ liệu cần phải được thiết lập như nhau cả ở bên truyền và bên nhận dữ liệu Các thông số truyền như :tốc độ baud, số bit dữ liệu, số bit dừng , bit chẵn lẻ có thể có thể được thiết lập dễ dàng trên
D0 D1 D2 D3 D4 D5 D6 D7
V
12 -12V
LOW HIGH
/fbaud) 10(T=1
Trang 4máy tính bằng các câu lệnh DOS Hoặc trên Windows cũng có những chương trình có hỗ trợ việc này (Ví dụ như Visual Basic)
Các thuật ngữ có liên quan đến chuẩn truyền thông RS-232C :
• Chu kỳ truyền dữ liệu : tốc độ truyền dữ liệu được tính bằng bit/giây, nhưng
để phân biệt với cách truyền đồng bộ, người ta sử dụng đơn vị baud (tương ứng
bit/giây trong thời gian có dữ liệu truyền) để tưởng nhớ đến nhà phát minh và
khoa học Pháp thế kỷ 19 là J M E Baudot
• Trạng thái đánh dấu(mark) : là khoảng thời gian không có dữ liệu truyền.
Trong suốt thời gian này, thiết bị phát sẽ giữ đường truyền ở mức cao
• Bit bắt đầu(start bit) : một bit thấp cho biết việc truyền dữ liệu sẽ bắt đầu
• Các bit ký tự : là dòng dữ liệu gồm 5, 6, 7, hay 8 bit mã hóa ký tự được
truyền Bit có trọng số thấp nhất (LSB) là bit đầu tiên được truyền
• Bit chẵn lẻ(parity bit) : là một bit tùy chọn (có thể có hay không), được phát
đi sau các bit ký tự dùng để kiểm tra các lỗi truyền dữ liệu Trong chế độ kiểm tra tính chẵn, thiết bị phát sẽ bật 1 hay xóa về 0 bit chẵn lẻ để tính tổng các bit 1 của ký tự được truyền và bit chẵn lẻ là một số chẵn Còn trong chế độ kiểm tra tính lẻ, bit chẵn lẻ thực hiện tính tổng các bit 1 phải là một số lẻ
• Các bit kết thúc(stop bit) : một hay nhiều bit cao được chèn trong dòng truyền
để báo việc kết thúc truyền một ký tự, cũng như cho thiết bị nhận có đủ thời gian
chuẩn bị để sẵn sàng cho việc nhận ký tự kế tiếp
4.2 Cổng nối tiếp RS-232 :
Cổng nối tiếp RS-232 ở máy tính còn được gọi phổ biến là các cổng COM1 ,COM2 Việc truyền nhận dữ liệu qua các cổng COM này tuân theo chuẩn RS232C Bảng sau liệt kê các chân của cổng nối tiếp :
Chân (Loại DB9)
Chân (Loại DB25)
Tên tắt Tên đầy đủ - mô tả
vào
vào
Trang 53 2 TxD Transmit Data – Lối ra
ra
đất
vào
ra
vào
vào
Bảng chức năng các chân :
CTS Tín hiệu này chỉ rằng MODEM đã sẵn sàng trao đổi
dữ liệu
đầu kia của đường dây điện thoại ,ngõ này sẽ tích cực DSR Tín hiệu này cho UART biết rằng MODEM đã sẵn
sàng kết nối DTR Ngược lại với DSR ,tín hiệu này cho MODEM biết
cổng UART đã sẵn sàng kết nối RTS Tín hiệu này cho MODEM biết cổng UART đã sẵn
sàng để trao đổi dữ liệu
Trang 6RI Tích cực khi MODEM phát hiện 1 tín hiệu gọi
(ringing) từ PSTN (Public Switched Telephone
Network) Mặc dù cổng nối tiếp RS-232 có nhiều chân và nhiều chức năng như thế nhưng không phải ứng dụng nào cũng sử dụng hết chúng Thông thường chúng ta chỉ sử dụng chân TxD, RxD và chân GND để truyền và nhận dữ liệu
Các thanh ghi dùng cho cổng nối tiếp của máy tính được trao đổi qua ô nhớ vùng vào/ra Địa chỉ đầu tiên có thể tới được của cổng nối tiếp được gọi là địa chỉ
cơ bản Địa chỉ cơ bản của cổng COM máy tính có thể được tóm tắt dưới đây :
Cổng Địa chỉ cơ bản
Sơ đồ đầu nối cổng COM trên máy tính PC :
a)Loại DB -25 b)Loại DB -9
Chú ý :
Trang 7Trên máy tính thường thì có 2 ổ cắm DB-25, cho nên cần phân biệt ổ cắm nào là của cổng LPT , ổ cắm nào là của cổng nối tiếp để tránh cắm nhầm có thể gây
hư hỏng đáng tiếc Ổ cắm cổng nối tiếp là ổ bao gồm các chấu cắm (male connector) còn ổ cắm cổng song song thì bao gồm từ các ổ cắm (female connector) Ta đã biết mức áp logic ở hai giao diện này là cách biệt nhau rất lớn cho nên phải hết sức cẩn thận khi ghép nối
4.3.Truyền thông giữa hai nút :
RS-232 đã trở thành một chuẩn nhưng không phải nhà sản xuất nào cũng trung thành với nó Một số nhà sản xuất tuân thủ đầy đủ những quy định ghi trong tiêu chuẩn, trong khi một số khác chỉ thực hiện một phần Nguyên nhân là không phải mọi thiết bị đều cần đến toàn bộ khả năng hoạt động của cổng nối tiếp
RS-232 chẳng hạn một MODEM sẽ cần nhiều đường dẫn điều khiển hơn so với khi đấu chuột vào cổng nối tiếp
Tốc độ mà dữ liệu được truyền và tốc độ mà bộ truyền, nhận dữ liệu có thể truyền nhận sẽ quyết định liệu có cần đến kỹ thuật bắt tay hay không
4.3.1.Bắt tay (HandShaking) :
Việc truyền dữ liệu có thể tiến hành theo ba cách : Không có bắt tay, có bắt tay phần cứng hoặc có bắt tay phần mềm Nếu như không sử dụng kỹ thuật bắt tay thì bộ nhận phải có khả năng đọc các ký tự nhận được trước khi bộ truyền gửi ký tự khác Bộ nhận có khả năng đệm ký tự nhận được và cất giữ ký tự này trong một vị trí ô nhớ riêng trước khi nó được đọc Vị trí ô nhớ này được gọi là bộ đệm nhận Đáng chú ý là bộ đệm này chỉ có thể giữ một ký tự đơn Nếu như nó không được làm rỗng trước khi một ký tự khác được nhận thì bất cứ ký tự nào đang có trước đó trong bộ đệm cũng sẽ bị ghi đè lên
Trang 8Một ví dụ về hiện tượng này được minh họa trong hình dưới đây :
Hình :Quá trình truyền và nhận các ký tự
Trong trường hợp này bộ nhận đọc xong xuôi hai ký tự đầu tiên từ bộ đệm nhận , nhưng nó chưa kịp đọc ký tự thứ ba bởi vì ký tự thứ tư được truyền đã ghi đè lên nó trong bộ đệm nhận Nếu như điều kiện này xảy ra thì một vài dạng bắt tay phải được sử dụng để làm dừng bộ truyền gửi các ký tự để cho bộ nhận có đủ thời gian để xử lý các ký tự đã được nhận
Khi sử dụng kỹ thuật bắt tay phần cứng, bộ truyền sẽ hỏi bộ nhận xem nó đã sẵn sàng nhận dữ liệu chưa Nếu như bộ đệm nhận đang trống thì nó sẽ thông báo cho bộ truyền là đã sẵn sàng nhận dữ liệu Cứ mỗi lần dữ liệu được truyền và nạp vào bộ đệm nhận thì bộ truyền lại được thông báo là không được truyền bất cứ ký tự nào nữa cho đến khi bộ đệm nhận đã được đọc xong Các đường dẫn bắt tay phần cứng chính được sử dụng cho mục đích này là :
• CTS (Clear To Send) :Xóa để gửi
• RTS (Ready To Send) :Sẵn sàng để gửi
Bộ đệm truyền Bộ đệm nhận
Bộ truyền Bộ nhận
Bộ nhận đọc từ bộ đệm
Bộ nhận đã không đọc được bộ đệm trước khi ký tự khác đã được nhận
Trang 9• DTR (Data Terminal Ready) :Đầu cuối dữ liệu đã sẵn sàng
• DSR (Data Set Ready) :Dữ liệu đã sẵn sàng
Phần mềm bắt tay kéo theo gửi các ký tự điều khiển đặc biệt Đó bao gồm ký tự điều khiển DC1-DC4
Trang 10Trước khi tiến hành truyền dữ liệu qua cổng RS-232 ta phải hoàn thành xác lập các thông số cho cổng Công việc này có thể tiến hành trong môi trường DOS cũng như trong Windows Windows 9X ,Windows Me của Microsoft cho phép xác
lập thông số cho cổng nối tiếp bằng cách lựa chọn Control Panel => System =>
Device Manager => Ports (COM và LPT) => Port Settings Việc xác lập các
thông số cho cổng truyền thông (IRQ và địa chỉ cổng) có thể thay đổi bằng cách
lựa chọn Control Panel => System => Device Manager => Ports (COM và
LPT) => Resources for IRQ và Address (các tài nguyên dùng cho IRQ và địa
chỉ) Hình dưới đây chỉ ra các tham số và cách thiết lập để làm ví dụ Các giá trị baud điển hình có thể chọn là :110, 300, 600, 1200, 2400, 4800, 9600 và 19200 baud cho các thiết bị dựa trên cơ sở vi mạch 8250 Vi mạch UART loại 16650 tương thích 8250 nhưng có thể đạt đến các tốc độ bằng : 33400, 56600,132000,
230400, 460800 và 921600 baud Đáng chú ý là việc điều khiển thông lượng dòng dữ liệu có thể tiến hành hoặc bằng cách thiết lập sự bắt tay bằng phần mềm (X-ON/XOFF) , bắt tay bằng phần cứng hoặc không có bắt tay
SVTH Hoàng Trung Hiếu & Nguyễn Trung Dũng : trang 102
Trang 11Bit chẵn, lẻ có thể được đặt là: Không, lẻ, chẵn, dấu(mark) hoặc dấu trống(space) Một dấu (mark) trong tùy chọn chẵn lẻ đặt bit chẵn lẻ thành ‘1’ và một bit trống đặt bit này thành ‘0’
Trong hình trên thì cổng nối tiếp COM1 được đặt :ở 9600 baud ,8 bit dữ liệu , không có chẵn lẻ , 1 bit dừng và có sự bắt tay phần mềm
Hình :Thay đổi các thông số thiết lập trạng thái cổng
4.3.3.Truyền thông đơn giản không có bắt tay :
Trong cách truyền thông này, người ta giả thiết rằng bộ đệm nhận có thể đọc dữ liệu nhận được từ bộ đệm nhận trước khi ký tự khác được nhận Dữ liệu được gửi từ vị trí kết nối với chân TxD của bộ truyền và được nhận ở vị trí kết nối với chân RxD của bộ nhận Khi DTE (chẳng hạn như một máy tính) được nối với DTE khác thì TxD của DTE này sẽ được nối với RxD của DTE kia và ngược lại Dưới đây chỉ ra hai trường hợp kết nối không có bắt tay phần cứng giữa hai nút :DB9 – DB9 và DB9 – DB25
SVTH Hoàng Trung Hiếu & Nguyễn Trung Dũng : trang 103
Trang 12Hình :Kết nối ở cổng RS232 không có phần cứng bắt tay
Có hai ký tự mã ASCII cho phép bắt đầu và làm dừng các cuộc truyền qua cổng nối tiếp ,đó là X-ON (^S ,CTRL – S hoặc mã ASCII 11) và X – OFF(^Q ,CTRL – Q hoặc mã ASCII 13)
Khi bộ truyền nhận được ký tự X-OFF nó làm ngừng quá trình truyền thông cho đến khi ký tự X-ON được gửi Kiểu bắt tay này thường được sử dụng khi bộ truyền và bộ nhận có thể xử lý dữ liệu tương đối nhanh chóng Thông thường bộ nhận cũng có một bộ đệm lớn dùng cho các ký tự gửi tới Khi bộ đệm này
SVTH Hoàng Trung Hiếu & Nguyễn Trung Dũng : trang 104
Hình : Bắt tay phần mềm sử dụng X-ON và X-OFF
X-OFF X-ON
Truyền dữ liệu
Truyền dữ liệu
.Bắt tay bằng phần mềm
4.3.4
TD
RD RTS CTS DTR DSR GND
TD
RD RTS CTS DTR DSR GND
Trang 13được gửi tới bộ truyền cho phép tiếp tục truyền
4.3.5.Bắt tay bằng phần cứng :
Bắt tay phần cứng làm dừng các ký tự trong bộ đệm nhận để khỏi bị ghi đè lên Các đường dẫn được sử dụng đều được kích hoạt ở mức cao Hình dưới đây sẽ cho thấy dữ liệu được truyền giữa bộ truyền và bộ nhận diễn ra như thế nào
truyền dữ liệu
TD
RD RTS CTS DTR DSR GND
TD
RD RTS CTS DTR DSR GND
Hình : Ghép nối để truyền thông có bắt tay qua cổng RS232
SVTH Hoàng Trung Hiếu & Nguyễn Trung Dũng : trang 105
RTS Nút
Truyề
n
CTS CTS TD
Sẵn sàng nhận data ?
CTS RTS RTS
RD Nút nhận
Không (No)
Có (yes)
Truyền Data