Professional Documents
Culture Documents
I2C TWI Summary
I2C TWI Summary
I2C
Tổng quan
I2C (Inter-Intergrated Circuit, ñọc là eye-two-see hoặc eye-squared-see) là chuẩn
giao tiếp 2 dây (còn gọi là Two-wired Serial interface) do Philips ñưa ra. Mục tiêu là tạo
kết nối ñơn giản giữa các IC với các IC khác hoặc với các thiết bị ngoại vi.
Chuẩn I2C ñược hỗ trợ bởi nhiều nhà sản xuất IC và trở thành chuẩn công nghiệp
trong giao tiếp ñiều khiển.
Hoạt ñộng
Chế ñộ hoạt ñộng
Giao tiếp I2C có các chế ñộ hoạt ñộng là:
o 1 Master và 1 Slave
o 1 Master và nhiều Slave
o nhiều Master và nhiều Slave
Ở ñây chỉ ñề cập ñến chế ñộ cơ bản nhất là Master - Slave.
I2C sử dụng 2 ñường nối dạng cực máng hở là SDA - Serial Data và SCL - Serial
Clock, do ñó cần ñược nối với ñiện trở kéo lên. ðiện áp sử dụng thường là +5V hoặc
+3.3V.
SDA là chân truyền dữ liệu và theo 2 hướng, trong khi ñó, SCL là chân truyền
xung clock và chỉ theo 1 hướng.
Trang 1
Trong kết nối I2C thì Master giữ vai trò ñiều khiển và giữ nhịp cho toàn hệ thống
bằng xung clock trên chân SCL. Trong khi ñó Slave hoàn toàn thụ ñộng và ñược ñiều
khiển bởi Master (chuẩn không cần chỉnh ☺). Master có thể truyền dữ liệu cho Slave
hoặc nhận dữ liệu từ Slave. Tuy nhiên, các Slave không thể trực tiếp làm việc với nhau
mà chỉ có thể thông qua Master.
ðịa chỉ
Mỗi thiết bị tham gia vào giao tiếp I2C có một ñịa chỉ duy nhất, bao gồm 7 bits.
ðịa chỉ này do nhà sản xuất quy ñịnh (một số IC có thể ñiều chỉnh ñược ñịa chỉ của mình
bằng cách thay ñổi các bit ñịa chỉ thấp). IC STA015 ñược sử dụng trong ñề tài này có ñịa
chỉ quy ñịnh là 1000011b. Master sẽ sử dụng ñịa chỉ này ñể giao tiếp với Slave mong
muốn trên bus I2C.
Một số ñịa chỉ ñặc biệt không ñược sử dụng:
ðịa chỉ R/W Chú thích
0000-000 0 General Call
0000-000 1 START byte
0000-001 x
0000-010 x
0000-011 x
0000-1xx x
1111-1xx x
1111-0xx x ñịa chỉ slave 10 bits
Truyền dữ liệu
Trang 2
Các bước truyền dữ liệu cơ bản có thể tóm tắt như sau:
- gửi bit START (S)
- gửi ñịa chỉ slave muốn giao tiếp (ADDR)
- gửi bit READ(R)-1 hoặc WRITE(W)-0
- chờ / gửi bit ACK
- gửi/nhận byte dữ liệu (DATA)
- chờ / gửi bit ACK
- quay lại bước 5 nếu muốn gửi/nhận nhiều byte hoặc gửi bit STOP (P)
Master gửi chuỗi S - ADDR - W vào bus I2C và chờ tín hiệu ACK. Nếu có một
Slave có ñịa chỉ ñúng với chuỗi ADDR thì nó sẽ phát tín hiệu ACK. Khi ñó Master sẽ gửi
byte DATA và chờ ACK, cứ lặp ñi lặp lại cho ñến khi ñã truyền xong. Cuối cùng Master
gửi P ñể dừng hoặc S ñể bắt ñầu lại quá trình truyền.
Master gửi chuỗi S - ADDR - R vào bus I2C và chờ tín hiệu ACK. Nếu có một
Slave có ñịa chỉ ñúng với chuỗi ADDR thì nó sẽ phát tín hiệu ACK và gửi tiếp byte
DATA ñầu tiên. Sau khi nhận ñược byte DATA, Master gửi lại ACK và byte DATA tiếp
theo lại ñược Slave gửi. Khi không muốn nhận thêm dữ liệu, Master gửi tín hiệu NACK
và P / S.
Tín hiệu START và STOP chỉ có thể ñược tạo ra từ Master. Ngay khi nhận ñược
tín hiệu này, Slave sẽ tự reset mức giá trị logic của mình. ðiều này cho phép Master khởi
ñộng lại toàn bộ kết nối bất cứ khi nào.
Trang 3
START lặp (Sr)
Ngay sau khi hoàn thành việc gửi/nhận dữ liệu với một Slave, Master có thể ngay
lập tức khởi tạo một kết nối mới ñến một Slave khác mà không cần phải qua giai ñoạn
STOP.
Ví dụ: S-ADDR-(R/W)-ACK-DATA-ACK-Sr-ADDR-(R/W)-ACK-DATA-ACK-P
Ứng dụng chủ yếu của Sr là trong kết nối I2C với nhiều Master, khi mà một
Master dù ñã hoàn thành việc truyền dữ liệu nhưng không muốn trả lại quyền kiểm soát
bus cho Master khác. Trong kết nối I2C một Master thì việc này là không cần thiết.
Việc thay ñổi mức tín hiệu trên SDA ñược thực hiện khi SCL ở mức thấp (nếu ở
mức cao sẽ trùng với tín hiệu START và STOP).
Sau khi nhận ñược 8 bit DATA thành công, thiết bị nhận sẽ giữ SDA ở mức thấp
trong xung clock kế tiếp ñể tạo tín hiệu ACK nhằm báo hiệu cho bên gửi. Việc gửi/nhận
tín hiệu lại tiếp tục hoặc dừng lại tùy theo Master.
Nếu việc nhận dữ liệu có lỗi, bên nhận sẽ giữ SDA ở mức cao trong xung clock
kế tiếp nhằm tạo tín hiệu NACK. Khi ñó, có 2 trường hợp:
- Slave ñang gửi cho Master: Master sẽ tạo tín hiệu STOP hoặc reSTART.
- Master ñang gửi cho Slave: thông thường, Master sẽ tạo NACK sau khi ñã nhận
ñược byte DATA cuối cùng, nó báo hiệu cho Slave biết việc truyền dữ liệu ñã kết thúc.
Một số lưu ý:
- Khi một Slave cần thời gian ñể thu thập dữ liệu, xử lý ngắt hoặc v.v…, nó có thể
giữ ñường SCL ở mức thấp. Master khi ñó sẽ phải chờ cho ñến khi SCL ñược giải phóng
ñể tiếp tục.
Trang 4
- Số lượng thiết bị gắn kết vào bus I2C không chỉ phụ thuộc vào số lượng ñịa chỉ
có thể cung cấp mà còn bao gồm cả ñiện dung của toàn bus. Mức ñiện dung tối ña cho
phép là 400 pF.
Trang 5
Phần 2. Lập trình I2C
với ATmega8
Tổng quan
Một số ñặc ñiểm
o Two-wire Serial Interface - TWI
o hỗ trợ cả chế ñộ Master và Slave
o sử dụng như thiết bị gửi hoặc nhận
o sử dụng ñịa chỉ 7 bits
o tốc ñộ có thể ñạt 400kHz (Fast Mode)
Trang 6
Bit Rate Generator Unit
- hoạt ñộng ở chế ñộ Master
- chứa Bit Rate Register (TWBR)
- ñiều khiển chu kỳ của chân SCL
- công thức
CPU _ clock _ frequence
SCL _ frequence =
16 + 2(TWBR ) * 4TWPS
Control Unit
- TWI Control Register (TWCR) thiết lập cho hoạt ñộng của bộ TWI
- khi có một sự kiện xảy ra, cờ TWI Interrupt Flag (TWINT) ñược bật và TWI
Status Register (TWSR) ñược cập nhật
- khi TWINT Flag ñược bật, SCL sẽ ñược giữ ở mức thấp ñể chương trình hoàn
thành công việc trước khi việc truyền / nhận dữ liệu tiếp tục (coi lại phần trên)
Trang 7
Các thanh ghi
Trang 8
Bit 2 - TWEN: TWI Enable Bit
Set TWEN ở giá trị 1 ñể cho phép TWI, ñồng thời quản lý chân SCL và
SDA. Ngược lại, set TWEN ở giá trị 0 sẽ cấm TWI, mọi hoạt ñộng TWI dù ñang
diễn ra cũng bị ngưng lại.
Trang 9
Sử dụng module TWI trong AVR
Kết nối TWI trong AVR theo ñịnh dạng byte và dựa trên ngắt. Ngắt ñược sinh ra
sau mọi sự kiện trong TWI. Dĩ nhiên, ngắt phải ñược cho phép bởi bit TWIE trong
TWCR và bit Global Interrupt Enable.
Khi ngắt ñược sinh ra, TWSR sẽ chứa giá trị tương ứng với trạng thái của TWI
bus. Chương trình có thể quyết ñịnh khối TWI sẽ hoạt ñộng thế nào ở xung TWI-clock
tiếp theo bằng cách tác ñộng vào TWCR và TWDR.
Code ví dụ
ðoạn code ví dụ về cách thức Master truyền 1 byte dữ liệu cho Slave trong kết nối
TWI:
Trang 10
Bảng giá trị của TWI Status Register với chế ñộ Master Transmitter.
Bảng giá trị của TWI Status Register với chế ñộ Master Receiver.
Trang 11