Giao tiếp I2C và tính toán giá trị trở kéo Pull-up

10
2150

Giao tiếp I2C là gì?

I²C, viết tắt của từ tiếng Anh “Inter-Integrated Circuit”, là một loại bus nối tiếp được phát triển bởi hãng sản xuất linh kiện điện tử Philips. Ban đầu, loại bus này chỉ được dùng trong các linh kiện điện tử của Philips. Sau đó, do tính ưu việt và đơn giản của nó, I²C đã được chuẩn hóa và được dùng rộng rãi trong các mô đun truyền thông nối tiếp của vi mạch tích hợp ngày nay.

Đây là một chuẩn kết nối ngắn sử dụng cặp dây SCL, SDA. Giao tiếp  đến các ngoại vi bằng cách gọi địa chỉ . Một Master có thể kết nối với nhiều slave, mỗi Slave  trên đường truyền có địa chỉ không giống nhau.

so do i2c.PNG

Tốc độ:

Độ dài bus:

Ví dụ trong Arduino, dùng chung bus I2C DS1307 với màn hình LCD I2C 1602:

Cấu tạo

I²C sử dụng hai đường truyền tín hiệu:

  • Một đường xung nhịp đồng hồ Clock (SCL) chỉ do Master phát đi ( thông thường ở 100kHz và 400kHz. Mức cao nhất là 1Mhz và 3.4MHz).
  • Một đường dữ liệu(SDA) theo 2 hướng.
  • Sơ đồ kết nối như hình dưới.
1

Có một lưu ý nhỏ về xung clock. Bản chất của I2C là dữ liệu trên đường SDA chỉ được ghi nhận ở sườn lên của chân CLK. Do vậy xung clock có thể không cần chính xác tốc độ là 1MHz hay 3.4Mhz. Lợi dụng điểm này có thể sử dụng 2 chân GPIO để làm chân giao tiếp I2C mềm mà không nhất thiết cần một chân CLK tạo xung với tốc độ chính xác (có thể chỉ cần dùng delay và bật tắt mức logic)

SCL và SDA luôn được kéo lên nguồn bằng một điện trở kéo lên có giá trị xấp xỉ 4,7 KOhm (tùy vào từng thiết bị và chuẩn giao tiếp, có thể dao động trong khoảng 1KOhm đến 4.7 Kohm. Chú ý rằng theo cấu hình này, một thiết bị có thể ở mức logic LOW hay cao trở nhưng ko thể ở dạng HIGH => Chính trở pull up tạo ra mức logic HIGH).

hinh 2

Lý do là các chân này có dạng opendrain để có thể hoạt động ở các mức điện áp logic khác nhau => Dùng cho nhiều loại vi điều khiển, vi xử lý

Việc lựa chọn trở pull up phù hợp sẽ được trình bày ở phần sau.

Các chế độ hoạt động của I²C 

Dựa vào tốc độ ta chia làm 2 loại

  • Chế độ chuẩn (standard mode) hoạt động ở tốc độ 100 Kbit/s.
  • Chế độ tốc độ thấp (low-speed mode) hoạt động ở tốc độ 10 Kbit/s.

Nếu chia theo quan hệ chủ tớ:

  • Một chủ một tớ.
  • Một chủ nhiều tớ.
  • Nhiều chủ nhiều tớ.

Quá trình truyền dữ liệu

  • Thiết bị A (chủ) xác định đúng địa chỉ của thiết bị B (Tớ), cùng với việc xác định địa chỉ, thiết bị A sẽ quyết định đọc hay ghi vào thiết bị tớ.
  • Thiết bị A gửi gữi liệu tới thiết bị B
  • Thiết bị A kết thúc quá trình truyền dữ liệu.
  • Khi A muốn nhận dữ liệu từ B, quá trình diễn ra tương tự, chỉ khác A sẽ nhận dữ liệu từ B.

Cách đánh địa chỉ

 I²C sử dụng 7 bit để định địa chỉ, do đó trên một bus có thể định địa chỉ tới 112 nút, 16 địa chỉ còn lại được sử dụng vào mục đích riêng. Bit còn lại quy định việc đọc hay ghi dữ liệu (1 là write, 0 là read)

