准备硬件:
确保I2C总线连接正确:SCL(时钟线)、SDA(数据线)、GND(地线)。
确保所有设备都已正确上电(VCC/VDD)。
确保总线有合适的上拉电阻(通常在SCL和SDA线上拉到VCC,阻值范围在1KΩ - 10KΩ,常见4.7KΩ)。
断开或移除任何你已知地址的设备(如果它们可能干扰扫描过程或造成地址冲突)。
选择扫描工具/方法:
使用微控制器/开发板(如Arduino, Raspberry Pi Pico, STM32):
编写一个简单的扫描程序。
伪代码/Arduino示例 (基于Wire库):
- #include <Wire.h>
- void setup() {
- Wire.begin(); // 加入I2C总线作为主设备
- Serial.begin(9600); // 启动串口用于输出结果
- while (!Serial); // 等待串口连接(仅限Leonardo/Micro等)
- Serial.println("\nI2C Scanner");
- }
- void loop() {
- byte error, address;
- int nDevices;
- Serial.println("Scanning...");
- nDevices = 0;
- for (address = 1; address < 127; address++) { // 标准I2C地址范围是0x08(8)到0x77(119)
- Wire.beginTransmission(address);
- error = Wire.endTransmission();
- if (error == 0) { // 收到ACK
- Serial.print("I2C device found at address 0x");
- if (address < 16) Serial.print("0");
- Serial.print(address, HEX);
- Serial.println(" !");
- nDevices++;
- } else if (error == 4) { // 收到其他错误(地址保留?)
- Serial.print("Unknown error at address 0x");
- if (address < 16) Serial.print("0");
- Serial.println(address, HEX);
- }
- }
- if (nDevices == 0) {
- Serial.println("No I2C devices found\n");
- } else {
- Serial.println("Scan complete\n");
- }
- delay(5000); // 每5秒扫描一次
- }
|