Khi một Master muốn giao tiếp với một Slave nào đó, nó trước hết tạo ra một START condition và tiếp theo là gởi địa chỉ Device addresscủa Slave cần giao tiếp trên đường truyền, vì thế xu
Trang 1Bài 8 - Giao tiếp TWI - I2C
2. Giao diện TWI – I2C
3. TWI trên AVR
4. Điều khiển AVR TWI
Download ví dụ
Cấu trúc AVR WinAVR
ATmega32 sẽ được dùng làm minh họa
Sau bài này, tôi hy vọng bạn có thể hiểu và thực hiện được:
- Nguyên lý truyền thông nối tiếp TWI và I2C
- Sử dụng module TWI trong AVR ở các chế độ Master
- Sử dụng module TWI trong AVR ở các chế độ Slave
- Ví dụ giao tiếp giữa các AVR bằng TWI
II Giao diện TWI – I 2 C.
Trang 2TWI (Two-Wire Serial Intereafce) là một module truyền thông nối tiếp đồng
bộ trên các chip AVR dựa trên chuẩn truyền thông I2C I2C là viết tắc của từ Integrated Circuit là một chuẩn truyền thông do hãng điện tử Philips
Inter-Semiconductor sáng lập và xây dựng thành chuẩn năm 1990 Phiên bản mới nhất của I2C là V3.0 phát hành năm 2007 Để hiểu thêm về I2C bạn có thể tham khảo các tài liệu “I2C Specification” từ trang web của NXP- http://www.nxp.com (lập bởi Philips) Trong phạm vi bài học này tôi chỉ giới thiệu giao thức TWI được giớithiệu trong datasheet của các chip AVR từ Atmel Tuy nhiên, về cơ bản TWI trong AVR hoàn toàn tương thích I2C, do đó tìm hiểu TWI của AVR không chỉ giúp bạn giao tiếp giữa các AVR với nhau mà có thể dùng TWI để điều khiển bất kỳ một thiết bị nào theo chuẩn I2C (các chip nhớ, bộ chuyển đổi ADC, DCA, đồng hồthời gian thực…)
TWI (I2C) là một truyền thông nối tiếp đa chip chủ (tạm dịch của cụm từ multi-master serial computer bus) Khái niệm “multi-master” (tôi sẽ dùng từ tiếng anh multi-master thay vì dùng “đa chip chủ”) được hiểu là trong trên cùng một bus
có thể có nhiều hơn một thiết bị làm Master, đồng thời một Slave có thể trở thành một Master nếu nó có khả năng Ví dụ trong một mạng TWI của nhiều AVR kết nối với nhau, bất kỳ một AVR nào đều có thể trở thành Master ở một thời điểm nào đó Tuy nhiên nếu một mạng dùng một AVR điều khiển các chip nhớ (như EEPROM AT24C1024 chẳng hạn) thì khái niệm “multi-master” không tồn tại vì các chip nhớ được thiết kế sẵn là Slave, không có khả năng trở thành master TWI (I2C) được thực hiện trên 2 đường SDA (Serial DATA) và SCL (Serial Clock) trong đó SDA là đường truyền/nhận dữ liệu và SCL là đường xung nhịp Căn cứ theo chuẩn I2C, các đường SDA và SCL trên các thiết bị có cấu hình “cực góp mở” (open-drain hoặc open-collector, tham khảo các mạch số dùng transistor để hiểu thêm), nghĩa là cần có các “điện trở kéo lên” (pull-up resistor) cho các đường này Ở trạng thái nghỉ (Idle), 2 chân SDA và SCL ở mức cao Hình 1 mô tả một môhình mạng TWI (I2C) cơ bản
Hình 1 Mạng TWI (I2C) với nhiều thiết bị và 2 điện trở kéo lên cho SDA, SCL
Trang 3Tiếp theo chúng ta tìm hiểu một số khái niệm và đặc điểm của TWI Các khái niệm và đặc điểm tôi đề cập dưới đây được dùng cho cả TWI và I2C, nếu có
sự khác biệt tôi sẽ giải thích thêm
Master: là chip khởi động quá trình truyền nhận, phát đi địa chỉ của thiết bị cần giao tiếp và tạo xung giữ nhịp trên đường SCL
Slave: là chip có một địa chỉ cố định, được gọi bởi Master và phục vụ yêu cầu
từ Master
SDA- Serial Data: là đường dữ liệu nối tiếp, tất cả các thông tin về địa chỉ hay dữ liệu đều được truyền trên đường này theo thứ tự từng bit một Chú ý là trong chuẩn I2C, bit có trọng số lớn nhất (MSB) được truyền trước nhất, đặc điểm này ngược lại với chuẩn UART
SCL –Serial Clock: là đường giữ nhịp nối tiếp TWI (I2C) là chuần truyền thông nối tiếp đồng bộ, cần có 1 đường tạo xung giữ nhịp cho quá trình
truyền/nhận, cứ mỗi xung trên đường giữ nhịp SCL, một bit dữ liệu trên đường SDA sẽ được lấy mẫu (sample) Dữ liệu nối tiếp trên đường SDA được lấy mẫu khi đường SCL ở mức cao trong một chu kỳ giữ nhịp, vì thế đường SDA không được đổi trạng thái khi SCL ở mức cao (trừ START và STOP condition) Chân SDA có thể được đổi trạng thái khi SCL ở mức thấp
START Condition-Điều kiện bắt đầu: từ trạng thái nghỉ, khi cả SDA và SCL
ở mức cao nếu Master muốn thực hiện một “cuộc gọi”, Master sẽ kéo chân SDA xuống thấp trong khi SCL vẫn cao Trạng thái này gọi là START Condition (chúng
Trang 4được truyền/nhận.
REPEAT START – Bắt đầu lặp lại: khoảng giữa START và STOP
condition là khoảng bận của đường truyền, các Master khác không tác động được vào đường truyền trong khoảng này Trường hợp sau khi kết thúc truyền/nhận mà Master không gởi STOP condition lại gởi thêm 1 START condition gọi là
REPEAT START Khả năng này thường được dùng khi Master muốn lấy dữ liệu liên tiếp từ các Slaves Hình bên dưới mô tả các Master tạo ra START, STOP và REPEAT START
Address Packet Format – Định dạng gói địa chỉ: trên mạng TWI (I2C), tất
cả các thiết bị (chip) đều có thể là Master hay Slave Mỗi thiết bị có một địa chỉ cố định gọi là Device address Khi một Master muốn giao tiếp với một Slave nào đó,
nó trước hết tạo ra một START condition và tiếp theo là gởi địa chỉ Device addresscủa Slave cần giao tiếp trên đường truyền, vì thế xuất hiện khái niệm “gói địa chỉ” (Address Packet) Gói địa chỉ trong TWI (I2C) có định dạng 9 bits trong đó 7 bit đầu (gọi là SLA, được gởi liền sau START condition) chứa địa chỉ Slave, một bit READ/WRITE và một bit ACK-Ackknowledge (xác nhận) Do bit địa chỉ có độ dài 7 bits nên về mặt lý thuyết, trên 1 mạng TWI (I2C) có thể tồn tại tối đa
2^7=128 thiết bị có địa chỉ riêng biệt Tuy nhiên, có một số địa chỉ không được sử dụng như các địa chỉ có định dạng 1111xxx (tức các địa chỉ lớn hơn hoặc bằng 120không được dùng) Riêng địa chỉ 0 được dùng cho “cuộc gọi chung” (General call).Bit READ/WRITE (R/W) được truyền tiếp sau 7 bit địa chỉ là bit báo cho Slave biết Master muốn “đọc” hay “ghi” vào Slave Nếu bit này bằng 0 (gọi là W) thì quátrình “Ghi” dữ liệu từ Master đến Slave được yêu cầu, nếu bit này bằng 1 (gọi là R)thì Master muốn “đọc” dữ liệu từ Slave về Tám bits trên (SLA+R/W) được Masterphát ra sau khi phát START condition, nếu một Slave trên mạng nhận ra rằng địa chỉ mà Master yêu cầu trùng khớp với Device address của chính mình, nó sẽ “đáp trả” lại Master bằng cách phát ra 1 tín hiệu “xác nhận” ACK bằng cách kéo chân SDA xuống thấp trong xung thứ 9 Ngược lại, nếu không có Slave đáp ứng lại, chân SDA vẫn ở mức cao trong xung giữ nhịp thứ 9 thì gọi là tín hiệu “không xác
Trang 5nhận” – NOT ACK, lúc này Master cần có những ứng xử phù hợp tùy theo mỗi trường hợp cụ thể, ví dụ Master có thể gởi STOP condition và sau đó phát lại địa chỉ Slave khác…Như vậy, trong 9 bit của gói địa chỉ thì chỉ có 8 bit được gởi bởi Master, bit còn lại là do Slave Ví dụ Master muốn yêu cầu “đọc” dữ liệu từ Slave
có địa chỉ 43, nó cần phát đi một byte như sau trên đường truyền: (43<<1)+1, trong đó (43<<1) là dịch số 43 về bên trái 1 vị trí vì 7 bit địa chỉ nằm ở các vị trí cao trong gói địa chỉ, sau đó cộng giá trị này với “1” tức là quá trình “đọc” được yêu cầu
General call – Cuộc gọi chung: khi Master phát đi gói địa chỉ có dạng 0 (thực chất là 0+W) tức nó muốn thực hiện một cuộc gọi chung đến tất cả các Slave.Tất nhiên, cho phép hay không cho phép cuộc gọi chung là do Slave quyết định Nếu các Slave được cài đặt cho phép cuộc gọi chung, chúng sẽ đáp lại Master bằngACK Cuộc gọi chung thường xảy ra khi Master muốn gởi dữ liệu chung đến các Slaves Chú ý là cuộc gọi chung có dạng 0+R là vô nghĩa vì không thể có chuyện Master nhận dữ liệu từ tất cả các Slave cùng thời điểm
Data Packet Format – Định dạng gói dữ liệu: sau khi địa chỉ đã được phát
đi, Slave đã đáp lại Master bằng ACK thì quá trình truyền/nhận dữ liệu sẽ diễn ra giữa cặp Master/Slave này Tùy vào bit R/W trong gói địa chỉ, dữ liệu có thể được truyền theo hướng từ Master đến Slave hay từ Slave đến Master Dù di chuyển theo hướng nào, gói dữ liệu luôn bao gồm 9 bits trong đó 8 bits đầu là dữ liệu và 1 bit cuối là bit ACK Tám bits dữ liệu do thiết bị phát gởi và bit ACK do thiết bị nhận tạo ra Ví dụ khi Master thực hiện quá trình gởi dữ liệu đến Slave, nó sẽ phát
ra 8 bits dữ liệu, Slave nhận và phát lại ACK (kéo SDA xuống 0 ở xung thứ 9), sau
đó Master sẽ quyết định gợi tiếp byte dữ liệu khác hay không Nếu Slave phát tín hiệu NOT ACK (không tác động SDA ở xung thứ 9) sau khi nhận dữ liệu thì
Master sẽ kết thúc quá trình gởi bằng cách phát đi STOP condition Hình bên dưới
mô tả định dạng gói dữ liệu trong TWI (I2C)
Trang 6Phối hợp gói địa chỉ và dữ liệu: một quá trình truyền/nhận TWI (I2C) thườngđược bắt đầu từ Master, Master phát đi một START condition sau đó gởi gói địachỉ SLA+R/W trên đường truyền Tiếp theo nếu có một Slave đáp ứng lại, dữ liệu
có thể truyền/nhận liên tiếp trên đường truyền (1 hoặc nhiều byte liên tiếp) Khungtruyền thông thường được mô tả như hình bên dưới
Multi-Master Bus –Đường truyền đa chip chủ: như đã trình bày ở trên, TWI(I2C) là chuẩn truyền thông đa chip chủ, nghĩa là tại một thời điểm có thể có nhiềuhơn 1 chip làm Master nếu các chip này phát ra START condition cùng lúc Nếucác Master có cùng yêu cầu và thao tác đối với Slave thì chúng có thể “cùng tồntại” và quá trình truyền/nhận có thể thành công Tuy nhiên, trong đa số trường hợp
sẽ có một số Master bị “thất lạc” (lost) Một Master bị lost khi nó truyền/nhận 1mức cao trên SDA trong khi các Master khác truyền/nhận 1 mức thấp Truyềnthông đa chip chủ tương đối phức tạp và vì thế tôi sẽ không đề cập trường hợp nàytrong lúc thực hiện ví dụ giao tiếp trong bài học này Nắm được các khái niệm và đặc điểm trên của truyền thông TWI (I2C) là bạn
đã sẵn sàng để điều khiển module TWI trên AVR Phần tiếp theo tôi sẽ hướng dẫncách thao tác module TWI trên AVR thông qua một ví dụ cụ thể
III TWI trên AVR.
1 Thanh ghi:
Trang 7TWI trên AVR được vận hành bởi 5 thanh ghi bao gồm thanh ghi tốc độ giữ nhịp TWBR, thanh ghi điều khiển TWCR , thanh ghi trạng thái TWSR, thanh ghi địa chỉ TWAR và thanh ghi dữ liệu TWDR.
- TWBR (TWI Bit Rate Register): là 1 thanh ghi 8 bit quy định tốc độ phát xung giữ nhịp trên đường SCL của chip Master
Tốc độ phát xung giữ nhịp được tính theo công thức:
Trong đó CPU Clock frequency là tần số hoạt động chính của AVR, TWBR là giá trị thanh thi TWBR và TWPS là giá trị của 2 bits TWPS1 và TWPS0 nằm trongthanh thi trạng thái TWSR Hai bits này được gọi là bit prescaler, thông thường người ta hay set TWPS1:0 =00 để chọn Prescaler là 1 (40=1) Bảng 1 tóm tắt tốc
độ xung giữ nhịp tạo ra trên SCL đối với các giá trị của tham số:
Bảng 1 Tốc độ xung giữ nhịp tham khảo
Trang 8
- TWCR (TWI Control Register): là thanh ghi 8 bit điều khiển hoạt động củaTWI.
Bit 6 – TWEA (TWI Enable Acknowledge Bit): tạm hiểu là bit kích hoạt tín hiệu xác nhận Đối với chip Slave, nếu bit này được set thì tín hiệu xác ACK sẽ được gởi trong các trường hợp sau: địa chỉ do Master phát ra trùng khớp với địa chỉ của Slave; một cuộc gọi chung đang xảy ra và Slave này cho phép cuộc gọi chung; dữ liệu đã được Slave nhận từ Master Như thế, khi set một chip ở chế độ Slave, chúng ta cần set bit này để nó có thể đáp ứng lại Master bất cứ khi nào đượcgọi Đối với chip Master, tín hiệu ACK chỉ được phát trong 1 trường hợp duy nhất
đó là khi Master nhận dữ liệu từ Slave, Master phát ACK để báo cho Slave là mình
đã nhận được và muốn tiếp tục nhận từ Slave
Bit 5 – TWSTA (TWI START Condition Bit): là bit tạo START condition Khi một chip muốn trở thành Master để thực hiện 1 cuộc gọi, bit này cần được set
và một START condition được tạo ra trên đường truyền nếu đường truyền đang rảnh Nếu đường truyền không rảnh, TWI sẽ chờ cho đến khi nó rảnh (nhận ra 1 STOP condition) và tiếp tục gởi START condition Chú là là bit nay cần được xóa bởi phần mềm sau khi START condition đã được gởi (viết 0 vào bit này để xóa nó)
Bit 4 – TWSTO (TWI STOP Condition Bit): là bit tạo STOP condition cho TWI Khi Master muốn kết thúc một cuộc gọi, nó sẽ phát STOP condition bằng cách viết giá trị 1 vào bit TWSTO Slave cũng có thể tác động vào bit này, nếu một
Trang 9cuộc gọi bị lỗi, viết 1 vào TWSTO trên Slave sẽ reset đường truyền về trạng thái rảnh ban đầu.
Bit 3 – TWWC (TWI Write Collision Flag): khi cờ TWINT đang ở mức thấp tức TWI đang bận, nếu chúng ta viết dữ liệu vào thanh ghi dữ liệu (TWDR) thì một lỗi xảy ra, khi đó bit TWWC tự động được set lên 1 Vì thế, trong quá trìnhtruyền dữ liệu, bit TWINT cần được giữ mức cao khi ghi dữ liệu vào thanh ghi TWDR và sau đó xóa khi dữ liệu đã sẵn sàng
Bit 2 – TWEN (TWI Enable Bit): bit kích hoạt TWI trên AVR, khi TWEN được set lên 1, TWI sẵn sàng hoạt động
Bit 1 – Reserve: không sử dụng
Bit 0 – TWIE (TWI Interrupt Enable Bit): bit cho phép ngắt TWI, khi bit nay được set bằng 1 đồng thời bit I trong thanh ghi trạng thái chung được set, một ngắt TWI xảy ra khi bit TWINT được set bởi phần cứng Ngắt TWI có thể xảy ra sau bất kỳ hoạt động nào liên quan đến TWI Do đó cần sử dụng ngắt hợp lý Thông thường, ngắt chỉ được sử dụng cho Slave, đối với Master ngắt không cần thiết vì Master chủ động khởi động một cuộc gọi
Một điều cần chú ý là các bit trong thanh ghi TWCR không cần được set cùng lúc, tùy vào từng giai đoạn trong quá trình giao tiếp TWI các bit có thể được set riêng lẻ
- TWSR (TWI Status Register): là 1 thanh ghi 8 bit trong đó có 5 bit chứa code trạng thái của TWI và 2 bit chọn prescaler
Có rất nhiều bước, nhiều tình huống xảy ra khi giao tiếp bằng TWI cho cả Master và Slave Ứng với mỗi trường hợp TWI sẽ tạo ra 1 code trong thanh ghi TWSR Lập trình cho TWI cần xét code trong 5 bit cao của thanh ghi TWSR và đưa ra các ứng xử hợp lý ứng với từng code
- TWDR (TWI Data Register): là thanh ghi dữ liệu chính của TWI Trong quá trình nhận, dữ liệu nhận về sẽ được lưu trong TWDR Trong quá trình gởi, dữ liệu chứa trong TWDR sẽ được chuyển ra đường SDA
- TWAR (TWI Address Register): là thanh ghi chứa device address của chipSlave Cấu trúc thanh ghi được trình bày trong hình dưới
Trang 10
Nhớ lại địa chỉ Slave được tạo thành từ 7 bits, trên thanh ghi TWAR 7 bits địa chỉ này nằm ở 7 vị trí cao Trước khi sử dụng TWI như Slave, chúng ta phải gán địa chỉ cho chip, việc viết địa chỉ thường được thực hiện bằng lệnh TWAR =
(Device_address<<1)+TWGCE Trong đó TWGCE (TWI General Call Enable) là bit cho phép cuộc gọi chung Như tôi đề cập bên trên, Slave co quyền cho phép Master thực hiện cuộc gọi chung với nó hay không Nếu TWGCE=1, Slave sẽ đáp ứng lại cuộc gọi chung nếu có, nếu TWGCE=0 thì Slave sẽ bỏ qua cuộc gọi
chung
2 Hoạt động của TWI:
TWI trên AVR được gọi là byte-oriented (tạm dịch là hướng byte) và
interrupt-based (dựa trên ngắt) Bất kỳ một sự kiện nào trong quá trình truyền/nhậnTWI cũng có thể gây ra 1 ngắt TWI TWI trên AVR vì thế hoạt động tương đối độclập với chip Tuy nhiên, cần khai thác ngắt trên AVR một cách hơp lý Ví dụ, đối với Master, chúng ta không cần sử dụng ngắt vì chip này hoàn toàn chủ động trongviệc truyền và nhận Riêng với Slave, sử dụng ngắt để tránh bỏ lỡ các cuộc gọi là cần thiết
Tất cả các AVR trên mạng TWI đều có thể là Master hay Slave, cả Master và Slave đều có thể truyền và nhận dữ liệu Vì thế, có tất cả 4 mode trong hoạt động của TWI trên AVR Chúng ta sẽ lần lượt khảo sát các mode này như sau: Master Transmitter (chip chủ truyền), Master Receiver (Chip chủ nhận), Slave Reicever (chip tớ nhận) và Slave Transmitter (Chip tớ truyền)
Trước khi khảo sát các chế độ hoạt động của TWI chúng ta qui ước một số ký hiệu thường dùng (đây cũng là các ký hiệu dùng trong datasheet của các chip AVR)
S: START condition – điều kiện bắt đầu
Rs: REPEAT START – bắt đầu lặp lại
R: READ Bit, bit này bằng 1 được gởi kèm với gói địa chỉ
W: WRITE Bit, bit này mang giá trị 0, gởi kèm gói địa chỉ
ACK: Ackowledge, bit xác nhận, chân SDA được kéo xuống 0 ở xung
thứ 9
NACK: Not Acknowledge, không xác nhận, SDA ở mức cao ở bit thứ 9 Data: 8 bits dữ liệu
P: STOP condition – điều kiện kết thúc.
SLA: Slave address, địa chỉ của Slave cần giao tiếp.
A Master Transmitter mode – Master truyền dữ liệu:
Trang 11Trong chế độ này, Master truyền 1 hoặc một số byte dữ liệu đến một hoặc các Slave Để bắt đầu, Master tạo ra một START condition trên đường SDA, nếu đường truyền đang rảnh, Master sẽ tiếp tục phát đi địa chỉ của Slave cần giao tiếp cùng với bit W (ghi) theo định dạng như sau: SLA+W Nếu Slave đáp lại bằng mộtACK trong xung giữ nhịp thứ 9, Master sẽ tiếp tục gởi 1 hoặc liên tiếp các byte dữ liệu trên SDA Cứ sau mỗi byte dữ liệu, Master sẽ kiểm tra ACK từ Slave Nếu Slave gởi một NACK hoặc Master không muốn gởi thêm dữ liệu đến Slave nó sẽ phát đi một STOP condition hoặc một REPEAT START (Rs) Nếu STOP được phát, cuộc gọi kết thúc, nếu Rs được phát, một cuộc gọi mới bắt đầu, sau Rs là địa chỉ của Slave mới…Đó là về mặt lý thuyết, trên thực tế làm sao để kiểm tra môt START condition có được gởi chưa? làm sao biết có nhận được ACK sau khi phát địa chỉ hoặc dữ liệu? Tất cả được TWI mã hóa thành các code chứa trong thanh ghiTWSR (chỉ 5 bit cao) Chúng ta chỉ thanh ghi này và đối chiếu với bảng code quy định sẵn để biết trạng thái đường truyền và đưa ra quyết định tiếp theo Hình 2 mô
tả một quá trình Master truyền dữ liệu, các khả năng có thể xảy ra và giá trị tương ứng của thanh ghi TWSR Ý nghĩa các code trong thanh ghi TWSR trong lúc Master truyền dữ liệu có thể tham khảo thêm datasheet của chip
Trang 12Hình 2 Master truyền dữ liệu.
Trang 13Từ hình 2, chúng ta nhận thấy khi Master truyền dữ liệu, dãy code 0x08 -> 0x18 -> 0x28 ->… -> 0x28 (-> 0x30) là dãy code thành công nhất Code 0x08 báo rằng START codition được truyền thành công, code 0x18 báo địa chỉ truyền thành công và đã có Slave xác nhận bằng ACK, code 0x28 tức dữ liệu được Master truyền thành công và Slave đã nhận được, báo ACK lại cho Master, code 0x30 tức
dữ liệu đã được truyền nhưng Slave không xác nhận lại, lúc này Master có thể phát
đi một STOP codition sau code 0x30 Ngoài ra còn một số code khác tương ứng với các trường hợp khác như gởi địa chỉ thất bại (code 0x20), Master bị lost (code 0x38)…Đối với mỗi loại ứng dụng, cách “hành xử” sẽ khác nhau đối với các trường hợp thất bại này Trong bài này, tôi sẽ bỏ qua tất cả các trường hợp thất bại,nếu một trong các code thất bại xảy ra chúng ta sẽ thoát khỏi cuộc gọi và đưa đường truyền về trạng thái nghỉ
B Master Receiver mode – Master nhận dữ liệu:
Trong chế độ này, Master nhận một hoặc một số byte dữ liệu từ một Slave Để bắt đầu, Master tạo ra một START condition trên đường SDA, nếu đường truyền đang rảnh, Master sẽ tiếp tục phát đi địa chỉ của Slave cần giao tiếp cùng với bit R (đọc) theo định dạng như sau: SLA+R Nếu Slave đáp lại bằng một ACK trong xung giữ nhịp thứ 9, Master sẽ bắt đầu sample dữ liệu trên SDA Cứ sau mỗi byte
dữ liệu, nếu Master muốn nhận tiếp byte khác nó phải phát ra 1 ACK ở xung thứ 9 báo cho Slave Khi Master muốn kết thúc quá trình nhận nó sẽ phát một NOT ACKsau khi nhận dữ liệu, liền sau đó Master phát STOP để kết thúc cuộc gọi hoặc phát
đi một REPEAT START nếu nó muốn tiếp tục gọi các Slaves khác Hình 3 mô tả một quá trình Master nhận dữ liệu, các khả năng có thể xảy ra và giá trị code tươngứng của thanh ghi TWSR Ý nghĩa các code trong thanh ghi TWSR trong lúc Master truyền dữ liệu có thể tham khảo thêm datasheet của chip
Trang 14Hình 3 Master nhận dữ liệu.
Từ hình 3, trong quá trình Master nhận dữ liệu, dãy code 0x08 -> 0x40 -> 0x50 ->… -> 0x58 là dãy code thành công nhất Code 0x08 báo rằng START codition được truyền thành công, code 0x40 báo địa chỉ + R đã được truyền thành công và đã có Slave xác nhận bằng ACK, code 0x50 báo dữ liệu được Master nhậnthành công và Master cũng đã phát một ACK bit sau khi nhận, code 0x58 xảy ra khi Master nhận dữ liệu thành công nhưng nó không phát ACK mà phát NOT ACK, báo cho Slave rằng Master không muốn nhận thêm dữ liệu, tiếp theo Master