Ví dụ:

– Địa chỉ của một thiết bị là 0x20. Khi cần đọc vào thiết bị này thì thanh ghi sẽ có giá trị 0x40 (thêm bit 0) còn khi ghi thì giá trị là 0x41 (thêm vào 0).

Điểm mạnh của I²C chính là hiệu suất và sự đơn giản của nó: một khối điều khiển trung tâm có thể điều khiển cả một mạng thiết bị mà chỉ cần hai lối ra điều khiển.

Ngoài ra I2C còn có chế độ 10bit địa chỉ:

5

Định dạng dữ liệu truyền

Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗi sườn lên của xung clock trên SCKL , Quá trình thay đổi bit dữ liệu xảy ra khi SCL ở mức thấp. 

6
  • Start = HIGH to LOW on SDA when SCL is HIGH
  • Stop = LOW TO HIGH on SDA when SCL is HIGH
  • Other when SCL low => Data!
6

Mỗi byte dữ liệu được truyền có độ dài là 8 bits. Số lượng byte có thể truyền trong một lần là không hạn chế. 

Mỗi byte được truyền sẽ chờ tín hiệu phản hồi là một bit ACK để báo hiệu đã nhận dữ liệu. => Mỗi lần I2C sẽ truyền 8bit và nhận 1bit.
ACK(Acknowledge : thừa nhận) và NACK (Not Acknowledge : Không thừa nhận)

8

Bit có trọng số cao nhất (MSB) sẽ được truyền đi đầu tiên, các bít sẽ được truyền đi lần lượt. Sau 8 xung clock trên dây SCL, 8 bit dữ liệu đã được truyền đi. Lúc này thiết bị nhận, sau khi đã nhận đủ 8 bít dữ liệu sẽ kéo SDA xuống mức thấp tạo một xung ACK ứng với xung clock thứ 9 trên dây SDA để báo hiệu đã nhận đủ 8 bit. Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình truyền hoặc kết thúc.

Thuật toán truyền nhận dữ liệu:

Bước 1: Host xác định thiết bị cần giao tiếp và chế độ giao tiếp là read hay là write. Việc này được thực hiện bằng cách gửi 7bit địa chỉ thiết bị và thêm bit cuối cùng, 0 nếu read và 1 nếu write.

Bước 2: Reset chế độ bằng cách thực hiện liên tiếp việc start và stop.

10

Bước 3: Gửi địa chỉ thanh ghi cần truy nhập của thiết bị cũng như chế độ read hay write.

Bước 4: Gửi hoặc nhận 1byte dữ liệu. Sau khi truyền 1byte dữ liệu, bên nhận đc dữ liệu sẽ gửi lại 1bit ACK để xác nhận đã nhận được dữ liệu và tiếp tục truyền hoặc bit NACK để báo nhận đc dữ liệu nhưng kết thúc quá trình truyên.

11

Chú ý: ASK là bit do slave truyền chứ ko phải do master truyền

Một byte truyền đi có kèm theo bit ACK là điều kiên bắt buộc, nhằm đảm bảo cho quá trình truyền nhận được diễn ra chính xác. Khi không nhận được đúng địa chỉ hay khi muốn kết thúc quá trình giao tiếp, thiết bị nhận sẽ gửi một xung Not‐ACK (SDA ở mức  cao) để báo cho thiết bị chủ biết, thiết bị chủ sẽ tạo xung STOP để kết thúc hay lặp lại một xung START để bắt đầu quá trình mới.

Chọn trở Pullup I2C

Do I2C sử dụng đầu ra dạng Opendrain/Open colector nên có thể sử dụng với nhiều dạng điện áp khác nhau. Để làm được điều này ta cần sử dụng trở pullup để kéo lên mức điện áp phù hợp. Giá trị của trở pullup tương đối quan trọng, nếu chọn không phù hợp có thể dẫn đến việc mất mát tín hiệu.

Giá trị trở pull up phù hợp cần đảm bảo 2 yếu tố:

  • Thỏa mãn phù hợp mức logic: Rp(min)
  • Đảm bảo rise time của tín hiệu: Rp(max) 

