Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
BÁO CÁO THỰC TẬP
ĐỀ TÀI : Tìm hiểu về truyền thông nối tiếp trong vi điều khiển
pic18f4520 và thiết kế modul thí nghiệm.
I. Tổng quan về vi điều khiển pic18f4520
Bộ vi điều khiển ghi tắt là Micro-controller là mạch tích hợp trên một chip có
thể lập trình được, dùng để điều khiển hoạt động của hệ thống. Theo các tập lệnh
của người lập trình, bộ vi điêu khiển tiến hành đọc, lưu trữ thông tin, xử lý thông
tin, đo thời gian và tiến hành đóng mở một cơ cấu nào đó .
Trong các thiết bị điện và điện tử các bộ vi điều khiển điều khiển hoạt động của ti
vi, máy giặt, đầu đọc lase, lò vi ba, điện thoại …Trong hệ thống sản xuất tự động,
bộ vi điều khiển sử dụng trong robot, các hệ thống đo lường giám sát .Các hệ thống
càng thông minh thì vai trò của vi điều khiển ngày càng quan trọng. Hiện nay trên
thị trường có rất nhiều họ vi điều khiển như: 6811 của Motorola, 8051 của Intel, Z8
của Zilog, PIC của Microchip Technology …
Trong đề tài này nghiên cứu về pic18f4520 vì nó có nhiều ưu điểm hơn các loại vi
điều khiển các như : ADC 10 BÍT, PWM 10 BÍT, EEPROM 256 BYTE,
COMPARATER, …ngoài ra nó còn được các trường đại học trên thế giới đặc biệt
là ở các nước Châu Âu hầu hết xem PIC là 1 môn học trong bộ môn vi diều khiển
nói vậy các bạn cũng thấy sự phổ biến rộng rãi của nó. Ngoài ra PIC còn được rất
nhiều nhà sản xuat phần mềm tạo ra các ngôn ngữ hổ trợ cho việc lập trình ngoài
ngôn ngữ Asembly như :MPLAB, CCSC, HTPIC, MIRKROBASIC,…
Hiện nay có khá nhiều dòng PIC và có rất nhiều khác biệt về phần cứng, nhưng
chúng ta có thể điểm qua một vài nét như sau :
• 8/16 bít CPU, xây dựng theo kiến trúc trên kiến trúc Harvard sửa đổi, với tập
lệnh rút gọn (do vậy PIC thuộc loại RISC).
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
• Flash và Rom có thể tuỳ chọn 256 byte đến 256 kbybe
• Các cổng xuất/nhập (mức lôgic thường từ 0v đến 5v, ứng với mức logic 0 và
1)
• 8/16 bít timer
• Các chuẩn giao tiếp ngoại vi nối tiếp đồng bộ/ không đồng bộ
• Bộ chuyển đổi ADC
• Bộ so sánh điện áp
• MSSP Pripheral dùng cho các giao tiếp I2C, SPI
• Bộ nhớ nội EEPROM - có thể ghi/ xoá lên tới hàng triệu lần
• Modul điều khiển động cơ, đọc encoder
• Hỗ trợ giao tiếp USB
• Hỗ trợ điều khiển Ethernet
• Hỗ trợ giao tiếp CAN
• Hỗ trợ giao tiếp LIN
• Hỗ trợ giao tiếp IRDA
• DSP những tính năng xử lý tín hiệu số
1. Sơ đồ chân vi điều khiển pic18f4520
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
2. Các thông số về vi điều khiển pic18f4520
• CPU tốc độ cao có 75 cấu trúc lệnh, nếu được cho phép có thể kéo dài đến
83 cấu trúc lệnh.
• Hầu hết các cấu trúc lệnh chỉ mất một chu kỳ máy, ngoại trừ lệnh rẽ nhánh
chương trình mất hai chu kỳ máy
• Tốc độ làm việc: xung clock đến 40MHz, tốc độ thực thi lệnh 125ns
• Bộ nhớ chương trình ( flash program memory) là 32kbyte
• Bộ nhớ dữ liệu SRAM là 1536 byte
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
• Bộ nhớ dữ liệu EEPROM là 256 byte
• 5 port Vào hoặc ra
• 4 bộ timer
• 1 capture/compare/PWM modules
• 1 enhanced capture/ compare/PWM modules
• Giao tiếp nối tiếp : MSSP, enhanced USART.
• Cổng giao tiếp song song.
• 13 bộ Analog to Digital module 10 bít
• POR,BOR
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
+ Bộ nhớ Flash có khả năng ghi xoá được 100.000 lần.
+ Bộ nhớ EEPROM với khả năng ghi xoá được 1.000.000 lần.
+ Flash/Dữ liệu bộ nhớ EEPROM có thể lưu trữ hàng 100 năm.
+ Khả năng tự nạp chương trình với sự điều khiển của phần mềm.
+ Watchdog timer với bộ dao động trong.
+ Chức năng bảo mật mã chương trình .
+ Chế độ SLEEP.
+ Có thể hoạt động với nhiều dạng Oscillator khác nhau.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
3. Sơ đồ khối của vi điều khiển pic18f4520
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
4. Sơ đồ khối bộ nhớ dữ liệu pic18f4520
II. Truyền thông nối tiếp
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
1. giới thiệu
CHủ SYNCHRONOUS SERIAL PORT (MSSP) MODULE
- SPI
- I2C
ENHANCED UNIVERSAL SYNCHRONOUS RECEIVER RANSMITTER
(EUSART)
2. Tổng quan về khối MSSP
MSSP là khối giao diện đồng bộ nối tiếp, được sử dụng để giao tiếp với các
thiết bị ngoại vi khác hoặc các vi điều khiển khác. Các thiết bị ngoại vi như là
EFPROM, thanh ghi dịch, điều khiển hiện thị, các khối chuyển đổi A/D, . . .
Các chế độ hoạt động của MSSP :
+ Chế độ SPI
+ Chế độ I
2
C
Trong chế độ I
2
C phần cứng đã hỗ trợ các chế độ sau :
+ Chế độ chủ.
+ Chế độ đa chủ.
+ Chế độ tớ.
Thanh ghi điều khiển
Khối MSSP có 3 thanh ghi liên quan đến đó là : thanh ghi trạng thái
(SSPSTAT), và 2 thanh ghi điều khiển (SSPCON1 và SSPCON2 ). Thiết lập các
thanh ghi để xác định chế độ làm việc của khối MSSP là SPI hoặc I
2
C.
2.1 SPI
2.1.1 Giới thiệu về giao tiếp SPI
Chế độ SPI cho phép 8 bít dữ liệu được truyền và nhận đồng thời. Tất cả 4
chế độ của khối SPI đều được hỗ trợ. Có 3 chân điển hình cho chuẩn giao tiếp này :
+ Ngõ ra dữ liệu dạng nối tiếp RC5/SDO.
+ Ngõ vào dữ liệu dạng nối tiếp RC4/SDI/SDA.
+ xung đồng bộ nối tiếp RC3/SCK/SCL.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Trong chế độ tớ chân thứ 4 có thể được sử dụng để điều khiển đó là : Chân chọn
đối tượng giao tiếp : RA5/AN4/
SS
/HLVDIN/C2OUT.
Hình 1:
Biểu diễn sơ đồ khối của khối MSSP khi điều khiển trong khối SPI
2.1.2 Khởi tạo chế độ SPI
Khi khởi tạo chế độ SPI ta cần thiết đặt cho các bít SSPCON<5:0> và
SSPSTAT<7:6> để cho phép các chế độ hoạt động và các đặc tính trong chế độ
SPI, đó là :
+ Chế độ chủ
+ Chế độ tớ
+ Cực tính xung clock
+ Pha lấy mẫu dữ liệu vào
+ Sườn xung clock
+ Xung nhip ( chỉ có trong chế độ chủ )
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Lựa chọn chế độ tớ (chỉ có trong chế độ tớ )
MSSP bao gồm thanh ghi dịch truyền nhận (SSPSR) và thanh ghi đệm
(SSPBUF) , SSPSR dùng để dịch dữ liệu vào và ra, đầu tiên là bít msb. Khi quá
trình nhận dữ liệu sẵn sàng, dữ liệu sẽ được ghi vào SSPSR sau đó dữ liệu sẽ được
giữ ở SSPBUF. Khi phát hiền bộ đệm đầy cờ BF (SSPSTAT<0>) và bít cho phép
ngắt được đặt lên. Bộ đệm dữ liệu 2 lớp cho phép nhận tiếp 1 byte dữ liệu trước khi
đọc. bất kỳ sự ghi nào tới thanh ghi SSPBUF trong thời gian truyền nhận dữ liệu sẽ
bị lờ đi và bít phát hiện xung đột WCOL (SSPCON1<7>) sẽ được đặt lên. Bít
WCOL phải được xóa bằng phần mềm để xác định việc ghi tiếp theo lên thanh ghi
SSPBUF. SSPSR không thể đọc hoặc ghi trực tiếp mà chỉ có thể truy cập thông
qua thanh ghi SSPBUF.
2.1.3 Thanh ghi
Khối MSSP có 4 thanh ghi điều khiển khi hoạt động ở chế độ SPI :
+ Thanh ghi điều khiển 1 ( SSPCON1)
+ Thanh ghi trạng thái ( SSPSTAT )
+ Thanh ghi đệm truyền hoặc nhận (SSPBUF)
+ Thanh ghi dịch dữ liệu ( SSPSR) ( không trực tiếp điều khiển được )
SSPCON1 và SSPSTAT là thanh ghi điều khiển và thanh ghi trạng thái trong chế
độ SPI. Thanh ghi SSPCON1 có thể đọc và ghi. 6 bít dưới của thanh ghi SSPSTAT
chỉ có thể đọc, 2 bít trên có thể đọc và ghi.
Hình 2 SSPSTAT : Thanh ghi trạng thái (chế độ SPI )
Bít 7 SMP : bít lấy mẫu
SPI chế độ chủ :
1= lấy mẫu dữ liệu vào thời điểm cuối của dữ liệu ra.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
0= lấy mẫu dữ liệu vào thời điểm giữa của dữ liệu ra.
SPI chế độ tớ :
SMP phải được xóa khi SPI được sử dụng ở chế độ tớ.
Bít 6 CKE : bít chọn xung clock
1= Truyền khi xuất hiện sự chuyển tiếp từ tích cực đến trạng thái nghỉ.
0= Truyền khi xuất hiện sự chuyển tiếp từ trạng thái nghỉ lên tích cực.
Bít 5 D/
A
: Dữ liệu hoặc địa chỉ
Chỉ sử dụng trong chế độ I
2
C .
Bít 4 P : bít stop
Chỉ sử dụng trong chế độ I
2
C.
Bít 3 S : bít bắt đầu
Chỉ sử dụng trong chế độ I
2
C.
Bít 2 R/
W
: đọc hoặc ghi thông tin
Chỉ sử dụng trong chế độ I
2
C.
Bít 1 UA : bít cập nhật địa chỉ
Chỉ sử dụng trong chế độ I
2
C.
Bít 0 BF : bít trạng thái báo đầy bộ đệm ( duy nhất ở chế độ truyền )
1= Truyền hoàn tất ( SSPBUF đầy )
0= Truyền không hoàn tất ( SSPBUF rỗng)
Hình 3 SSPCON1 : Thanh ghi điều khiển khối MSSP (trong chế độ SPI)
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Bít 7 WCOL : bít phát hiện xung đột khi ghi
1= Thanh ghi SSPxBUF được ghi trong khi vẫn có sự truyền từ trước.
0= không có xung đột.
Bít 6 SSPOV : bít cờ tràn nhận
SPI chế độ tớ :
1= 1 byte được nhận trong khi dữ liệu cũ vẫn còn trong thanh ghi SSPBUF.
Trong trường hợp này dữ liệu trong SSPSR bị ghi đè lên. Tràn chỉ xuất
hiện duy nhất trong chế độ tớ. Người sử dụng phải đọc SSPBUF để dữ liệu
truyền là duy nhất, tránh cờ tràn được đặt lên.( cờ tràn phải xóa bằng phần
mềm).
0= không có sự tràn xẩy ra.
Bít 5 SSPEN : bít cho phép truyền thông nối tiếp
1= cho phép cổng nối tiếp và thiết lập SCK, SDO, SDI, và
SS
như là các
chân của cổng nối tiếp.
0= không cho phép cổng nối tiếp và thiết lập các chân như là chân vào hoặc
ra.
Bít 4 CKP : bít chọn cực tính xung clock.
1= trạng thái nghỉ khi xung ở mức cao.
0= trạng thái nghỉ khi xung ở mức thấp.
Bít 3 SSPM3 : SSPM0 : các bít chọn chế độ
0101= SPI chế độ tớ (SCK là chân xung clock,
SS
không cho phép hoạt
động,
SS
sử dụng như chân vào hoặc ra ).
0100= SPI chế độ tớ (SCK là chân xung clock,
SS
cho phép hoạt động).
0011 : SPI chế độ chủ ( xung clock = đầu ra TMR2/2 ).
0010 : SPI chế độ chủ (xung clock = Fosc/64).
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
0001 : SPI chế độ chủ ( xung clock =Fosc /16).
0000 : SPI chế độ chủ (xung clock =Fosc/4).
2.1.4 Cho phép SPI vào hoặc ra
Thiết lập thanh ghi SSPCON và bít SSPEN ( SSPCON1<5>) được đặt lên để
cho phép cổng nối tiếp. Việc thiết lập này cho phép SDI, SDO, SCK,
SS
là các
chân của cổng nối tiếp. Xác định hướng dữ liệu của các chân này được thiết lập
trong thanh ghi trisc :
+ SDI : tự động điều khiển bởi khối SPI
+ SDO : xóa bít thứ 5 trong thanh ghi TRISC
+ SCK : (chế độ chủ ) phải xóa bít thứ 3 trong thanh ghi TRISC
+ SCK : (chế độ tớ ) phải đặt bít thứ 3 trong thanh ghi TRISC.
+
SS
: phải đặt bít thứ 5 trong thanh ghi TRISC
Sơ đồ kết nối điển hình :
Hinh 4
sơ đồ kết nối SPI chủ hoặc tớ
Hình 4 biểu diễn sơ đồ kết nối giữa 2 vi điều khiển. Vi điều khiển chủ (processor
1) khởi tạo quá trình truyền dữ liệu bằng việc gửi tín hiệu xung đồng bộ SCK. Dữ
liệu sẽ được dịch từ cả hai thanh ghi SSPSR đưa ra ngoài nếu có một cạnh của
xung đồng bộ tác động và ngưng dịch khi có tác động của cạnh còn lại. Cả hai khối
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
chủ và tớ nên được ấn định chung các quy tắc tác động của xung clock đồng bộ để
dữ liệu có thể dịch chuyển đồng thời.
2.1.5 Chế độ chủ
Vi điều khiển chủ có thể khởi tạo quá trình truyền dữ liệu ở bất cứ thời điểm
nào bởi vì nó điều khiển xung đồng bộ SCK. Trong chế độ chủ, dữ liệu được
truyền/nhận ngay khi thanh ghi SSPSR được ghi lên. Nếu chỉ cần nhận dữ liệu, lúc
này chân SDO không có tác dụng ta có thể ấn định nó là ngõ vào ( đặt bít
TRISC<5>), dữ liệu sẽ được dịch vào thanh ghi SSPSR theo một tốc độ được định
sẵn cho xung clock. Sau khi nhận được 1 byte dữ liệu hoàn chỉnh, byte dữ liệu sẽ
được đưa vào thanh ghi SSPBUF, bít BF được đặt và ngắt xẩy ra.
Trong chế độ chủ, tốc độ của xung đồng bộ clock được chọn :
+ Fosc/4
+ Fosc/16
+ Fosc/64
+ Đầu ra timer2/2
Điều này cho phép tốc độ tối đa truyền dữ liệu ở 40 MHZ hoặc 10000 Mbps.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Hình 5
Giản đồ xung của chế độ chủ và các tác động của các bít điều khiển
2.1.6 Chế độ tớ
Trong chế độ này, dữ liệu được truyền và nhận khi có xung đồng bộ bên
ngoài xuất hiện ở chân SCK. Khi nhận đủ 8 bít thì cờ ngắt SSPIF được đặt lên.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Trước khi cho phép khối SPI ở chế độ tớ thì đường xung clock phải ở trạng thái
nghỉ (idle), ta có thể quan sát đường này bằng việc quan sát quá trình đọc tại chân
SCK. Trạng thái idle được xác định bởi bít CKP ( SSPCON1<4> ).
Chế độ này hoạt động ngay cả khi vi điều khiển đang ở chế độ ngủ. Ngắt truyền
nhận cho phép “đánh thức” vi điều khiển
Hình 6
Giản đồ xung chuẩn giao tiếp SPI ( chế độ tớ )
2.1.7 Tóm lược
+ Thanh ghi INTCON : Chứa bít cho phép ngắt toàn cục (GIE VÀ PEIE )
+ Thanh ghi PIR1 : Chứa bít SSPIF
+ Thanh ghi PIE1 : Chứa bít SSPIE
+ Thanh ghi IPR1 : Chứa bít SSPIP
+ Thanh ghi TRISA : Điều khiển xuất nhập chân
RA4/AN4/
SS
/HLVDIN/C2OUT
+ Thanh ghi TRISC : Điều khiển xuất nhập PORTC.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Thanh ghi SSPBUF : Thanh ghi đệm dữ liệu
+ Thanh ghi SSPCON1 : Điều khiển chuẩn giao tiếp SPI
+ Thanh ghi SSPSTAT : Chứa các bít chỉ thị trạng thái chuẩn giao tiếp SPI
2.2 I2C
2.2.1 Giới thiệu về giao tiếp I2C
Đây là một chế độ khác của khối MSSP. Chuẩn giao tiếp I2C cũng có
Chế độ chủ , tớ và cũng được kết nối với ngắt. Chuẩn giao tiếp I2C sử dụng 2 chân
để truyền nhận dữ liệu :
+ RC3/SCK/SCL : Chân truyền dẫn nối tiếp xung clock
+ RC4/SDI/SDA : Chân truyền dẫn nối tiếp dữ liệu
Hình 7 :
Sơ đồ khối MSSP ( Chế độ I2C )
2.2.2 Các chế độ hoạt động
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Khối MSSP được cho phép bởi bít SSPEN (SSPCON1<5>). Giao tiếp I2C
có nhiều chế độ hoạt động và được điều khiển bởi các bít SSPCON1<3:0> bao gồm
:
+ I2C chế độ chủ, xung clock = (Fosc/4 )*(SSPADD+1).
+ I2C chế độ tớ, 7 bít địa chỉ.
+ I2C chế độ tớ, 10 bít địa chỉ.
+ I2C chế độ tớ, 7 bít địa chỉ, cho phép ngắt khi phát hiện bít start và stop .
+ I2C chế độ tớ, 10 bít địa chỉ, cho phép ngắt khi phát hiện bít start và stop .
+ I2C điều khiển chế độ chủ bằng phần mềm, chế độ tớ thì không có chế độ này.
Lựa chọn chế độ I2C và đặt bít SSPEN, các chân SCL và SDA sẽ ở trạng thái cực
thu hở. Do đó phải kéo điện trở ngoài, đồng thời cần thiết đặt các giá trị phù hợp
cho các bít trong thanh ghi TRISC đối với các chân SDA và SCL.
2.2.3 Thanh ghi
Khối MSSP có 6 thanh ghi để điều khiển chế độ I2C. Các thanh ghi đó là :
+ Thanh ghi điều khiển MSSP 1 (SSPCON1)
+ Thanh ghi điều khiển MSSP 2 (SSPCON2)
+ Thanh ghi trạng thái MSSP (SSPSTAT)
+ Thanh ghi đệm truyền nhận nối tiếp (SSPBUF)
+ Thanh ghi dịch MSSP (SSPSR) (không trưc tiếp truy cập).
+ Thanh ghi địa chỉ MSSP (SSPADD)
Các thanh ghi điều khiển SSPCON1 và SSPCON2 có thể đọc và ghi. Thanh ghi
SSPSTAT chỉ cho phép đọc và ghi ở 2 bít đầu, 6 bít còn lại chỉ cho phép đọc.
Thanh ghi SSPBUF chứa dữ liệu sẽ được truyền đi hoặc nhận được và đóng vai trò
như một thanh ghi đệm cho thanh ghi dịch dữ liệu SSPSR. Thanh ghi SSPSR
không thể truy xuất trực tiếp được, muốn truy xuất nó ta phải thông qua thanh ghi
SSPBUF.
Thanh ghi SSPADD chứa địa chỉ của thiết bị ngoại vi cần truy xuất dữ liệu của I2C
khi hoạt động ở chế độ tớ. Khi hoạt động ở chế độ chủ, thanh ghi SSPADD chứa
giá trị tạo ra tốc độ baud cho xung clock dùng để truyền nhận dữ liệu.
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
Trong quá trình nhận dữ liệu, cả 2 thanh ghi SSPSR và SSPBUF tạo thành bộ đệm
nhận dữ liệu 2 lớp. khi SSPSR thực hiện nhận 1 byte hoàn tất, nó sẽ ghi tới thanh
ghi SSPBUF và cờ ngắt SSPIF được đặt.
Trong quá trình truyền, chúng không đóng vai trò là bộ đệm dữ liệu 2 lớp. Khi ghi
tới SSPBUF lúc này sẽ ghi tới cả SSPBUF và SSPSR.
Hình 8 SSPSTAT : Thanh ghi trạng thái MSSP(chế độ I2C)
Bít 7 SMP : bít điều khiển tốc độ
Trong chế độ chủ hoặc chế độ tớ :
1= không điều khiển tốc độ, để chế độ tốc độ chuẩn (100 KHZ và 1MHZ ).
0= cho phép điều khiển tốc độ, tốc độ cao (400 KHZ)
Bít 6 CKE : bít chọn SMBUS
Trong chế độ chủ hoặc chế độ tớ :
1= cho phép đầu vào SMBUS
0= không cho phép đầu vào SMBUS
Bít 5 D/
A
bít dữ liệu hoặc bít địa chỉ
Trong chế độ chủ :
Dùng để dự chữ.
Trong chế độ tớ :
1= byte cuối của quá trình truyền hoặc nhận là dữ liệu.
0= byte cuối của quá trình truyền hoặc nhận là địa chỉ.
Bít 4 P : bít stop
1= xác định bít stop
0= không xác định bít stop
Bít 3 S : bít start
1= phát hiện bít start
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
0= không phát hiện bít start
Bít 2 R/
W
: đọc hoặc ghi thông tin
Trong chế độ tớ :
1= đọc.
0= ghi.
Trong chế độ chủ :
1= cho phép truyền.
0= không cho phép truyền.
Bít 1 UA : bít cập nhật địa chỉ ( chế độ tớ 10 bít )
1= cập nhật địa chỉ vào thanh ghi SSPADD
0= không cập nhật địa chỉ
Bít 0 BF : bít báo trạng thái đầy bộ đệm
Trong chế độ truyền :
1= SSPBUF đầy.
0= SSPBUF rỗng.
Trong chế độ nhận :
1= SSPBUF đầy ( không bao gồm
ACK
và bít stop ).
0= SSPBUF rỗng ( không bao gồm
ACK
và bít stop ).
Hình 9 SSPCON1 : Thanh ghi điều khiển 1 (chế độ I2C)
Bít 7 WCOL : bít phát hiện xung đột lúc ghi
Truyền trong chế độ chủ :
1= dữ liệu truyền được đưa vào thanh ghi SSPBUF trong khi chế độ truyền
dữ liệu của I2C chưa sẵn sàng.
0= không có sự xung đột.
Truyền trong chế độ tớ :
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
1= dữ liệu mới được đưa vào thanh ghi SSPBUF trong khi chưa truyền
xong dữ liệu cũ.
0= không có sự xung đột.
Trong chế độ nhận (chế độ chủ hoặc tớ ) :
Không sử dụng đến bít này.
Bít 6 SSPOV : bít cờ tràn nhận
Chế độ nhận :
1= 1 byte dữ liệu mới được nhận trong khi dữ liệu cũ vẫn còn trong thanh
ghi SSPBUF.
0= không có tràn.
Chế độ truyền :
Không sử dụng đến bít này.
Bít 5 SSPEN : bít cho phép cổng nối tiếp
1= cho phép cổng nối tiếp và thiết lập SDA và SCL là các chân của cổng
nối tiếp.
0= không cho phép cổng nối tiếp và thiết lập chúng như các chân vào ra.
Bít 4 CKP : SCK : bít điều khiển tác động
Chế độ tớ :
1= cho xung clock tác động
0= giữ xung clock ở mức thấp (để đảm bảo thời gian thiết lập dữ liệu)
Chế độ chủ :
Không sử dụng trong chế độ này.
Bít 3-0 SSPM3 : SSPM0 : các bít lựa chọn chế độ hoạt động cổng nối tiếp
1111 : I2C chế độ tớ, 10 bít địa chỉ, cho phép ngắt khi phát hiện bít start và
bít stop.
1110 : I2C chế độ tớ, 7 bít địa chỉ, cho phép ngắt khi phát hiện bít start và
bít stop.
1011 : dùng phần mềm điều khiển chế độ chủ (chế độ tớ không dùng)
1000 : I2C chế độ chủ, clock = Fosc/(4*(SSPADD+1))
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
0111 : I2C chế độ tớ , 10 bít địa chỉ.
0110 : I2C chế độ tớ, 7 bít địa chỉ.
Hình 10 SSPCON2 : Thanh ghi điều khiển MSSP 2(chế độ I2C)
Bít 7 GCEN : bít cho phép gọi chung. (duy nhất trong chế độ tớ )
1= cho phép ngắt khi địa chỉ 0000h được nhận vào trong SSPSR.
0= không cho phép gọi địa chỉ trên.
Bít 6 ACKSTAT : bít trạng thái
ACK
(duy nhất trong chế độ chủ : truyền
truyền dữ liệu )
1= chưa nhận được xung
ACK
từ tớ
0= nhận được xung từ tớ.
Bít 5 ACKDT : bít dữ liệu
ACK
(chỉ có trong chế độ chủ : nhận dữ liệu )
1= không có xung
ACK
0= có xung
ACK
Bít 4 ACKEN : bít cho phép xung ACK.(chỉ có trong chế độ chủ: nhận dữ liệu )
1= khởi tạo xung
ACK
trên các chân SDA và SCL. Bít dữ liệu truyền
ACKDT ). Tự động xóa bằng phần cứng.
0= không cho phép xung ACK.
Bít 3 RCEN : bít cho phép nhận (duy nhất trong chế độ chủ )
1= cho phép nhận dữ liệu.
0= không cho phép nhận dữ liệu.
Bít 2 PEN : bít cho phép điều kiện stop.
1= khởi tạo điều kiện stop trên các chân SDA và SCL. Tự động xóa bằng
phần cứng.
0= không cho phép điều kiện stop.
Bít 1 RSEN : bít cho phép điều kiện start (duy nhất trong chế độ chủ )
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
1= khởi tạo điều kiện start trên các chân SDA và SCL. Tự động xóa bằng
phần cứng.
0= không cho phép điều kiện start.
Bít 0 SEN : bít cho phép điều kiện start hoặc cho phép khóa.
Chế độ chủ :
1= khởi tạo điều kiện start trên các chân SDA và SCL. Tự động xóa bằng
phần cứng.
0= không cho phép điều kiện start.
Chế độ tớ :
1= cho phép khóa xung clock từ chế độ tớ truyền và nhận.
0= không cho phép khóa xung clock.
2.2.4 Chế độ chủ
Chế độ chủ được cho phép bởi việc cài đặt hoặc xóa các bít SSPM trong
thanh ghi SSPCON1 và cài đặt bít SSPEN. Trong chế độ chủ các chân SDA và
SCL được điều khiển bởi với phần cứng MSSP.
Hoạt động của chế độ chủ được hỗ trợ bởi việc phát sinh các ngắt khi phát hiện bít
start và stop. Bít start và stop được xóa khi reset hoặc khi khối MSSP không hoạt
động. Việc điều khiển giao tiếp I2C có thể tiếp tục khi bít stop được đặt hoặc khi
bus rỗng với cả hai bít start và stop đều xóa.
Điều khiển chế độ chủ bằng phần mềm người sử dụng ghi mã điều khiển tất cả
giao tiếp bên trong 2 bít start và stop.
1 chế độ chủ được cho phép, người sử dụng phải có 6 thao tác:
+ Có điều kiện bít start trên chân SDA và SCL.
+ Điều kiện lặp lại bít start trên chân SDA và SCL.
+ Thanh ghi SSPBUF được khởi tạo truyền dữ liệu hoặc địa chỉ.
+ Thiết lập cổng giao tiếp I2C để nhận dữ liệu.
+ Xuất hiện xung
ACK
khi kết thúc nhận 1 byte dữ liệu.
+ Xuất hiện bít stop trên chân SDA và SCL.
Các sự kiện sau sẽ gây ra ngắt MSSP : Bít cờ và SSPIF được đặt
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
+ Xuất hiện bít start.
+ Xuất hiện bít stop.
+ Byte dữ liệu chuyển đổi truyền/nhận.
+ Truyền xung
ACK
.
+Lặp lại bít start.
Hình 11
Sơ đồ khối MSSP (I2C chế độ chủ )
2.2.4.1 Hoạt động của chế độ chủ:
I2C chủ đóng vai trò tích cực trong quá trình giao tiếp và điều khiển các I2C
tớ thông qua việc chủ động tạo ra các xung giao tiếp và các điều kiện start, stop khi
truyền nhận dữ liệu. Một byte dữ liệu có thể được bắt đầu bằng điều kiện start, kết
thúc bằng điều kiện stop hoặc bắt đầu và kết thúc với cùng một điều kiện khởi động
lặp lai (repeated start ).
Quá trình truyền trong chế độ chủ, dữ liệu nối tiếp được xuất ra tại chân SDA trong
khi SCL xuất ra xung clock đồng bộ nối tiếp. Byte đầu tiên truyền đi sẽ chứa địa
chỉ của thiết bị nhận (7 bít) và 1 bít R/
W
. Trong trường hợp này R/
W
sẽ có mức
logic là 0, dữ liệu 8 bít thì truyền 8 bít trong 1 lần, sau đó mỗi byte tiếp theo được
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
truyền và 1 bít
ACK
được nhận lại từ tớ khi tớ nhận được đủ 1 byte. Điều kiện start
và stop được xuất ra chỉ ra quá trình bắt đầu và kết thúc của 1 khung truyền nối
tiếp.
Quá nhận dữ liệu trong chế độ chủ, byte đầu tiên được truyền chứa địa chỉ của thiết
bị tớ (7 bít ) và 1 bít R/
W
. Trong trường hợp này bít R/
W
sẽ có giá trị la 1. Vời giá
trị của bít R/
W
là 1 thì thiết bị tớ hiểu rằng nó sẽ nhận dữ liệu. Dữ liệu nối tiếp
được nhận tại chân SDA, trong khi đầu ra xung clock tại chân SCL. 8 bít dữ liệu
được nhận trong 1 lần, sau mỗi byte được nhận thì 1 bít
ACK
được truyền, điều
kiện start và stop được xuất ra chỉ ra quá trình bắt đầu và kết thúc của 1 khung
truyền nối tiếp.
Tốc độ người sử dụng trong chế độ I2C để tần số của xung clock là 100 KHZ,
400KHZ hoặc 1MHZ
1 quá trình truyền điển hình như sau :
+ Sử dụng điều kiện start bằng việc cài đặt bít SEN (SSPCON2<0> ) cho phép
Start.
+ Đặt bít SSPIF, khối MSSP sẽ chờ sự xuất hiện của bít start trước khi có bất kỳ
thao tác nào xẩy ra.
+ Người sử dụng sẽ đưa địa chỉ của tớ vào thanh ghi SSPBUF để truyền.
+ Địa chỉ được dịch ra ngoài tại chân SDA.
+ Khối MSSP sẽ nhận bít
ACK
từ thiết bị tớ và ghi giá trị đó vào trong thanh ghi
SSPCON2 (SSPCON2<6>).
+ Khối MSSP sẽ phát sinh 1 ngắt ở xung thứ 9 bằng việc cài đặt bít SSPIF.
+ Người sử dụng cập nhật 8 bít dữ liệu trong thanh ghi SSPBUF.
+ Dữ liệu được dịch ra ngoài tại chân SDA cho đến khi 8 bít được truyền xong.
+ Khối MSSP sẽ nhận bít
ACK
từ thiết bị tớ và ghi giá trị đó vào trong thanh ghi
SSPCON2 (SSPCON2<6>).
+ Khối MSSP sẽ phát sinh 1 ngắt ở xung thứ 9 bằng việc cài đặt bít SSPIF.
+ Người sử dụng tạo ra 1 điều kiện stop bằng việc cài đặt bít PEN
Trường Đại Học Công Nghiệp Hà Nội Khoa điện tử
(SPCON2<2>) cho phép stop.
+ Ngắt được sinh ra từ điều kiện stop thì hoàn tất 1 khung truyền nối tiếp.
2.2.4.2 Giao tiếp I2C chế độ chủ trong quá trình truyền dữ liệu
Quá trình truyền dữ liệu, xung clock sẽ được đưa tới chân SCL và dữ liệu
được đưa tới chân SDA. Byte đầu tiên là byte xác định địa chỉ, 7 bít dữ liệu hoặc 1
nửa của 10 bít địa chỉ được ghi tới thanh ghi SSPBUF. Điều này sẽ đặt bít cờ bộ
đệm đầy, bộ đếm tạo xung clock nối tiếp BRG bắt đầu đếm và bắt đầu truyền . Mỗi
bít địa chỉ hoặc dữ liệu sẽ được dịch ra qua chân SDA tại mỗi sườn xuống của xung
clock. Sau khi 8 bít được dịch hết ra ngoài. I2C chủ ngưng tác động lên chân SDA
để chờ tín hiệu từ I2C tớ ( tín hiệu xung
ACK
) . Tại cạnh xuống của xung clock
thứ 9, I2C chủ sẽ lấy mẫu tín hiệu từ chân SDA để kiểm tra địa chỉ đã được I2C tớ
nhận dạng chưa. Trạng thái
ACK
được đưa vào bít ACKSTAT (SSPCON2<6>).
Cũng tại thời điểm bít BF sẽ tự động được xóa, cờ ngắt SSPIF được đặt và BRG
tạm ngưng hoạt động cho tới khi dữ liệu hoặc địa chỉ tiếp theo được đưa vào thanh
ghi SSPBUF, dữ liệu hoặc địa chỉ tiếp tục được truyền đi tại cạnh xuống của xung
clock tiếp theo.
Bít cờ trạng thái BF :
Trong quá trình truyền, bít BF (SSPSTAT<0>) được đặt khi CPU ghi tới
SSPBUF và được xóa khi tất cả 8 bít được dịch hết ra ngoài.
Bít cờ trạng thái WCOL :
Nếu ghi tới thanh ghi SSPBUF khi đang truyền thì bít WCOL được đặt và
nội dung bộ đệm không thay đổi. Bít WCOL phải được xóa bằng phần mềm.
Bít cờ trạng thái ACKSTAT :
Trong quá trình truyền, bít ACKSTAT (SSPCON2<6>) được xóa khi thiết bị tớ
gửi một xung
ACK
(
ACK
=0) và được đặt khi thiết bị tớ không gửi xung
ACK
(
ACK
=1). Thiết bị tớ gửi 1 xung
ACK
khi nhận đúng địa chỉ của nó hoặc khi nhận
dữ liệu.