f. Sơ đồ mạch để MPU6050 hoạt động
2.2.2.5. Giao tiếp với MPU6050 bằng I2C
I2C là một loại bus giao tiếp ngoại vi được phát triển bới hãng Philips, thường được sử dụng để điều khiển nhiều thiết bị điều khiển khác được bố trí trong các khối mạch tương đối xa nhau. I2C là giao tiếp nối tiếp thực hiện trên hai đường dây: Clock (SCL) và Data (SDA) giữa Master và Slave.
Hình 2.18. Kết nối giữa Master và các Slave
+ 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
+ SCL - Serial Clock: Là đường giữ nhịp nối tiếp. 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).
Hình 2.19. Trạng thái lấy mẫu một bit dữ liệu trên SDA 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.
+ Các tín hiệu Start và Stop:
SDA = SCL = HIGH: Bus I2C ở trạng thái “Free” sẵn sàng cho một giao tiếp. Điều kiện Start: SDA ↓ và SCL = HIGH.
Điều kiện Stop: SDA ↑ và SCL = HIGH.
Cả hai điều kiện Star và Stop đều được tạo ra bởi Master. Sau tín hiệu Start, bus I2C ở trạng thái “busy” thực hiện tác vụ truy xuất nối tiếp. Sau Stop bus I2C ở trạng thái “free” cho lần kế tiếp.
+ Định dạng dữ liệu truyền:
Dữ liệu được truyền trên bus I2C theo từng bit tại mỗi cạnh lên của xung Clock (SCL).
Hình 2.20. Tín hiệu xung SCL và SDA
Sự thay đổi bit dữ liệu trên SDA xảy ra khi SCL đang ở mức thấp. số lượng byte có thể truyền trong một lần tùy ý, tối đa là 128 bytes. Bit MSB sẻ được truyền trước. Sau 8 xung clock 8 bit dữ liệu đã được truyền đi, thiết bị nhận sẽ khéo SDA xuống mức thấp tương ứng với một bit ACK sẽ tiếp tục thực hiện quá trình truyền hoặc kết thúc.
+ Định dạng địa chỉ thiết bị:
Mỗi thiết bị ngoại vi tham gia vào bus I2C đều có địa chỉ duy nhất, có độ dài là 7 bit như vậy trên một bus I2C ta có thể phân biệt tối đa 128 thiết bị. Byte đầu tiên được gửi từ master sẻ bao gồm 7 bit chỉ và bit thứ 8 gọi là bit R/W.
Bit R/W = 0 : Ghi dữ liệu từ Master vào Slave. Bit R/W = 1 : Đọc dữ liệu từ Slave .
+ Sau đây là khung truyền và đọc dữ liệu
Đọc byte đơn
Hình 2.21. Đọc byte đơn Đọc nhiều byte
Hình 2.22. Đọc nhiều byte Truyền byte đơn
Hình 2.23. Truyền byte đơn Truyền nhiều byte
Hình 2.24. Truyền nhiều byte Trong đó:
- S là start SDA xuống thấp trong khi SCL đang ở mức cao.
- AD là địa chỉ của slave.
- W là bit write (0).
- R là bit read(1).
- ACk bit xác nhận đã nhận dữ liệu.
- RA địa chỉ chứa dữ liệu của slave.
- DATA dữ liệu được truyền hoặc nhận.