Để IC (microcontroller hoặc processor) nhận đúng mức logic thì điện áp chân phải lớn hơn VOL(điện áp cao nhất mức LOW). Ta có công thức tính trở nhỏ nhất min như sau:

Ngoài ra, do đặc thù của I2C có thêm phần rise time. Nếu giá trị trở quá lớn sẽ dẫn đến việc rise time cao. Nhất là với các mode ở tốc độ cao.

Xem kết nối như một mạch RC (C là tụ kháng sinh) thì ta có điện áp theo thời gian trong mạch RC tính theo công thức sau:

Thông thường, VIH và VIL thường tính lần lượt bằng 0.7*VCC và 0.3*VCC nên ta có:

Giá trị rise time được tính:

Công thức trên trích dẫn từ tài liệu AN255 của NXP, trong đó VDD là VCC, Vt1 là VIL, Vt2 là VIH, để giải thích cho công thức bên dưới:

Từ đó ta có RMAX là:

Nếu điện trở kéo Pull-up quá lớn thì bị sai mức logic cao.

Các giá trị trên thường cho theo bảng thông sô kỹ thuật của giao tiếp I2C:

Giá trị RP (min) và mối liên hệ với Vcc:

Minimum Pullup Resistance [RP (min)] vs Pullup Reference Voltage (VCC)

Mối liên hệ giữa RP (max) với điện dung bus I2C Cb ở chế độ standard-mode và fast-mode:

Maximum Pullup Resistance [RP (max)] vs Bus Capacitance (Cb)

Khi giá trị tối thiểu và tối đa của điện trở kéo lên đã được chọn, quyết định cho giá trị của điện trở có thể được thực hiện dựa trên sự cân bằng giữa tốc độ và nguồn cung cấp. Một điện trở nhỏ hơn sẽ cho tốc độ cao hơn vì độ trễ RC nhỏ hơn, và điện trở lớn hơn sẽ cho tiêu thụ nguồn thấp hơn (điện trở lớn thì hạn dòng điện).

Ví dụ về tính trở pull up:

Cho giao tiếp I2C hoạt động ở chế độ Fast-mode, với thông số Cb=200 pF, Vcc=3.3V, các thông số ở Table 1. Tính giá trị điện trở Pull-up:

Sử dụng các công thức tính Rp min, Rp max ở trên ta có:

Kết quả: Chọn giá trị trong khoảng 966.667 Ω đến1.77 kΩ, lựa chọn cân nhắc giữa tốc độ và tiêu thụ nguồn.

Ví dụ khác theo tài liệu AN255 của NXP https://www.nxp.com/docs/en/application-note/AN255.pdf:

Mẹo nhỏ trên internert:

Untitled

Tài liệu UM10204 của NXP:

bieudo.PNG

Tham khảo:
https://kienltb.wordpress.com/
SLVA689 I2C Bus Pullup Resistor Calculation

10 COMMENTS

  1. I was excited to discover this site. I want to to thank you for your time just for this fantastic read!! I definitely enjoyed every little bit of it and I have you book marked to see new information on your blog. Bryna Lanny Elora

  2. SKincell Pro is popular by the individuals that used it as an optimal skin fixor.

    The product includes the same active ingredients as many of the other moles getting rid of lotions
    on the marketplace today, yet it includes greater than a lot of them.
    The serum likewise boosts your skin appearance as well as provides even-toned skin. The active ingredients, the item has are all natural active ingredients which are safe for your skin. https://www.diigo.com/profile/dzhonibekkit

  3. Skincell Pro has actually been referred by some people as the ideal
    skin conditioner. It is a preferred product which consists of all the necessary active ingredients to make your skin smooth and also
    even-textured. The serum is additionally a medically verified
    formula which aids boost your skin appearance, even-toned, and even-moisturize.
    I made a decision to use this item for myself to get rid of the mole on my left
    ear. https://mysitesname.com/story9267069/how-much-is-a-bottle-of-skincell-pro

LEAVE A REPLY

Please enter your comment!
Please enter your name here