Chapter8 TruyenDuLieu GT V2q tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh vực...
Trang 1CHƯƠNG 8: TRUYỀN DỮ LIỆU
Nội dung của chương này sẽ trình bày về truyền dữ liệu theo hai kiểu: nối tiếp và song song Trong đó, truyền dữ liệu nối tiếp theo hai kiểu đồng bộ và bất đồng bộ phổ biến trong các thiết kế ứng dụng dùng vi điều khiển Đối với PIC18F, nó có một cổng để hỗ trợ truyền
dữ liệu song song
Mục tiêu chính của chương này cho người tham khảo:
Hiểu rõ về cơ chế truyền dữ liệu nối tiếp
Hiểu rõ về cơ chế truyền dữ liệu song song ở PORTD của VĐK 18F4550
Nắm vững chuẩn RS232 trong truyền dữ liệu nối tiếp
Biết ứng dụng chọn linh kiện chuyên phù hợp dùng trong thiết kế
Có khả năng thiết kế phần cứng và lập trình ứng dụng theo yêu cầu trong truyền dữ liệu nối tiếp giữa VĐK với VĐK, giữa VĐK với máy tính
Trong chương này sẽ trình bày vấn đề giao tiếp để truyền dữ liệu giữa hai VĐK với nhau, hoặc giữa VĐK với máy tính hay một thiết bị nào đó có các cổng giao tiếp như USART, SPI, SPP, I2C, USB Các kiểu truyền dữ liệu có thể là truyền nối tiếp hay song song và đồng
bộ hay không đồng bộ
Ngày nay, trên máy vi tính có rất nhiều cổng USB, nhưng khoảng cách truyền dữ liệu
qua cổng USB ngắn hơn truyền qua cổng COM (kiểu giao tiếp USART) và hơn nữa nhiều
thiết bị kết nối với máy tính không có cổng USB vật lý Vì vậy, để truyền được dữ liệu giữa cổng USB đến cổng COM, người ta thực hiện một sự chuyển đổi giữa USB sang COM và ngược lại, được gọi là COM ảo
Ngoài ra, còn có các kiểu truyền dữ liệu bằng bus CAN hoặc LIN Đây là hai kiểu giao tiếp truyền dữ liệu nâng cao sẽ không được trình bày chương này
Bảng 8.1: so sánh các kiểu giao tiếp phổ biến trên máy tính
Số thiết bị kết nối (tối đa)
Khoảng cách truyền (tối đa, ft)
Tốc độ truyền (tối đa, bps)
Sử dụng điển hình
RS-232
(TIA-232)
Nối tiếp bất đồng bộ
nhanh hơn với
hệ thống mạch phần cứng)
Modem, truyền dữ liệu
cơ bản RS-485
(TIA-485)
Nối tiếp bất đồng bộ 32 (nâng lên 256 với phần
cứng cụ thể)
điều khiển và thu nhận dữ liệu
mạng máy tính IEEE-1394b
(FireWire 800)
Trang 2Cổng máy in
song song
bộ
trong VĐK
đồng bộ 127 16 (lên tới 98 ft với 5 hub)
Truyền nối tiếp
Hình 8.1: mô hình truyền dữ liệu nối tiếp và song song
Trong truyền nối tiếp, byte dữ liệu phải được chuyển đổi thành các bit nối tiếp bằng cách
sử dụng một thanh ghi để ghi dịch dữ liệu vào song song – ra nối tiếp Sau đó nó mới được truyền trên đường dữ liệu đơn Như vậy, phía đầu nhận dữ liệu phải có một thanh ghi để ghi dịch dữ liệu vào nối tiếp – ra song song để nhận dữ liệu và “đóng gói” chúng thành 1 byte Truyền dữ liệu nối tiếp dùng hai phương pháp là đồng bộ và bất đồng bộ Phương pháp
đồng bộ truyền một khối dữ liệu (các ký tự) cùng một thời điểm, trong khi phương pháp bất
đồng bộ truyền một byte đơn tại một thời điểm Các hãng sản xuất linh kiện điện tử đã chế tạo ra các vi mạch chuyên dùng để hỗ trợ truyền bất đồng bộ là UART và đồng bộ/bất đồng
bộ là USART PIC18 được xây dựng trên USART
Trang 3Hình 8.2: mô hình các kiểu truyền dữ liệu nối tiếp
Trong truyền dữ liệu, nếu dữ liệu có thể được gửi đi và nhận thì sử dụng truyền song
công (duplex) Kiểu song công có thể là bán song công (half duplex) hay toàn công (full
duplex), tuỳ thuộc vào dữ liệu gửi và nhận có đồng thời hay không Hình 8.2 mô tả kiểu truyền
nối tiếp đơn công (simplex) và song công
8.1.2 Truyền nối tiếp bất đồng bộ
Dữ liệu đến đầu thu chứa đựng các bit 0 và 1, thật khó để phía đầu thu để nhận biết được
dữ liệu này trừ khi giữa đầu phát và đầu thu thống nhất một tập hợp các quy luật mà nó được gọi là giao thức Giao thức là cách thức mà dữ liệu được đóng gói, có bao nhiêu bit liên tục cho một ký tự và khi nào bắt đầu và dừng
Các bit start và stop (bit bắt đầu và dừng)
Truyền dữ liệu nối tiếp bất đồng bộ được sử dụng phổ biến cho việc truyền định hướng
ký tự Mỗi ký tự được đặt giữa bit start và stop, đây được gọi là thiết lập khung dữ liệu Trong khung dữ liệu, bit start luôn luôn là 1 bit nhưng bit stop có thể là 1 hoặc 2 bit Bit start luôn
luôn là 0 (mức thấp) và bit stop là 1 (mức cao) Hình 8.3 mô tả cấu trúc một dữ liệu để gửi đi
và hình 8.4 để ví dụ gửi đi ký tự “A” có mã ASCII là 0b01000001 và chỉ sử dụng 1 bit stop
Stop bit 2
Stop
Start bit
Gửi đi đầu tiên
Gửi đi cuối cùng
Hình 8.3: cấu trúc một khung dữ liệu để gửi đi
Trang 4Hình 8.4: gửi đi ký tự “A”
Trong hình 8.4, khi không có sự gửi đi dữ liệu, tín hiệu ở mức cao để đánh dấu (mark)
chờ sẵn sàng để bắt đầu gửi dữ liệu “Space” là khoảch cách truyền giữa các ký tự liên tiếp Đối với bảng mã ASCII chuẩn thì các ký tự có độ dài là 7-bit, và ASCII mở rộng có độ dài
ký tự là 8-bit
Trong một vài hệ thống, bit parity (bit kiểm tra chẵn lẻ) của một byte ký tự được đính
kèm trong khung dữ liệu hợp lệ để duy trì sự toàn vẹn của dữ liệu Điều này có nghĩa là đối
với mỗi ký tự (7-bit hoặc 8-bit) chúng ta có một bit parity đơn thêm vào Bit parity có thể là
lẻ hoặc chẵn Trong trường hợp bit parity lẻ thì tổng số các bit 1 trong các bit dữ liệu, bao gồm cả bit parity, sẽ là lẻ và bit parity lẻ bằng 1 Tương tự, bit parity chẵn thì tổng số các bit
1, bao gồm cả bit parity, sẽ là chẵn Ví dụ, mã ASCII của “A” là 0b0100 0001, sẽ có bit parity chẵn bằng 0 Các vi mạch UART cho phép lập trình chọn parity chẵn, lẻ hoặc không có bit kiểm tra parity
Tốc độ truyền dữ liệu
Tốc độ truyền dữ liệu liệu nối tiếp có đơn vị là bps Mở rộng hơn thuật ngữ được sử dụng cho bps là baud Tuy nhiên, tốc độ baud và bps thì không hoàn toàn tương đương Nguyên do là tốc độ baud là thuật ngữ sử dụng trong modem và nó được định nghĩa là số tín hiệu thay đổi trong một giây Trong các modem, đôi khi một sự thay đổi đơn giản của tín hiệu gửi đi một vài bit của dữ liệu Trong quyển sách này sẽ xem bps và baud như nhau
Tốc độ truyền dữ liệu nối tiếp tuỳ thuộc vào khả năng của cổng truyền trên máy tính, có thể là 100 bps, 1200 bps, 2400 bps, 4800 bps, 9600 bps, …, 56 kbps Khả năng truyền dữ liệu nối tiếp bất đồng bộ có thể lên tới 100 kbps
Các chuẩn RS232
Để cho phép sự tương thích giữa các thiết bị truyển dữ liệu mà nó được sản xuất bởi
nhiều nhà sản xuất khác nhau, một chuẩn giao tiếp được gọi là RS232 được thiết lập bởi hiệp
hội công nghiệp điện tử (EIA) vào năm 1960 Vào năm 1963, nó được bổ sung và được gọi là
RS232A RS232B và RS232C được lưu hành vào năm 1965 và 1969 Ngày nay, RS232 là chuẩn giao tiếp xuất/nhập nối tiếp được sử dụng rộng rãi nhất và chuẩn này cũng được sử dụng trên các máy vi tính
Trong chuẩn RS232, bit 1 được biểu diễn bằng điện thế có giá trị từ -3 V đến -25 V,
và bit 0 có giá trị điện thế từ +3 V đến +25 V Vì nguyên do này, để kết nối bất kỳ RS232
nào đến hệ thống vi điều khiển chúng ta phải sử dụng bộ chuyển đổi điện thế như là MAX232
để chuyển đổi các mức logic TTL sang mức điện thế RS232 và ngược lại
Trang 5Các chân RS232
RS232 có kiểu đầu kết nối là DB-25 và DB-9 có hình dạng như hình 8.5 và 8.6 DB-25
và DB-9 có hai kiểu đầm cắm là loại đầu kết nối đực có ký hiệu là DB-25P và DB-9P, đầu kết nối cái là DB-25S và DB-9S Ý nghĩa từng chân của DB-25 và DB-9 được giải thích trong bảng 8.2 và 8.3 Tuy nhiên, tất cả các chân trên DB-25 và DB-9 không phải lúc nào cũng sử dụng hết mà tuỳ theo kết nối của hệ thống cụ thể
Hình 8.5: hình chiếu bề mặt của DB-25
Hình 8.6: hình chiếu bề mặt và hai kiểu đầu cắm của DB-9
Bảng 8.2: ký hiệu các chân trên DB-25
Thứ
tự
chân
Ký hiệu
2 TxD Transmitted data Chân gửi dữ liệu đi
4 𝑅𝑇𝑆̅̅̅̅̅ Request to send Yêu cầu gửi dữ liệu
5 𝐶𝑇𝑆̅̅̅̅̅ Clear to send Thực hiện xoá để gửi dữ liệu
6 𝐷𝑆𝑅̅̅̅̅̅̅ Data set ready Xác nhận dữ liệu sẵn sàng
8 𝐷𝐶𝐷̅̅̅̅̅̅ Data carrier detect Phát hiện sóng mang dữ liệu
9-10 Reserved for data testing Dự trữ để kiểm tra dữ liệu
12 Secondary data carrier detect Phát hiện sóng mang dữ liệu lần
hai
Trang 613 Secondary clear to send Thực hiện xoá lần hai để gửi dữ
liệu
14 Secondary transmitted data Dữ liệu được gửi lần 2
15 Transmit signal element
timing
Phát đi tín hiệu tinh chỉnh thời gian
16 Secondary received data Dữ liệu nhận được lần 2
17 Receive signal element timing Nhận tín hiệu tinh chỉnh thời
gian
19 Secondary request to send Xác nhận yêu cầu lần 2 để gửi
dữ liệu
20 𝐷𝑇𝑅̅̅̅̅̅̅ Data terminal ready Báo thiết bị sẵn sàng
21 Signal quality detector Phát hiện chất lượng tín hiệu
22 RI Ring indicator Chỉ báo có tín hiệu chuông
23 Data signal rate select Chọn tốc độ dữ liệu
24 Transmit signal element
timing
Phát đi tín hiệu tinh chỉnh thời gian
Bảng 8.3: ký hiệu các chân trên DB-9
Thứ tự chân Ký hiệu chân
Phân loại hệ thống truyền dữ liệu
Thuật ngữ hiện nay để phân biệt thiết bị truyền dữ liệu là DTE (Data Terminal
Equipment – thiết bị đầu cuối dữ liệu) và DCE (Data Communication Equipment – thiết bị
truyền dữ liệu) DTE là các đầu cuối và máy tính để gửi và nhận dữ liệu Trong khi đó DCE
được xem là thiết bị truyền, như là các modem mà nó có nhiệm vụ cho việc truyền dữ liệu
Giải thích các tín hiệu bắt tay RS232
Để bảo đảm việc truyền dữ liện nhanh và tin cậy giữa hai thiết bị, sự truyền dữ liệu phải được phối hợp tốt Chẳng hạn như ở máy in, nó không có đủ bộ nhớ để nhận hết dữ liệu, vì vậy phải có cách thức báo cho thiết bị gửi để dừng việc gửi dữ liệu Có nhiều chân của RS232 được sử dụng cho tín hiệu bắt tay Sự mô tả được trình bày bên dưới chỉ để tham khảo và hiểu thêm, vì chúng không được hỗ trợ cho bộ UART của PIC18
Trang 7(1) DTR
Khi một thiết bị đầu cuối (hoặc cổng COM máy tính) được mở, nó gửi đi tín hiệu DTR
để chỉ báo rằng nó sẵn sàng cho việc truyền dữ liệu Nếu có vấn đề lỗi với cổng COM, tín hiệu này sẽ không được kích hoạt Tín hiệu DTR tích cực mức thấp để báo cho modem rằng máy tính đang sẵn sàng Đây là một chân ra của DTE và là ngõ vào của modem
(2) DSR
Khi DCE (modem) được mở và sau thời tự kiểm tra hoạt động, nó sẽ xác nhận DSR để thông báo rằng nó sẵn sàng cho truyền dữ liệu Đây là một ngõ ra từ modem (DCE) và
là ngõ vào đối với máy tính (DTE) Nó là tín hiệu tích cực mức thấp Nếu có một nguyên
nhân làm modem không thể kết nối được đường dây điện thoại, tín hiệu này sẽ không được tích cực và thông báo cho máy tính (hay thiết bị đầu cuối) rằng nó không chấp nhận hoặc không thể gửi dữ liệu
(3) RTS
Khi DTE (như máy tính) có một byte để gửi, nó xác nhận RTS tới modem rằng nó một
byte để gửi RTS là ngõ ra tích cực mức thấp từ DTE và là ngõ vào đối với modem
(4) CTS
Đáp lại tín hiệu RTS, khi modem có đủ bộ nhớ để lưu trữ dữ liệu để nhận, nó sẽ gửi đi
tín hiệu CTS tới DTE (máy tính) để chỉ báo nó có thể nhận dữ liệu bây giờ CTS là tín
hiệu vào cho DTE, DTE sử dụng để bắt đầu truyền dữ liệu
(5) DCD
Modem xác nhận tín hiệu DCD để báo cho DTE (máy tính) là có một sóng mang hợp lệ
đã được phát hiện và sự giao tiếp đó giữa nó và modem khác được thiết lập DCD là ngõ
ra của modem và là ngõ vào của DTE
(6) RI
RI là ngõ ra của modem (DCE) và ngõ vào của máy tính (DTE) chỉ báo rằng có tín hiệu
chuông gọi đến từ đường dây điện thoại
Từ các diễn giải trên, sự truyền dữ liệu giữa PC và modem có thể được tóm tắt: trong khi các tín hiệu DTR và DSR được sử dụng bởi PC và modem theo trình tự, để thông báo rằng chúng sẵn sàng hoạt động tốt, đó là RTS và CTS mà chúng điều khiển thất sự lưu lượng của dữ liệu Khi PC muốn gửi dữ liệu nó xác nhận RTS và chờ đáp lại từ modem, nếu modem
có bộ nhớ sẵn sàng thì modem sẽ gửi trả lại CTS Nếu modem có bộ nhớ không đủ, modem không kích hoạt CTS, PC sẽ huỷ xác nhận DTR và sẽ cố gắng thực hiện lại
Trang 8Cổng COM trên máy tính
Các máy tính tương thích IBM dựa vào họ vi xử lý x86 (8086, 286, 386, 486 và tất cả
dòng Pentium) được trang bị hai cổng COM theo chuẩn RS232, gồm một cổng DB-25 và một
DB-9 Các cổng COM này được đánh số thứ tự là COM 1 và COM 2 Hiện nay (năm 2014),
các máy tính để bàn hay xách tay không còn được trang bị sẵn các cổng COM nữa, thay vào
đó là có nhiều cổng USB Chính vì vậy, để vẫn kết nối được máy tính với thiết bị vẫn sử dụng RS232, buộc phải sử dụng một bộ chuyển đổi là COM-to-USB thì mới truyền dữ liệu giữa một phía là cổng USB và đầu kia là COM được Sự chuyển đổi cổng USB trên máy tính
“thành” cổng COM, ta gọi cổng USB này đang hoạt động dưới dạng COM ảo
Đấu nối giữa hai thiết bị bằng RS232
Sự kết nối đơn giản nhất giữa hai DTE được thực hiện theo hình 8.7, chỉ cần sử dụng 3 chân là TxD, RxD và GND
Hình 8.7: đấu nối giữa hai DTE
Hình 8.8 chỉ dẫn cách đấu nối giữa DTE và DCE trong ứng dụng truyền dữ liệu qua mạng điện thoại công cộng
Hình 8.8: đấu nối giữa DTE và DCE của hệ thống kết nối mạng điện thoại công cộng
8.1.3 Kết nối PIC18 tới RS232
PIC 18F4550 có hai chân hỗ trợ giao tiếp USART là chân TX (chân số 25) và chân RX (chân số 26) Hai chân này tương thích với mức logic TTL, vì thế phải sử dụng vi mạch như
MAX232 để chuyển đổi mức logic cho tương thích với chuẩn RS232
Trang 9Vi mạch MAX232 của hãng Maxim
IC MAX232 có đến hai bộ thu phát RS232, để hiểu kỹ hơn chúng ta có thể xem đặc
trưng kỹ thuật của nó trên trang web của hãng là www.maxim-ic.com
Hình 8.9: bố trí chân ra của MAX232
Hình 8.10: hướng dẫn nối mạch giữa MAX232, PIC18 và DB-9
Lưu ý trên hình 8.10, chân RX trên MAX232 là hai chân R1OUT và R2OUT, chân TX là T1OUT và T2OUT Các tụ trong mạch gồm C1, C2, C3, C4 có giá trị trong khoảng từ 1 µF đến
22 µF và phải gắn đúng cực tính như hình 8.10
Vi mạch MAX233 của hãng Maxim
IC MAX233 cũng hoạt động giống MAX232 nhưng không cần dùng thêm các tụ trong mạch
Trang 10Hình 8.11: hướng dẫn nối mạch giữa MAX233, PIC18 và DB-9
8.1.4 EUSART của PIC 18F4550
Khối USART của PIC 18F4550 được gọi là USART tăng cường (EUSART) vì nó có
thêm những đặc trưng: phát hiện tự động tốc độ baud và đo giá trị tốc độ baud, đánh thức tự động nhờ vào sự tiếp nhận gián đoạn Sync và truyền ký tự gián đoạn 12-bit Khối USART của PIC 18F4550 có thể hoạt động với 3 chế độ khác nhau:
Bất đồng bộ (song công) với:
- Đánh thức tự động nhờ vào sự tiếp nhận ký tự
- Đo giá trị tốc độ baud tự động
- Truyền ký tự gián đoạn 12-bit
Đồng bộ - chủ (bán song công) có thể chọn cực tính xung clock
Đồng bộ - tớ (bán song công) có thể chọn cực tính xung clock
Khối USART của PIC 18F4550 có các thanh ghi điều khiển hoạt động của nó:
Thanh ghi trạng thái phát dữ liệu và điều khiển TXSTA
Thanh ghi trạng thái nhận dữ liệu và điều khiển RCSTA
Thanh ghi điều khiển tốc độ baud BAUDCON
Để các chân RC6/TX/CK và RC7/RX/DT/SDO của 18F4550 hoạt động là USART phải cấu hình chúng như sau:
Bit SPEN (RCSTA<7>) = 1
Bit TRISC<7> = 1
Bit TRISC<6>:
Trang 11TRISC<6> = 0: chế độ bất đồng bộ và chế độ đồng bộ - chủ
TRISC<6> = 1: chế độ đồng bộ - tớ
8.1.4.1 Các thanh ghi trong khối EUSART của PIC 18F4550
Thanh ghi TXSTA
Đây là thanh ghi trạng thái phát và điều khiển phát dữ liệu đi
Hình 8.12: thanh ghi TXSTA
Bit 7 – CSRC (Clock Source Select): bit chọn nguồn xung clock
Chế độ bất đồng bộ: không quan tâm
Chế độ đồng bộ:
1 = Chế độ chủ (xung clock được phát từ bên trong từ BRG)
0 = Chế độ tớ (xung clock sử dụng từ nguồn bên ngoài)
Bit 6 – TX9: bit cho phép phát 9-bit
1 = Phát 9-bit
0 = Phát 8-bit
Bit 5 – TXEN: bit cho phép phát đi
1 = Cho phép phát đi
0 = Không cho phép phát đi
Bit 4 – SYNC: bit chọn chế độ hoạt động USART
1 = Chế độ đồng bộ
0 = Chế độ bất đồng bộ
Bit 3 – SENDB: gửi bit ký tự gián đoạn
Chế độ bất đồng bộ:
1 = Gửi gián đoạn Sync trên lần phát kế tiếp (được xoá bằng phần cứng lúc kết thúc)
0 = Sự phát gián đoạn Sync được hoàn thành
Chế độ đồng bộ: không quan tâm
Bit 2 – BRGH: bit chọn tốc baud cao
Chế độ bất đồng bộ:
Trang 12Bit 0 – TX9D: bit thứ chín của dữ liệu phát đi
Bit này có thể là bit địa chỉ/dữ liệu hay bit parity
Thanh ghi RCSTA
RCSTA là thanh ghi trạng thái nhận và điều khiển nhận dữ liệu
Hình 8.13: thanh ghi RCSTA
Bit 7 – SPEN: bit cho phép cổng nối tiếp
1 = Cổng nối tiếp được cho phép hoạt động
0 = Cổng nối tiếp không được cho phép
Bit 6 – RX9: bit cho phép nhận 9-bit
1 = Nhận 9-bit
0 = Nhận 8-bit
Bit 5 – SREN: bit cho phép nhận đơn lẻ
Chế độ bất đồng bộ: không quan tâm
Trang 131 = Cho phép nhận liên tục cho đến khi bit cho phép CREN được xoá (CREN chồng
Chế độ đồng bộ 9-bit (RX9 = 0): không quan tâm
Bit 2 – FERR: bit lỗi khung truyền
1 = Báo lỗi khung truyền (được cập nhật bằng cách đọc thanh ghi RCREG và nhận
byte hợp lệ kế tiếp)
0 = Không xảy ra lỗi
Bit 1 – OERR: bit báo lỗi chạy vượt lố
1 = Lỗi vượt lố (có thể được xoá bằng cách xoá bit CREN)
0 = Không xảy ra lỗi
Bit 0 – RX9D: bit thứ chín của dữ liệu nhận
Bit này có thể là bit địa chỉ/dữ liệu hay bit parity và phải được tính toán bởi phần mềm của người sử dụng
Thanh ghi BAUDCON
BAUDCON là thanh ghi để điều khiển tốc độ baud trong truyền dữ liệu nối tiếp
Hình 8.14: thanh ghi BAUDCON
Bit 7 – ABDOVF: bit trạng thái luân chuyển thu nhận tốc độ baud tự động
1 = Sự luân chuyển BRG đã xảy ra trong suốt chế độ phát hiện tốc độ baud tự động
0 = Không có sự luân chuyển BRG xảy ra
Bit 6 – RCIDL: bit chỉ trạng thái nghỉ (idle) hoạt động nhận
1 = Hoạt động nhận nghỉ
Trang 141 = Trạng thái nghỉ cho xung clock là ở mức cao
0 = Trạng thái nghỉ cho xung clock là ở mức thấp
Bit 3 – BRG16: bit cho phép thanh ghi tốc độ baud 16-bit
1 = Cho phép đo lường tốc độ baud dựa vào ký tự kế tiếp Yêu cầu tiếp nhận một
vùng Sync (0x55); được xoá bằng phần cứng lúc hoàn thành
0 = Huỷ bỏ đo tốc độ baud hay đã hoàn thành
Chế độ đồng bộ: không sử dụng
8.1.4.2 Bộ phát tốc độ baud (BRG)
BRG là bộ phát có kích cỡ 8-bit hoặc 16-bit, nó hỗ trợ cho cả hai chế độ bất đồng bộ và đồng bộ Mặc định, BRG hoạt động ở chế độ 8-bit, để hoạt động ở 16-bit ta phải đặt bit BAUDCON<3> = 1
Cặp thanh ghi SPBRGH:SPBRG điều khiển chu kỳ cho bộ định thời chạy tự do Ở bất
đồng bộ, hai bit BRGH (TXSTA<2>) và BRG16 (BAUDCON<3>) cũng để điều khiển tốc độ
baud Trong chế độ đồng bộ, bit BRGH được bỏ qua
Trang 15Bảng 8.4 chỉ dẫn công thức tính tốc độ baud với các chế độ EUSART khác nhau nhưng
chỉ áp dụng trong chế độ chủ (xung clock được phát sử dụng bên trong) Giá trị n trong
bảng 8.4, ứng với tốc độ baud và FOSC cụ thể sẽ tính được n cụ thể và giá trị n này sẽ được nạp vào cặp thanh ghi SPBRGH:SPBRG Lưu ý, giá trị n là số nguyên gần nhất với n được tính toán
Bảng 8.4: các công thức tính tốc độ baud
Các bit cấu hình Chế độ
BRG/EUSART
Công thức tính baud rate SYNC BRG16 BRGH
Chú thích: x là tuỳ ý; n là giá trị được của cặp thanh ghi SPBRGH:SPBRG
Ví dụ 8.1: với FOSC = 16 MHz, 9600 baud, chế độ bất đồng bộ và BRG 8-bit Tính giá trị sẽ được nạp vào cặp thanh ghi SPBRGH:SPBRG
Tính lại tốc độ baud từ giá trị n = 25:
𝐵𝑎𝑢𝑑 𝑟𝑎𝑡𝑒 = 16∗106
64(25+1) = 9615 Như vậy sai số:
𝐸𝑟𝑟𝑜𝑟 = (𝐵𝑎𝑢𝑑 𝑡í𝑛ℎ 𝑡𝑜á𝑛−𝐵𝑎𝑢𝑑 𝑚𝑜𝑛𝑔 𝑚𝑢ố𝑛)
𝐸𝑟𝑟𝑜𝑟 = (9615−9600)
9600 ∗ 100% = 0.16%
Trang 16Bảng 8.5: các tốc độ baud ở bất đồng bộ: SYNC=0, BRGH=0, BRG16=0
Bảng 8.6: các tốc độ baud ở bất đồng bộ: SYNC=0, BRGH=1, BRG16=0
Bảng 8.7: các tốc độ baud ở đồng bộ: SYNC=0, BRGH=0, BRG16=1
Trang 17đầu tiên Bộ phát và thu của EUSART thì độc lập về hoạt động nhưng dùng chung định dạng
dữ liệu và tốc độ baud Bộ BRG tạo ra xung nhịp, có thể là x16 hoặc x64 cho tốc độ dịch chuyển bit tuỳ thuộc vào các bit BRGH và BRG16 Bit parity không được hỗ trợ bằng phần cứng nhưng được thi hành bằng phần mềm và nó được định vị ở bit dữ liệu thứ 9
Bộ phát bất đồng bộ EUSART
Trọng tâm của bộ phát trong hình 8.16 là thanh ghi dịch dữ liệu nối tiếp phát TSR TSR nhận dữ liệu từ thanh ghi đệm phát có thể đọc/ghi là TXREG, TXREG được nạp dữ liệu bằng phần mềm TSR không được nạp dữ liệu cho đến khi có bit stop
Trước khi TXREG truyền dữ liệu tới TSR (xảy ra trong một chu kỳ T CY), TXREG phải
trống (không có dữ liệu) và bit TXIF (PIR1<4>) được đặt Ngắt này có thể được cho phép
Trang 18hoặc huỷ bằng cách đặt hay xoá bit cho phép thực hiện ngắt là TXIE (PIE1<4>) TXIF sẽ
được đặt mà không cần chú ý đến trạng thái của TXIE, nó không thể được xoá bằng phần mềm
Bit TRMT (TXSTA<1>) sẽ cho biết trạng thái của TSR, bit này chỉ được đọc và nó được
đặt khi thanh ghi TSR rỗng
Hình 8.16: sơ đồ khối bộ phát EUSART
Để thiết lập truyền bất đồng bộ, ta thực hiện từng bước sau:
(1) Khởi tạo SPBRGH:SPBRG với tốc độ baud tương ứng Đặt hay xoá BRGH và BRG16 theo yêu cầu để nhận được tốc độ baud mong muốn
(2) Cho phép truyền nối tiếp bất đồng bộ bằng cách xoá bit SYNC và đặt bit SPEN (3) Nếu các ngắt cần thì cho phép bit TXIE
(4) Nếu muốn truyền 9-bit, đặt bit TX9 Có thể được sử dụng là bit địa chỉ hay dữ liệu (5) Cho phép phát đi bằng cách đặt bit TXEN mà nó cũng sẽ đặt bit TXIF
(6) Nếu truyền 9-bit, bit thứ 9 sẽ được ghi vào bit TX9D
(7) Nạp dữ liệu vào thanh ghi TXREG để bắt đầu phát đi
(8) Nếu có sử dụng ngắt, hãy chắc chắn rằng các bit GIE và PEIE trong thanh ghi INTCON được đặt
Bộ thu bất đồng bộ EUSART
Bộ thu bất đồng bộ có sơ đồ như hình 8.17, dữ liệu nhận được trên chân RX và đưa dữ liệu vào khối phục hồi dữ liệu Khối này thực chất là thanh ghi dịch tốc độ cao hoạt động gấp
16 lần tốc độ baud
Trang 19Hình 8.17: sơ đồ khối bộ thu EUSART
(4) Nếu muốn nhận 9-bit, đặt bit RX9
(5) Cho phép tiếp nhận bằng cách đặt bit CREN
(6) Bit cờ RCIF sẽ được đặt khi sự thu nhận hoàn tất và ngắt sẽ được kích hoạt nếu bit cho phép RCIE đã được đặt
(7) Đọc thanh ghi RCSTA để nhận được bit thứ 9 (nếu đã cho phép) và định rõ nếu lỗi
bất kỳ đã xảy ra trong suốt nhận dữ liệu
(8) Đọc 8-bit dữ liệu từ RCREG
(9) Nếu lỗi bất kỳ xảy ra, xoá lỗi bằng cách xoá bit cho phép CREN
(10) Nếu sử dụng ngắt, hãy chắc chắn rằng các bit GIE và PEIE trong thanh ghi INTCON được đặt
8.1.4.4 Chế độ đồng bộ chủ EUSART
Chế độ đồng bộ chủ được thiết lập bằng cách đặt bit CSRC (TXSTA<7>) Ở chế độ này,
dữ liệu được truyền theo kiểu bán song công Chế độ đồng bộ được chọn bằng cách đặt bit
SYNC (TXSTA<4>) Ngoài ra, bit SPEN được đặt phù hợp với cấu hình các chân TX và RX
để trở thành các dòng CK (xung clock) và DT (dữ liệu)
Trang 20Chế độ chủ cho biết rằng bộ xử lý phát xung clock chủ trên dòng CK Cực tính xung
clock được chọn bằng bit SCKP (BAUDCON<4>) Sự đặt SCKP làm trạng nghỉ trên CK ở
mức cao, trong khi xoá nó làm trạng thái nghỉ ở mức thấp Sự lựa chọn này được cung cấp để
hỗ trợ các thiết bị microwire với khối này
Phát đồng bộ chủ
Phần quan trọng trong khối phát EUSART trong hình 8.16 chính là thanh ghi TSR Cũng tương tự như phát bất đồng bộ, TSR để nạp dữ liệu phát đi
Trước khi TXREG truyền dữ liệu tới TSR (xảy ra trong một chu kỳ T CY), TXREG phải
trống (không có dữ liệu) và bit TXIF (PIR1<4>) được đặt Ngắt này có thể được cho phép hoặc huỷ bằng cách đặt hay xoá bit cho phép thực hiện ngắt là TXIE (PIE1<4>) TXIF sẽ
được đặt mà không cần chú ý đến trạng thái của TXIE, nó không thể được xoá bằng phần
mềm mà sẽ tự trở lại trạng thái ban đầu (reset) khi dữ liệu đã được nạp vào TXREG
Trong khi bit TXIF chỉ trạng thái của TXREG thì bit TRMT (TXSTA<1>) cho biết trạng
thái của TSR Bit TRMT này chỉ được đọc và nó được đặt khi thanh ghi TSR rỗng
(3) Nếu các ngắt cần thì cho phép bit TXIE
(4) Nếu muốn truyền 9-bit, đặt bit TX9
(5) Cho phép phát đi bằng cách đặt bit TXEN
(6) Nếu truyền 9-bit, bit thứ 9 sẽ được ghi vào bit TX9D
(7) Nạp dữ liệu vào thanh ghi TXREG để bắt đầu phát đi
(8) Nếu có sử dụng ngắt, hãy chắc chắn rằng các bit GIE và PEIE trong thanh ghi INTCON được đặt
Thu đồng bộ chủ
Trước khi chế độ đồng bộ được chọn, phần thu được cho phép bằng cách hoặc đặt bit SREN hoặc bit CREN Dữ liệu được lấy mẫu trên chân RX theo tác động cạnh xuống của clock Nếu đặt bit SREN, chỉ từ đơn được nhận Nếu đặt bit CREN, sự nhận dữ liệu là liên tục cho đến CREN được xoá Nếu cả hai bit này đều được đặt, khi đó CREN được chọn ưu tiên
Các bước trình tự thiết lập phần thu đồng bộ chủ:
Trang 21(1) Khởi tạo SPBRGH:SPBRG với tốc độ baud tương ứng Đặt hay xoá BRG16 theo yêu cầu để nhận được tốc độ baud mong muốn
(2) Cho phép truyền nối tiếp bất đồng bộ chủ bằng cách đặt các bit SYNC, SPEN và CSRC
(3) Bảo đảm các bit CREN, SREN được xoá
(4) Nếu muốn thực hiện ngắt, đặt bit RCIE
(5) Nếu nhận 9-bt, phải đặt bit RX9
(6) Nếu yêu cầu nhận từ đơn, đặt bit SREN, đối với nhận liên tục thì đặt CREN (7) Bit cờ ngắt sẽ được đặt khi sự thu hoàn tất và một ngắt sẽ được kích hoạt nếu bit RCIE được đặt
(8) Đọc thanh ghi RCSTA để lấy bit thứ 9 (nếu đã cho phép) và định rõ nếu có bất kỳ
lỗi xảy ra trong suốt quá trình nhận
(9) Đọc dữ liệu 8-bit từ thanh ghi RCREG
(10) Nếu có bất kỳ lỗi xảy ra, xoá lỗi bằng cách xoá bit CREN
(11) Nếu có sử dụng ngắt, chắc chắn rằng các các bit GIE và PEIE trong thanh ghi INTCON được đặt
8.1.4.5 Chế độ đồng bộ tớ EUSART
Chế độ đồng bộ tớ được bằng cách xoá bit CSRC (TXSTA<7>) Chế độ này khác với chế độ đồng bộ chủ do xung clock được lấy từ bên ngoài tại chân CK (thay vì được cung cấp
từ bên trong như chế độ chủ) Điều này cho phép khối EUSART phát và nhận dữ liệu trong
lúc hoạt động ở bất kỳ chế độ công suất thấp
Phát đồng bộ tớ EUSART
Hoạt động của các chế độ đồng bộ chủ và tớ là giống nhau, ngoại trừ trong trường hợp
của chế độ ngủ Nếu hai từ được ghi vào thanh ghi TXREG và khi đó lệnh SLEEP được thi
hành, quá trình sẽ diễn ra như sau:
(1) Từ (word) sẽ truyền ngay lập tức tới thanh ghi TSR và phát đi
(2) Từ thứ hai sẽ giữ lại trong TXREG
(3) Bit cờ TXIF sẽ không được xoá
(4) Khi từ đầu tiên đã được dịch ra khỏi TSR, thanh ghi TXREG sẽ truyền từ thứ hai tới TSR và lúc này bit TXIF sẽ được đặt
(5) Nếu bit cho phép TXIE được đặt, ngắt sẽ đánh thức VĐK từ chế độ ngủ Nếu ngắt toàn cục được cho phép, chương trình sẽ nhảy tới vector ngắt
Trang 22Các bước trình tự thiết lập phát đồng bộ tớ:
(1) Cho phép truyền nối tiếp đồng bộ tớ bằng cách đặt bit SYNC và SPEN và xoá bit CSRC
(2) Xoá các bit CREN và SREN
(3) Nếu muốn thực hiện ngắt, hãy đặt bit cho phép TXIE
(4) Nếu muốn phát 9-bit, đặt bit TX9
(5) Cho phép phát đi bằng cách đặt bit TXEN
(6) Nếu phát 9-bit thì bit thứ 9 sẽ được ghi vào bit TX9D
(7) Nạp dữ liệu vào thanh ghi TXREG để bắt đầu phát
(8) Nếu sử dụng ngắt, phải bảo đảm các bit GIE và PEIE trong thanh ghi INTCON được đặt
Thu đồng bộ tớ EUSART
Nếu sự thu nhận dữ liệu được cho phép bằng cách đặt bit CREN trước khi đi vào chế độ ngủ hay nghỉ bất kỳ, sau đó một từ có thể được nhận trong lúc ở chế độ công suất thấp Trước khi một từ được nhận, thanh ghi TSR sẽ truyền dữ liệu tới RCREG, nếu bit RCIE được đặt thì ngắt được kích hoạt sẽ đánh thức VĐK ra khỏi chế độ công suất thấp Nếu ngắt toàn cục được cho phép, chương trình sẽ nhảy tới vector ngắt
Các bước trình tự thiết lập thu đồng bộ tớ:
(1) Cho phép truyền nối tiếp đồng bộ tớ bằng cách đặt bit SYNC và SPEN và xoá bit CSRC
(2) Nếu muốn thực hiện ngắt, hãy đặt bit cho phép RCIE
(3) Nếu muốn nhận 9-bit, đặt bit RX9
(4) Cho phép tiếp nhận bằng cách đặt bit CREN
(5) Bit cờ RCIF sẽ được đặt khi sự tiếp nhận hoàn tất Ngắt sẽ được kích hoạt nếu bit RCIE được đặt
(6) Đọc thanh ghi RCSTA để lấy bit thứ 9 (nếu đã cho phép) và định rõ nếu có bất kỳ
lỗi xảy ra trong suốt thời gian nhận
(7) Đọc dữ liệu 8-bit nhận được từ thanh ghi RCREG
(8) Nếu có lỗi bất kỳ xảy ra, xoá lỗi bằng cách xoá bit CREN
(9) Nếu sử dụng ngắt, phải bảo đảm các bit GIE và PEIE trong thanh ghi INTCON được đặt
Trang 238.1.5 Lập trình cổng nối tiếp cho PIC18 bằng C
8.1.5.1 Các hàm hỗ trợ USART trong MPLAB C18
MPLAB C18 hỗ trợ sẵn các hàm thực hiện giao tiếp USART theo bảng 8.10 được chứa
trong thư viện usart.h Cách sử dụng chi tiết các hàm này có thể xem trực tiếp trong “Help”
của MPLAB IDE
Bảng 8.10: các hàm giao tiếp ngoại vi USART trong MPLAB C18
BusyUSART Có phải USART đang phát đi?
CloseUSART Bỏ chức năng USART
DataRdyUSART Có phải dữ liệu sẵn sàng trong bộ nhớ đệm nhận USART?
getcUSART Đọc một byte từ USART
getsUSART Đọc một chuỗi từ USART
OpenUSART Cấu hình USART
putcUSART Ghi một byte tới USART
putsUSART Ghi một chuỗi từ bộ nhớ dữ liệu tới USART
putrsUSART Ghi một chuỗi từ bộ nhớ chương trình tới USART
ReadUSART Đọc một byte từ USART
WriteUSART Ghi một byte tới USART
baudUSART Định các các bit cấu hình tốc độ baud cho EUSART
Hàm OpenUSART
Hàm OpenUSART có cú pháp như sau:
Void OpenUSART(unsigned char config, unsigned int spbrg);
Trang 24Tốc độ truyền:
USART_BRGH_HIGH Tốc độ baud cao
USART_ BRGH _LOW Tốc độ baud thấp
spbrg: đây là giá trị ghi vào thanh ghi BRG để chỉ rõ tốc độ baud Với F OSC là tần số
dao động và tốc độ baud cụ thể ta sẽ tìm được giá trị spbrg tương ứng, các công thức
tính tốc độ baud như sau:
Ví dụ 8.2: định cấu hình USART của PIC 18F4550 hoạt động ở chế độ bất đồng bộ không sử
dụng ngắt phát và nhận, truyền dữ liệu 8-bit đơn, tần số dao động 20 MHz, tốc độ truyền dữ liệu là 19200 baud, sử dụng tốc độ baud cao
Giải pháp:
Định cấu hình USART theo yêu cầu sử dụng hàm OpenUSART như sau:
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
Trang 25USART_BRGH_HIGH &
8.1.5.2 Lập trình giao tiếp USART bằng MPLAB C18
Ví dụ 8.3: viết chương trình để gửi thông báo “Connected” đến PC qua cổng COM với tốc
độ 9600 baud, 8-bit dữ liệu và 1 bit stop Quá trình gửi dữ liệu từ VĐK chỉ diễn ra khi PC gửi
đến ký tự cho phép gửi là “T”
(a) Vẽ sơ đồ mạch thiết kế hoàn chỉnh
(b) Viết chương trình điều khiển
Giải pháp:
(a) Sơ đồ mạch thiết kế
Hình 8.23: sơ đồ mạch thiết kế ví dụ 8.3
(b) Chương trình điều khiển
Lưu ý mã ASCII của ký tự “T” là 84 (hay 0x54)
unsigned char Command;
OpenUSART( USART_TX_INT_OFF & // configure USART
USART_RX_INT_OFF &
P1
DB9 5 9 8 7 2 1
Y 4 20MHz
5V
R1 10k
C6 1uF
2
12 9 11
10
13 8
14 7 C1+
C2+
T1OUT
C1 0.1uF
C8 1uF C7
1uF
Trang 26while (!DataRdyUSART()); // Wait the Rx buffer ready
Command = getcUSART(); // Receive value byte from COMPORT
}
Ví dụ 8.4: viết chương trình để nhận các byte dữ liệu từ máy tính qua cổng COM với tốc độ
9600 baud, 8-bit dữ liệu và 1 bit stop Giá trị các byte dữ liệu nhận được sẽ xuất ra 8 LED được kết nối với PORTB Quá trình nhận dữ liệu diễn ra chỉ khi PC gửi dữ liệu tới
Giải pháp:
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
#include<P18F4550.h>
Trang 27#include<usart.h> // Supported by C18.
#include<delays.h> // Supported by C18
message = getcUSART(); // Receive value byte from COMPORT
PORTB = data_8bit; // Output recieved value to PORTB
Trang 28Hình 8.24: đường dẫn dữ liệu SPP
8.2.1 Cấu hình SPP
Hoạt động của SPP được điều khiển bằng hai thanh ghi SPPCON và SPPCFG SPPCON điều khiển toàn bộ của cổng song song và xác định nếu nó hoạt động với USB hay điều khiển VĐK SPPCFG điều khiển cấu hình thời gian và các ngõ ra của chân
Cho phép SPP
Để cho phép SPP, đặt bit SPPEN = 1 Ngoài ra, các bit TRIS tương ứng các chân SPP phải được cấu hình hợp lý, ít nhất là:
Các bit TRISD<7:0> phải đặt bằng 1
Các bit TRISE<2:1> phải xoá bằng 0
Nếu CK1SPP được sử dụng:
Bit TRISE<0> phải bằng 0
Nếu CSPP được sử dụng:
Bit TRISB<4> phải bằng 0
Thanh ghi điều khiển SPPCON
Hình 8.25: thanh ghi điều khiển SPPCON
Bit 7-2 – không sử dụng, đọc bằng 0
Bit 1 – SPPOWN: bit quyền sở hữu SPP
1 = Ngoại vi USB điều khiển SPP
0 = VĐK điều khiển trực tiếp SPP
Bit 0 - SPPEN: bit cho phép SPP
1 = SPP được phép
Trang 290 = SPP bị vô hiệu
Thanh ghi cấu hình SPPCFG
Hình 8.26: thanh ghi cấu hình SPPCFG
Bit 7-6 – CLKCFG<1:0>: các bit cấu hình xung clock SPP
1x = CLK1 thay đổi nhờ đọc hoặc ghi của một địa chỉ điểm kết lẻ
CLK2 thay đổi nhờ đọc hoặc ghi của một địa chỉ điểm kết chẵn
01 = CLK1 thay đổi nhờ hoạt động ghi; CLK2 thay đổi theo đọc
00 = CLK1 thay đổi chỉ nhờ vào ghi địa chỉ điểm kết; CLK2 thay đổi theo đọc
và ghi
Bit 5 – CSEN: bit cho phép chân chọn chip SPP
1 = RB4 được điều khiển bởi khối SPP và hoạt động như ngõ ra CS của SPP
0 = RB4 hoạt động như cổng I/O số
Bit 4 – CLK1EN: bit cho phép chân CLK1 của SPP
1 = Chân RE0 được điều khiển bởi khối SPP và hoạt động như ngõ ra CLK1 cho SPP
0 = RE0 hoạt động như cổng I/O số
Bit 3-0 – WS<3:0>: các bit trạng thái chờ SPP
1111 = 30 trạng thái chờ thêm vào
1110 = 28 trạng thái chờ thêm vào
0001 = 2 trạng thái chờ thêm vào
0000 = 0 trạng thái chờ thêm vào
Dữ liệu xung clock
SPP có 4 ngõ ra điều khiển: hai ngõ ra xung clock riêng biệt (CK1SPP và CK2SPP), ngõ ra cho phép (OESPP), chọn chip (CSSPP) Cùng kết hợp với nhau, chúng tạo ra vài cấu hình để điều khiển dòng dữ liệu tới các thiết bị khách (slave devices) Khi tất cả các ngõ ra
điều khiển được sử dụng, có ba chọn lựa chính là:
Trang 30 CLK1 phát xung clock thông tin địa chỉ điểm kết trong khi CLK2 phát xung clock dữ liệu
CLK1 phát xung clock các hoạt động ghi trong khi CLK2 phát clock để đọc
CLK1 phát clock dữ liệu địa chỉ lẻ trong khi CLK2 phát clock dữ liệu địa chỉ chẵn
Các trạng thái chờ
SPP được thiết kế có khả năng để thêm các trạng thái chờ cho các hoạt động đọc và ghi Điều này cho phép sự truy xuất các thiết bị song song mà nó đòi hỏi thời gian cộng thêm cho việc truy xuất
Sự cấp phát xung clock trạng thái chờ được dựa vào nguồn clock dữ liệu Nếu SPP được cấu hình để hoạt động là một điểm kết USB, khi đó các trạng chờ nhờ vào clock USB Ngược lại, nếu SPP được cấu hình hoạt động từ VĐK, khi đó các trạng thái chờ được dựa vào tốc độ
Trang 31Hình 8.29: giản đồ thời gian cho USB ghi địa chỉ và đọc dữ liệu (4 trạng thái chờ)
8.2.2 Thiết lập điều khiển USB
Khi SPP được cấu hình cho hoạt động USB, dữ liệu có thể được cấp xung clock trực tiếp đến và từ thiết bị ngoại vi USB không có sự can thiệp của VĐK Các bước sau được yêu cầu để thiết lập SPP cho điều khiển USB:
(1) Cấu hình SPP như mong muốn, gồm các trạng thái chờ và xung clock
(2) Đặt bit SPPOWN = 1
(3) Đặt địa chỉ bắt đầu ký hiệu nhận diện bộ đệm (BDnADRL:BDnADRH) tời FFFFh
(4) Đặt bit KEN = 1 sao cho ký hiệu nhận diện được giữ đồng nhất bởi SIE
(5) Đặt bit INCDIS = 1 để vô hiệu sự gia tăng địa chỉ bộ đệm tự động
(6) Đặt bit SPPEN = 1 để cho phép khối SPP
Hình 8.30: truyền dữ liệu giữa USB SIE và SPP
8.2.3 Thiết lập điều khiển VĐK
SPP cũng có thể hoạt động như cổng song song cho VĐK Ở chế độ này, thanh ghi SPPEPS cung cấp trạng thái và điều khiển ghi địa chỉ Dữ liệu được ghi và đọc từ thanh ghi SPPDATA Khi SPP được sở hữu riêng bởi VĐK, xung clock SPP được điều khiển bằng
xung lệnh (F OSC /4)
Các bước được yêu cầu để thiết lập SPP cho hoạt động VĐK:
(1) Cấu hình SPP theo mong muốn, bao hàm các trạng thái chờ và clock
(2) Xoá bit SPPOWN
(3) Đặt bit SPPEN = 1
Trang 32Ngắt SPP
Khi được sở hữa bằng lõi VĐK, điều khiển có thể phát ra ngắt để lưu ý ứng dụng khi
mỗi hoạt động đọc và ghi hoàn tất Bit cờ ngắt là SPPIF (PIR1<7>) và được cho phép bằng bit SSPIE (PIE1<7>) Nó có thể định mức ưu tiên thấp hay cao bằng bit SSPIP (IPR1<7>)
Ghi tới SPP
Trước khi được cấu hình, việc ghi tới SPP được thực hiện bằng cách chi tới các thanh ghi SPPEPS và SPPDATA Nếu SPP được cấu hình để phát xung clock thông tin địa chỉ điểm kết với dữ liệu, sự ghi tới SPPEPS khởi đầu chu kỳ ghi địa chỉ Ngược lại, sự ghi được bắt đầu bằng cách ghi dữ liệu tới SPPDATA Bit SPPBUSY chỉ trạng thái của các chu kỳ ghi địa chỉ và dữ liệu
Hình 8.31: thanh ghi SPPEPS
Bit 7 – RDSPP: bit trạng thái đọc SPP (chỉ đúng khi SPPCON<SSPOWN> = 1, USB)
1 = Giao dịch lần trước là hoạt động đọc từ SPP
0 = Giao dịch lần trước không phải là hoạt động đọc từ SPP
Bit 6 – WRSPP: bit trạng thái ghi SPP (chỉ đúng khi SPPCON<SSPOWN> = 1, USB)
1 = Giao dịch lần trước là hoạt động ghi từ SPP
0 = Giao dịch lần trước không phải là hoạt động ghi từ SPP
Trang 33Đọc từ SPP
Sự đọc từ SPP bao hàm đọc thanh ghi SPPDATA Sự đọc thanh ghi lần đầu khởi tạo hoạt động đọc Khi sự đọc được hoàn thành, được chỉ báo bằng bit SPPBUSY, SPPDATA sẽ được nạp dữ liệu hiện hành
USB được phát triển xuất phát bởi Compaq, Microsoft, Intel và NEC, và sau đó có Hewlett-Packard, Lucent và Phillips Các công ty này cuối cùng đã thành lập tập đoàn phi lợi nhuận về hợp nhất chuẩn USB để tổ chức phát triển và phát hành các đặc điểm kỹ thuật USB USB là kiểu giao tiếp nối tiếp tốc độ cao và nó cũng cung cấp nguồn tới các thiết bị
được kết nối với nó Bus USB hỗ trợ tới 127 thiết bị (được giới hạn bằng vùng địa chỉ 7-bit,
lưu ý là địa chỉ 0 không sử dụng mà sẽ có mục đích sử dụng đặc biệt khác) được kết nối thông
qua sợi cáp nối tiếp 4-dây với độ dài có thể lên tới 5 m Nhiều thiết bị USB có thể được kết
nối tới cùng bus với các bộ tập trung (hub), bộ tập trung có thể có 4, 8 hoặc 16 cổng Một
thiết bị có thể được gắn tới một bộ tập trung mà bộ tập trung này có thể được gắn tới bộ tập trung khác Số bộ tập trung tối đa nối với nhau được cho phép là 6 Tuỳ thuộc vào đặc điểm
kỹ thuật, khoảng cách xa nhất của một thiết bị từ máy chủ của nó là khoảng 30 m, được thực hiện bằng sử dụng 5 bộ tập trung Đối với khoảng cách xa hơn nữa cho việc truyền dữ liệu thì
có thể sử dụng phương thức khác để truyền như là Ethernet
8.3.1 Các loại cổng USB
Hiện nay, bus USB có các phiên bản: USB 1.1, USB 2.0, USB 3.0, USB 3.1
Trang 34USB 1.1
Phiên bản đầu tiên là USB 1.0 được phát hành thang 1/1996, sau đó là USB 1.1 (tháng
8/1998) có hai tốc độ dữ liệu: tốc độ thấp là 1.5 Mb/s, tốc độ đầy đủ là 12 Mb/s
USB 2.0 (tháng 4/2000)
USB 2.0 có ba tốc độ dữ liệu: tốc độ thấp là 1.5 Mb/s, tốc độ đầy đủ là 12 Mb/s và tốc
độ cao là 480 Mb/s Dòng điện tối đa cấp cho thiết bị là 100 mA ở 5 V
USB 2.0 là giao tiếp 4-dây sử dụng hai đầu kết nối là Type-A và Type-B có hình dạng thực tế như hình 8.32 và sắp xếp chân trên hai đầu nối theo hình 8.33 Lưu ý, hai chân Data-
và Data+ được nối với cặp sợi dây được xoắn trong sợi cáp USB
Hình 8.32: hình dạng đầu nối Type-A và Type-B
Hình 8.33: bố trí chân của đầu nối Type-A và Type-B
Bảng 8.11: quy ước chỉ định chân trên đầu nối USB Type-A và Type-B
Trang 35PIN 1 PIN 5
Hình 8.34: hình dạng đầu nối mini-B USB
Bảng 8.12: quy ước chỉ định chân trên đầu nối mini-B USB
USB 3.1
Được phát hành vào tháng 7/2013 và được ECNs (Engineering Change Notices) chứng
nhận vào tháng 8/2014 Tốc độ dữ liệu đạt tới khái niệm siêu tốc độ là 10 Gb/s, sử dụng đầu nối Type-C USB 3.1 tương thích với USB 3.0 và cũng hỗ trợ tốt cho USB 2.0
Các tín hiệu USB là lưỡng pha (bi-phase), các tín hiệu được gửi từ máy tính chủ sử dụng
kỹ thuật mã hoá dữ liệu NRZI (Non-Return to Zero Inverted) Theo kỹ thuật này, mức tín hiệu
được đảo cho mỗi lần thay đổi tới logic 0, mức tín hiệu đối với logic 1 không bị thay đổi Một bit 0 được chèn vào sau mỗi sáu bit 1 liên tục trong dòng dữ liệu để tạo thành dữ liệu động Hình 8.35 mô tả chuỗi NRZI
Hình 8.35: dữ liệu NRZI
Trang 36Một gói của dữ liệu được phát bởi máy chủ được gửi đi tới mỗi thiết bị được kết nối tới bus Tất cả các thiết bị nhận tín hiệu, nhưng chỉ duy nhất trong số chúng, thiết bị được định
vị, chấp nhận dữ liệu
Các thiết bị USB được nối tới bus phải là các thiết bị có thủ tục đầy đủ, yêu cầu phần mềm điều khiển thủ tục đầy đủ, hoặc chúng phụ thuộc tới lớp thiết bị Các lớp thiết bị cho phép phần mềm điều khiển thiết bị giống nhau để được sử dụng cho nhiều thiết bị có các chức năng tương tự Ví dụ, máy in có lớp thiết bị 0x07, và hầu hết máy in sử dụng các phần mềm điều khiển cho loại này
Các lớp thiết bị phổ biến nhất được liệt kế trong bảng 8.13 Lớp thiết bị giao tiếp người
dùng USB (HID – Human Interface Device) được quan tâm đặc biệt, khi nó được sử dụng
trong các dự án của chương này
Một số thuật ngữ USB thông thường:
Endpoint: điểm kết là hoặc một nguồn ngoài hoặc nguồn nội của dữ liệu Một thiết
bị USB đơn có thể có một số điểm kết, giới hạn số điểm kết là 16 IN và 16 OUT
Transaction: sự giao dịch là một sự truyền dữ liệu trên bus
Pipe: ống dẫn là một kết nối dữ liệu luận lý giữa máy chủ và một điểm kết
Bảng 8.13: các lớp thiết bị USB
0x01 Thiết bị âm thanh USB Card âm thanh
0x02 Thiết bị truyền thông USB Modem, fax
0x03 Thiết bị giao tiếp USB Bàn phím, chuột
0x08 Thiết bị lưu dữ liệu USB Thẻ nhớ, thẻ nhớ flash
0x09 Thiết bị tập trung USB Các bộ tập trung
0x0B Thiết bị đọc thẻ thông minh USB Đầu đọc thẻ
8.3.2 Nhận dạng tốc độ trên bus
Tại đầu cuối thiết bị của bus, một điện trở kéo lên 1.5 kΩ được nối từ đường D+ hoặc D- tới 3.3 V Trên bus tốc độ đầy đủ, điện trở được nối từ đường D+ tới 3.3 V, và bus tốc độ thấp điện trở được nối từ đường D- tới 3.3 V Khi không có thiết bị nào được gắn vào, máy chủ sẽ xem cả hai đường ở mức thấp Tốc độ của thiết bị sẽ được xác định bằng việc giám sát đường nào được kéo lên mức cao
8.3.3 Các trạng thái USB
Một số trạng thái bus USB là:
Trang 37Idle: bus ở trạng thái không hoạt động khi đường kéo lên ở mức cao và đường còn
lại ở mức thấp Đây là trạng thái các đường data trước và sau khi truyền một gói
Detached: khi không có thiết bị được kết nối tới bus, máy chủ sẽ xem cả hai đường
data ở mức thấp
Attached: khi một thiết bị được kết nối tới bus, máy chủ phát hiện hoặc D+ hoặc là
D- chuyển lên mức cao, nghĩa là có một thiết bị đã được gắn vào
J state: giống trạng thái idle
K state: đối ngược trạng thái J
SE0: trạng thái bằng 0 được kết thúc đơn lẻ, khi cả hai đường trên bus được kéo
xuống mức thấp
SE1: trạng thái bằng 0 được kết thúc đơn lẻ, khi cả hai đường trên bus ở mức cao
SE1 là điều kiện trái luật trên bus Nó không giờ được ở trạng thái này
Reset: khi máy chủ muốn giao tiếp với một thiết bị trên bus, đầu tiên nó gửi một điều
kiện reset bằng cách kéo xuống cả hai đường (trạng thái SE0) trong tối thiểu 10 ms
EOP: kết thúc trạng thái gói, về cơ bản nó là trạng thái SE0 cho hai lần bit, được theo
sau bởi trạng thái J trong một lần bit
Keep alive: trạng thái đã hoàn tất bởi EOP Trạng thái duy trì còn hoạt động được
gửi tối thiểu một lần mỗi ms để duy trì thiết bị tránh ngưng treo hoạt động
Suspend: được sử dụng để tiết kiệm nguồn, treo hoạt động được thi hành bằng cách
không gửi bất kỳ dữ liệu gì đến thiết bị trong 3 ms Thiết bị bị treo hoạt động chỉ nhận dòng nhỏ hơn 0.5 mA từ bus Để khôi phục lại các tín hiệu nó phải thực hiện reset
Resume: thiết bị bị treo được đánh thức bằng cách đảo ngược cực tính của tín hiệu
trên các đường data trong tối thiểu 20 ms, được theo sau tín hiệu EOP tốc độ thấp
8.3.4 Truyền thông bus USB
USB là một hệ thống kết nối chủ trung tâm, trong đó máy chủ ra lênh sử dụng bus USB Mỗi thiết bị trên bus được chỉ định một địa chỉ USB duy nhất, và không có thiết bị tớ có thể xác nhận một tín hiệu trên bus cho đến khi máy chủ yêu cầu nó Khi một thiết bị USB mới được gắn vào bus, máy chủ USB sử dụng địa chỉ 0 để yêu cầu thông tin cơ bản từ thiết bị Khi đó, máy chủ chỉ định cho nó một địa chỉ USB duy nhất Sau đó, máy chủ đòi hỏi thêm thông tin về thiết bị, chẳng hạn như tên nhà chế tạo, các tính năng, mã nhận dạng thiết bị, sự giao dịch trên bus có thể bắt đầu
Trang 388.3.4.1 Các gói
Dữ liệu được truyền bus USB ở dạng gói Một gói bắt đầu với mẫu đồng bộ để cho phép xung clock bộ thu đồng bộ hoá với dữ liệu Các byte dữ liệu theo gói thực hiện kết thúc với một kết thúc của tín hiệu gói
Một byte nhận dạng gói (PID – Packet Identifier) theo sau ngay vùng đồng bộ của mỗi
gói USB PID có độ dài 4 bit Có 17 giá trị PID khác nhau (xem bảng 8.14)
Bảng 8.14: các giá trị PID
IN SOF SETUP
1110 0001
0110 1001
1010 0101
0010 1101
Sự giao dịch từ máy chủ tới thiết bị
Sự giao dịch từ thiết bị tới máy chủ Bắt đầu của khung
Thiết lập lệnh
DATA1 DATA2 MDATA
NAK STALL NYET
Có bốn định dạng gói, được dựa vào PID mà nó ở bắt đầu của gói: các gói báo hiệu
(token packets), các gói dữ liệu, các gói bắt tay (handshake packets) và các gói đặc biệt Hình 8.36 mô tả định dạng gói báo hiệu gồm có OUT, IN, SOF (bắt đầu của khung – Start Of
Frame) và SETUP Gói này chứa địa chỉ 7-bit, ENDP 4-bit (số điểm kết), kiểm tra CRC 5-bit
và EOP
Hình 8.36: gói báo hiệu
Gói dữ liệu sử dụng DATA0, DATA1, DATA2 và MDATA cho giao dịch dữ liệu Định dạng gói này được biểu diễn trong hình 8.37, bao gồm PID, các byte dữ liệu từ 0 – 1024, kiểm tra CRC 2-byte, và EOP
Hình 8.37: gói dữ liệu
Trang 398.3.4.2 Các loại luồng dữ liệu
Dữ liệu có thể được truyền theo bốn cách: truyền dung lượng lớn (bulk transfer), truyền ngắt (interrupt transfer), truyền đồng bộ cách ly (isochronous transfer) và truyền có điều khiển (control transfer)
Truyền dung lượng lớn
Kiểu truyền này được thiết kế để truyền khối lượng lớn cho dữ liệu theo kiểu phân phát buông lỗi và không đảm bảo băng thông Nếu một điểm kết OUT được khai báo khi sử dụng cho kiểu truyền này, khi đó máy chủ sẽ truyền dữ liệu tới nó sử dụng giao dịch OUT Tương
tự, nếu điểm kết là IN, khi đó máy chủ sẽ truyền dữ liệu từ nó sử dụng giao dịch IN Kích
thước gói tối đa trong kiểu truyền này là từ 8 đến 64 gói với tốc độ đầy đủ (full speed), và 512 gói ở tốc độ cao (truyền dữ liệu dung lượng lớn không được cho phép với tốc độ thấp)
Truyền ngắt
Kiểu truyền ngắt được sử dụng để truyền khối lượng dữ liệu nhỏ với băng thông cao, trong đó dữ liệu có thể được truyền nhanh tới mức có thể và không xảy ra trễ Lưu ý rằng kiểu truyền này không ảnh hưởng gì tới các ngắt của hệ thống máy tính Các gói ngắt có thể sắp xếp theo kích cỡ từ 1 đến 8 byte ở tốc độ thấp, từ 1 tới 64 byte ở tốc độ đầy đủ, và mở rộng tới 1024 byte cho tốc độ cao
1024 byte cho tốc độ cao (không hỗ trợ tốc độ thấp)
Truyền có điều khiển
Đây là kiểu truyền dữ liệu song hướng, sử dụng cả hai điểm kết IN và OUT Truyền có điều khiển tổng thể dùng cấu hình ban đầu của thiết bị bởi máy chủ Kích thước gói tối đa cho tốc độ thấp là 8 byte, 8 đến 64 byte cho tốc độ đầy đủ và 64 byte cho tốc độ cao Kiểu truyền
có điều khiển được thực hiện trong ba khâu: SETUP, DATA, STATUS
Trang 408.3.4.3 Sự liệt kê
Khi một thiết bị được gắn vào bus USB, nó nhận biết máy chủ nhờ một quy trình được
gọi là sự liệt kê (enumeration) Các bước của liệt kê là:
Khi một thiết bị được gắn vào, máy chủ trở nên nhận biết nó là do một trong các
đường (D+ hoặc D-) trở thành mức cao
Máy chủ gửi tín hiệu reset USB đến thiết bị để đặt thiết bị trong thái xác định Thiết
bị reset đáp ứng đối với địa chỉ 0
Máy chủ gửi yêu cầu thông qua địa chỉ 0 tới thiết bị để phát hiện ra kích thước gói tối
đa của nó sử dụng lệnh Get Descriptor
Thiết bị phản ứng bằng cách gửi một phần nhỏ của ký hiệu thiết bị
Máy chủ gửi một reset USB lần nữa
Máy chủ chỉ định một địa chỉ duy nhất tới thiết bị và gửi một yêu cầu Set Address tới
thiết bị Tại vị trí này máy chủ sẽ rỗi để reset bất kỳ thiết bị khác mới hơn được gắn vào bus USB
Máy chủ gửi một yêu cầu Get Device Descriptor để lấy lại ký hiệu thiết bị trọn vẹn,
tập hợp thông tin như là nhà sản xuất, loại thiết bị và kích thước gói điều khiển tối
đa
Máy chủ gửi một yêu cầu Get Configuration Descriptors để nhận dữ liệu về cấu hình
của thiết bị, như là các yêu cầu công suất, các kiểu và số lượng giao tiếp được hỗ trợ
Máy chủ có thể yêu cầu các ký hiệu bổ sung từ thiết bị
Sự truyền dữ liệu ban đầu giữa máy chủ và thiết bị được tiến hành bằng cách sử dụng kiểu truyền điều khiển của luồng dữ liệu Ban đầu, thiết bị được định địa chỉ, nhưng nó ở trạng thái chưa được cấu hình Sau đó máy chủ tập hợp đủ thông ti về thiết bị, nó nạp phần
mềm điều khiển thiết bị phù hợp mà nó cấu hình thiết bị bằng cách gửi yêu cầu Set
Configuration Tại thời điểm này, thiết bị đã được cấu hình và nó sẵn sàng đáp ứng đối với
các yêu cầu định rõ cho thiết bị, chẳng hạn nó có thể nhận và gửi dữ liệu tới máy chủ
8.3.5 Các loại ký kiệu mô tả
Tất cả các thiết bị USB có một sự phân cấp các ký hiệu mà nó mô tả nhiều loại đặc trưng của thiết bị: mã nhận dạng nhà sản xuất, phiên bản của thiết bị, phiên bản của USB mà nó hỗ trợ, thiết bị gì, các yêu cầu công suất, số và loại các điểm kết, …
Các ký hiệu USB phổ biến là: các ký hiệu thiết bị, các ký hiệu cấu hình, các ký hiệu giao tiếp, các ký hiệu HID, các ký hiệu điểm kết Các ký hiệu trong cấu trúc phân cấp theo hình 8.39