Ta Kim Truyền tin nối tiếpkhông đồng bộ • Thiết bị phát và thiết bị thu hoạt độngđộc lập • Thiết bị phát gửi dữ liệu tại bất cứ thời gian nào • Thiết bị thu luôn sẵn sàng nhận dữ liệu tạ
Trang 1Serial Port Cổng truyền tin nối tiếp
Giảng Viên: TS.Đoàn Thị Hương Giang
ĐT: 037 263 0593 Email: giangdth@epu.edu.vn
•Asynchronous serial can be implemented with data lines only.
–Each device generates its own clock (Baud Rate Generator).
–Handshaking lines can be used to signal status of devices.
•Synchronous serial interfaces will have a separate Clock line.
–Clock is generated by a Master device.
•One bit is transferred for each clock cycle.
–Xung nhịp được tạo ra bởi một thiết bị chủ.
–Một số chuẩn truyền không đồng bộ:
Một bit được truyền trong một chu kỳ xung nhịp.
I2C SPI UART RS232 RS485 CAN USB Ethernet,…
Trang 2Truyền tin nối tiếp đồng bộ
• Yêu cầutín hiệu xung nhịp (clock)để đồng bộ giữa thiết bị thu và
thiết bị phát
• Truyền liên tiếp để giữ xung nhịp đồng bộ
Ta Kim
Truyền tin nối tiếpkhông đồng bộ
• Thiết bị phát và thiết bị thu hoạt độngđộc lập
• Thiết bị phát gửi dữ liệu tại bất cứ thời gian nào
• Thiết bị thu luôn sẵn sàng nhận dữ liệu tại mọi thời điểm
• Không cần có tín hiệu xung nhịp
• …nhưng trong truyền tin, định dạng và tốc độc truyền của dữ liệu phải
được đồng nhất với nhau ở cả bên thu và bên phát
Lưu ý: tốc độ truyền (baudrate): bit/giây- bps( bit per sencond)
So sánh truyền song song với nối tiếp
Yêu cầu nhiều đường truyền hơn
Các bit phải được đồng bộ
Nhanh nhưng chi phí cao
Yêu cầu ít đường truyền hơn
Truyền một bit tại bất cứ lúc nào
Chậm nhưng giảm chi phí hơn so sới truyền song song
Trang 3Frame (khung truyền)
Dữ liệu đi vào ở đầu thu của đường dữ liệu trong truyền dữ liệu nối tiếp là
một dãy các số 0 và 1:
=> Rất khó để hiểu được ý nghĩa của các dữ liệu ấy nếu bên phát và bên thu
không cùng thống nhất về một tập các luật, một thủ tục, về cách dữ liệu được
đóng gói, bao nhiêu bit tạo nên một ký tự và khi nào dữ liệu bắt đầu và kết
thúc,…
- Khung truyền là một yếu tố quan trọng tạo nên sự thành công khi truyền và
nhận Khung truyền bao gồm:
- Các quy định về số bit trong mỗi lần truyền,
- Các bit “báo” như bit Start và bit Stop,
- Các bit kiểm tra như Parity,
- Số lượng các bit trong một data cũng được quy định bởi khung truyền.
Start bit:
Là bit đầu tiên được truyền trong một frame truyền, bit này có chức năng báo
cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới
Start là bit bắt buộc phải có trong khung truyền, và nó là một bit thấp (0).
Stop bits:
Là 01 hoặc nhiều bit báo cho thiết bị nhận rằng một gói dữ liệu đã được gửi
xong
Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền
để đảm bảo tính chính xác của dữ liệu
Stop bits là các bit bắt buộc xuất hiện trong khung truyền, trong 8051 có thể
là 01 hoặc 02 bit, và chúng là các bit cao 1.
Trang 4Định nghĩa các mức logic
• TTL: 5V
• CMOS: 5V, 9V, 12V
Giới thiệu chuẩn giao tiếp I2C
• I2C là tên viết tắt của cụm từ tiếng anh “Inter-Integrated Circuit”.
• Nó là một giao thức giao tiếp được phát triển bởi Philips Semiconductors đểtruyền
dữ liệu giữa một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử
dụng hai đường truyền tín hiệu.
• Do tính đơn giả n của nó nên loại giao thức này được sử dụng rộng rãi cho giao tiếp
giữa vi điều khiển và cảm biến, các thiết bị hiển thị, thiết bị IoT, EEPROMs , v.v …
• Đây là một loại giao thức giao tiếp nối tiếp đồng bộ Các bit dữ liệu được
truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi
một tín hiệu xung nhịp
• I2C là giao thức truyền thông nối tiếp đồng bộ phổ biến hiện nay, được sử
dụng rộng rãi trong việc kết nối nhiều IC với nhau, hay kết nối giữa IC và
các ngoại vi với tốc độ thấp
Trang 5Ví dụ ứng dụng chuẩn I2C
Đặc điểm của chuẩn I2C
• Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết
bị/IC nào trên mạng I2C
• Không cần thỏa thuận trước về tốc độ truyền dữ liệu như trong
giao tiếp UART Vì vậy, tốc độ truyền dữ liệu có thể được điều
chỉnh bất cứ khi nào cần thiết
• Có cơ chế đơn giản để xác thực dữ liệu được truyền
• Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị/IC cụ
thể trên bus I2C
• Các mạng I2C dễ dàng mở rộng Các thiết bị mới có thể được
kết nối đơn giản với hai đường bus chung I2C
Trang 6Bus vật lý I2C
• Bus I2C (dây giao tiếp) chỉ gồm hai dây và được đặt tên là Serial Clock Line (SCL) và Serial Data Line (SDA) Dữ
liệu được truyền đi được gửi qua dây SDA và được đồng bộ với tín hiệu đồng hồ (clock) từ SCL Tất cả các thiết bị
trên mạng I2C được kết nối với cùng đường SCL và SDA như sau:
• Cả hai đường bus I2C (SDA, SCL) đều hoạt động như các bộ lái cực máng hở (open drain) Nó có nghĩa là bất kỳ
thiết bị trên mạng I2C có thể lái SDA và SCL xuống mức thấp, nhưng không thể lái chúng lên mức cao Vì vậy, một
điện trở kéo lên (khoảng 1 kΩ đến 4,7 kΩ) được sử dụng cho mỗi đường bus, để giữ cho chúng ở mức cao (ở điện
áp dương) theo mặc định.
• Hệ thống cực máng hở (open drain) là để không xảy ra hiện tượng ngắn mạch, điều này có thể xảy ra khi một thiết
bị cố gắng kéo đường dây lên cao và một số thiết bị khác cố gắng kéo đường dây xuống thấp.
Đặc điểm đường truyền I2C
• Có rất nhiều thiết bị có thể cùng được kết nối vào một bus I2C,
• Không xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiết bị sẽ được nhận ra bởỉ một địa
chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết nối
• Mỗi thiết bị có thể hoạt động như là thiết bị nhận hoặc truyền dữ liệu hay có thể vừa truyền vừa
nhận
• Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ (master) hay tớ (slave)
Trang 7Thiết bị chủ (Master) và tớ (Slave)
• Các thiết bị kết nối với bus I2C được phân loại hoặc là thiết bị Chủ (Master) hoặc là
thiết bị Tớ (Slave) Ở bất cứ thời điểm nào thì chỉ có duy nhất một thiết bị Master ở
trang thái hoạt động trên bus I2C Nó điều khiển đường tín hiệu đồng hồ SCL và
quyết định hoạt động nào sẽ được thực hiện trên đường dữ liệu SDA.
• Tất cả các thiết bị đáp ứng các hướng dẫn từ thiết bị Master này đều là Slave Để
phân biệt giữa nhiều thiết bị Slave được kết nối với cùng một bus I2C, mỗi thiết bị
Slave được gán một địa chỉ vật lý 7-bit cố định.
• Khi một thiết bị Master muốn truyền dữ liệu đến hoặc nhận dữ liệu từ một thiết bị
Slave, nó xác định địa chỉ thiết bị Slave cụ thể này trên đường SDA và sau đó tiến
hành truyền dữ liệu Vì vậy, giao tiếp có hiệu quả diễn ra giữa thiết bị Master và một
thiết bị Slave cụ thể.
• Tất cả các thiết bị Slave khác không phản hồi trừ khi địa chỉ của chúng được chỉ
định bởi thiết bị Master trên dòng SDA
Chân I2C PIC18F4550
• Các chân PORTB.0 và PORTB.1 được sử dụng cho giao tiếp I2C dưới dạng SDA
Trang 8Chuẩn giao tiếp SPI
• Khối SPI của thiết bị Master sẽ kết nối với khối SPI của thiết bị Slave qua 4 chân tín hiệu:
• MOSI (Master Output/Slave Input) – Master gửi dữ liệu đến Slave.
• MISO (Master Input/Slave Output) – Slave gửi dữ liệu cho Master.
• SCLK (Serial Clock) – xung giữ nhịp Clock.
• SS/CS (Slave Select/Chip Select) – Master lựa chọn Slave để giao tiếp Cụ thể trong trường hợp hệ thống gồm một Master giao tiếp với nhiều Slave, Master điều khiển tín hiệu mức logic trên chân SS/CS của Slave nào xuống mức LOW (mức 0), nghĩa là Master đang giao tiếp với Slave đó.
Chuẩn giao tiếp SPI
• Khối SPI của thiết bị Master sẽ kết nối với khối SPI của thiết bị Slave qua 4 chân tín
hiệu:
• MOSI (Master Output/Slave Input) – Master gửi dữ liệu đến Slave.
• MISO (Master Input/Slave Output) – Slave gửi dữ liệu cho Master.
• SCLK (Serial Clock) – xung giữ nhịp Clock.
• SS/CS (Slave Select/Chip Select) – Master lựa chọn Slave để giao tiếp Cụ thể trong trường hợp hệ
thống gồm một Master giao tiếp với nhiều Slave, Master điều khiển tín hiệu mức logic trên chân
Trang 9Ví dụ kết nối SPI
CƠ CHẾ HOẠT ĐỘNG
• Mỗi thiết bị Master và Slave đều có một thanh ghi dịch 8 bits (Shift Register), một bộ tạo
xung nhịp (Clock Generator).
• Khi Master truyền dữ liệu, Master truyền đi 8 bits dữ liệu vào thanh ghi dịch của nó, sau đó
8 bits dữ liệu được truyền theo đường tín hiệu MOSI sang thiết bị Slave Tương tự khi
Slave truyền dữ liệu, các bits trên thanh ghi dịch của Slave truyền đến Master thông qua
đường tín hiệu MISO.
• Bằng cách này, dữ liệu của hai thanh ghi sẽ được trao đổi với nhau Việc đọc và ghi dữ liệu
vào Slave diễn ra cùng một lúc nên tốc độ trao đổi dữ liệu diễn ra rất nhanh Do đó, giao
thức SPI là một giao thức rất có hiệu quả.
• Mỗi chu kỳ đồng hồ, một bit dữ liệu được truyền theo từng hướng tức là từ Master đến
Slave và từ Slave đến Master Vì vậy, đối với một byte dữ liệu được truyền từ mỗi thiết bị,
nó sẽ mất 8 chu kỳ đồng hồ.
Trang 10Cấu hình SPI
Có hai loại cấu hình trong đó các thiết bị SPI có thể được kết nối
trong một bus SPI Đó là:
• Cấu hình Master và các Slave độc lập (Independent Slave
Configuration)
• Cấu hình Daisy Chain (Daisy Chain Configuration)
Cấu hình Master và các Slave độc lập (Independent Slave
Configuration)
• Master đã dành riêng các đường Slave
Select cho tất cả các Slave và mỗi Slave có
thể được chọn riêng lẻ
• Tất cả tín hiệu đồng hồ của các Slave được
kết nối với chung với SCK của Master.
• Tất cả các chân MOSI của tất cả các SLave
được kết nối với chân MOSI của Master và
tất cả các chân MISO của tất cả các Slave
được kết nối với chân MISO của Master.
Master và các Slave độc lập
Trang 11Cấu hình Daisy Chain (Daisy Chain Configuration)
• Chỉ có một đường Slave Select được kết nối với tất cả các
Slave
• MOSI của Master được kết nối với MOSI của Slave 1 MISO
của Slave 1 được kết nối với MOSI của Slave 2 và v.v MISO
của Slave cuối cùng được kết nối với MISO của Master.
• Giả sử Master truyền đi 3 byte dữ liệu lên bus SPI Byte đầu
tiên được dịch vào Slave 1 Khi byte thứ hai truyền đến 1, byte
đầu tiên sẽ bị đẩy ra khỏi Slave 1 và truyền đến Slave 2
Tương tự, khi byte thứ ba truyền vào Slave 1, byte thứ hai sẽ
bị dịch sang Slave 2 và byte đầu tiên sẽ bị dịch Slave 3.
• Nếu Master muốn đọc lại dữ liệu trong Slave 1, nó phải truyền
lại chuỗi 3 byte dữ liệu (giả) lần nữa Khi đó dữ liệu trong Slave
1 sẽ chuyển sang Slave 2 rồi chuyển sang Slave 3, sau đó về
Master.
• Suốt quá trình xử lý, Master luôn nhận được byte dữ liệu từ
Slave 2 và 3.
• Tuy nhiên, cấu hình Daisy Chain không phải lúc nào cũng áp
dụng được cho tất cả các thiết bị Slave Do đó, ta cần phải
tham khảo datasheet trước khi tiến hành kết nối.
UART là gì?
UART - Universal Asynchronous Receiver/Transmitter
- Là một vi mạch sẵn có trong một vi điều khiển
- Chức năng chính của UART là truyền dữ liệu nối tiếp
- Trong UART, giao tiếp giữa hai thiết bị có thể được thực hiện
theo hai cách là giao tiếp dữ liệu nối tiếp.
Trang 12TS Đoàn Thị Hương Giang 23
Sơ đồ khối của UART
Truyền thông UART
• Chỉ cần hai dây để truyền dữ liệu
• Không cần thiết /bắt buộc phải có tín hiệu CLK
• Gồm một bit chẵn lẻ để cho phép kiểm tra lỗi
• Sắp xếp gói dữ liệu có thể được sửa đổi
• Kích thước khung dữ liệu tối đa là 9 bit
• Tốc độ truyền của UART phải ở mức 10% của nhau
Khung truyền dữ liệu kiểu UART
Trang 13Có 2 stop bits được dùng cho khung truyền.
Dữ liêu cần truyền là thông tin chính mà chúng ta cần gởi và nhận
Data không nhất thiết phải là gói 8 bit- với 8051 ta có thể quy định số lượng bit của data là 08 hoặc 09 bit
Trong truyền thông nối tiếp UART:
Bit có trọng số nhỏ nhất (LSB- Least Significant Bit, bit bên phải) của data sẽ được truyền trước và cuối
cùng là bit có trọng số lớn nhất (MSB- Most Significant Bit, bit bên trái).
Parity là bit dùng để kiểm tra dữ liệu
truyền có đúng không (một cách tương đối)
Parity chẵn (even parity): Parity chẵn
nghĩa là số lượng số “1” trong dữ liệu bao gồm bit parity luôn là số chẵn.
Parity lẻ (odd parity): Tổng số lượng
các số “1” trong parity lẻ luôn là số lẻ.
Parity bit không phải là bit bắt buộc và vì thế
chúng ta có thể loại bit này khỏi khung truyền.
Một số chuẩn tín hiệu
UART (5V)
RS232 (±24V) RS485 (±5V)
Hai dây tín hiệu với mức logic ngược nhau
Trang 14Ví dụ: Nếu tốc độ baudrate được đặt là 19200 thì thời gian dành cho
1 bit truyền là 1/19200 ~ 52.083us.TS Đoàn Thị Hương Giang
27
Vi mạch chuyển đổi mức tín hiệu MAX232
Max232 là vi mạch được xem như một bộ chuyển đổi giữa hai mức tín hiệu
Giúp cho hai thiết bị có mức tín hiệu khác nhau có thể thực hiện giao tiếp được
với nhau
Mức điện áp chuẩn RS232 (±24V)
Mức điện áp chuẩn UART(0-5V)
Trang 15Số chân Mô tả
1 2 3 4 5 6 7 8 9
Data carrier detect (DCD) Received data (RxD) Transmitted data (TxD) Data terminal ready (DTR)
Signal ground (GND) Data set ready (DSR) Request to send (RTS) Clear to send (CTS) Ring indicator (RI)
Tránh tín hiệu mạng dữ liệu
Dữ liệu được nhận
Dữ liệu được gửi Đầu dữ liệu sẵn sàng Đất của tín hiệu
Dữ liệu sẵn sàng Yêu cầu gửi Xoá để gửi Báo chuông
- Chuyển từ mức tín hiệu RS232 sang TTL và ngược lại
- Max232 sử dụng nguồn 5V tương tự như nguồn trong 8051
- Sơ đồ mạch kết nối giữa Max232 với 8051 và cổng truyền tin nối tiếp
Trang 16Vi mạch chuyển đổi max232
• Hai chân 11 và 12 của
MAX232 được nối với 2
chân TX và RX của vi điều
khiển.
Thanh ghi điều khiển chế độ truyền tin nối tiếp trong 8051
Trang 17Thanh ghi SBUF(99H)
• SBUF là thanh ghi 8 bit được dùng riêng cho truyền thông nối tiếp
trong 8051.
• Một byte truyền qua đường TxD thì nó phải được đặt trong thanh
ghi SBUF.
• Khi dữ liệu chuyển từ ngoài vào RxD của 8051 thì dữ liệu cũng
được đặt trên SBUF:
• Khi một byte được ghi vào thanh ghi SBUF nó sẽ được đóng khung với
các bit Start, Stop và được truyền nối tiếp quan chân TxD.
• Khi các bit được nhận nối tiếp từ RxD thì 8051 mở khung đó để loại trừ
các bit Start, Stop để lấy ra một byte từ dữ liệu nhận được và đặt byte đó
vào thanh ghi SBUF.
Thiết lập chế độ truyền bằng thanh ghi SCON
Bit tên Địa chỉ Chức năng
7 SM0 9Fh Xác định chế độ cổng nối tiếp (bit 0)
6 SM1 9Eh Xác định chế độ cổng nối tiếp (bit 1)
5 SM2 9Dh Cho phép truyền thông đa xử lý
4 REN 9Ch Bit cho phép nhận
3 TB8 9Bh Sử dụng trong chế độ 2 và 3
2 RB8 9Ah Sử dụng trong chế độ 2 và 3
1 TI 99h Cờ truyền: được bật sau khi truyền song 1 byte
0 RI 98h Cờ nhận: được bật sau khi nhận đủ 1 byte
Trang 18Serial port in 8051 Cổng truyền tin nối tiếp trong 8051
Lệnh truyền/nhận số liệu trong 8051
- Để truyền dữ liệu lên đường truyền nối tiếp thực hiện bằng cách ghi dữ liệu ra buffer
- Để nhận dữ liệu từ cổng nối tiếp thực hiện đọc dữ liệu từ buffer vào thanh ghi.
Trang 19Các chế độ hoạt động của cổng nối tiếp
• Trước khi sử dụng cổng nối tiếp, SCON được khởi tạo trị với chế độ đúng
Ví dụ:
MOV SCON, #01010010B khởi tạo trị cho cổng nối tiếp ở chế độ 1 (SM0/SM1=0/1), cho phép bộ thu
(REN=1) và đặt cờ ngắt phát (T1=1) để chỉ bộ phát sẵn sàng hoạt động.
SM0 SM1 Chế độ Khung dữ liệu Tốc độ baud
0 0 0 8-bit shift register Oscillator
Thanh ghi PCON
Trang 20Thanh ghi PCON
• Khi 8051 được bật nguồn thì bit SMOD của thanh ghi PCON ở mức thấp (0)
• Khi set = 1 bằng phần mềm nhân đôi được tốc độ baud
• Khi PCON.7=0:
TH1 = 256 – ((Crystal / (12*32)) / Baud) = 256 – ((Crystal / 384) / Baud)
• Khi PCON.7=1 :
TH1 = 256 – ((2*Crystal / (12*32)) / Baud) = 256 – ((Crystal / 192) / Baud)
Đặt tốc độ baud cho cổng nối tiếp
Trang 21Cách tính toán từ tần số thạch anh sang tốc độ
baud rate
• Tốc độ truyền của cổng nối tiếp là có thể lập trình được.
• Sử dụng timer1 để tạo tốc độ baud:
• Từ f của Xtal -> chu kỳ máy T = 12/f
• UART của 8051 chia chu kỳ máy cho 16 hoặc 32 để sử dụng làm