Bus truyền thông I2C sử dụng địa chỉ 7 bit hoặc 10 bit để giải quyết các thiết bị nô lệ. Lấy các địa chỉ 7 bit phổ biến hơn, mỗi gói được gửi trên bus bởi chủ bắt đầu bằng địa chỉ 7 bit theo sau là chỉ báo đọc hoặc ghi 1 bit ( ).
Hầu hết các bảng dữ liệu chỉ cung cấp địa chỉ I2C cho thiết bị của họ theo ký hiệu nhị phân hoặc dưới dạng bit trên sơ đồ thời gian (có ghi chú cho các bit địa chỉ có thể định cấu hình), cả hai đều không rõ ràng vì chúng hiển thị bảy hoặc tám bit để bạn có thể biết liệu bao gồm bit . Điều này dường như tuân theo đặc tả NXP I2C chính thức .
Vấn đề xảy ra khi cố gắng ghi lại địa chỉ trong hex. Các nguồn khác nhau chuyển đổi địa chỉ theo những cách khác nhau:
- Chuyển đổi địa chỉ 7 bit thành giá trị thập lục phân trong phạm vi
0x00
thành0x7F
0b101 0011
trở thành0x53
- Ví dụ Hướng dẫn Robot Electronics I2C , công cụ Linux i2cdetect , thư viện STM32 CPAL , thư viện Arduino Wire
- Bao gồm bit làm LSB và cung cấp hai địa chỉ, một để đọc và một để ghi trong phạm vi tới
0x00
0xFF
0b101 0011
trở thành0xA6
để viết và0xA7
đọc- Đôi khi chỉ có địa chỉ ghi (ví dụ
0xA6
) được đưa ra - Ví dụ: Hướng dẫn dự án 8051 , thư viện STM32 HAL ( ví dụ về sự nhầm lẫn ), ví dụ mã PIC Microchip (CE119) , máy phân tích giao thức Logic Saleae
Hai tùy chọn này không phải lúc nào cũng có thể phân biệt.
Rõ ràng sử dụng ký hiệu nhị phân là tốt hơn vì nó cung cấp cho bạn một địa chỉ rõ ràng, tuy nhiên điều này không phải lúc nào cũng có thể. Một trường hợp đáng chú ý là trên C / C ++ khi không có cách viết số nhị phân đặc biệt chuẩn . Điều này dẫn đến vấn đề tôi gặp phải khi chỉ định hằng số cho các thiết bị trong mạch là không rõ ràng.
Vì vậy, trong việc chọn một tiêu chuẩn cho sơ đồ, tài liệu và mã (C ++) của chúng tôi, chúng tôi phải chọn cách này hay cách khác. Điều đó dẫn đến câu hỏi của tôi:
Có cách nào chủ yếu để hiển thị địa chỉ I2C theo ký hiệu thập lục phân hay cả hai đều được sử dụng phổ biến?