add iic scan

This commit is contained in:
yelvlab 2024-12-05 20:06:30 +08:00
parent dde90dc162
commit 16767ae172
3 changed files with 55 additions and 3 deletions

View File

@ -49,4 +49,6 @@ void LDC1612_Init(void);
int LDC1612_read_reg(uint8_t device_address, uint8_t reg_address, uint8_t *data, uint16_t length); int LDC1612_read_reg(uint8_t device_address, uint8_t reg_address, uint8_t *data, uint16_t length);
int i2c_write_reg(uint8_t device_address, uint8_t *data); int i2c_write_reg(uint8_t device_address, uint8_t *data);
void I2C_Scan(void);
#endif //LDC1612_H #endif //LDC1612_H

View File

@ -3,8 +3,6 @@
// //
#include "LDC1612.h" #include "LDC1612.h"
#include "i2c.h"
void led_config(void) void led_config(void)
{ {
@ -264,4 +262,54 @@ i2c_ack_config(LDC_I2C, I2C_ACK_ENABLE); // 重新启用ACK
return 0; return 0;
} }
void I2C_Scan(void) {
uint32_t timeout;
uint8_t address;
int found_devices = 0;
printf("Scanning I2C bus...\r\n");
for (address = 1; address < 127; address++) {
timeout = 0;
// 生成起始条件
while (i2c_flag_get(LDC_I2C, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT))
timeout++;
if (timeout >= I2C_TIME_OUT) {
continue; // 超时,跳过该地址
}
i2c_start_on_bus(LDC_I2C);
timeout = 0;
// 等待起始条件发送完成
while (!i2c_flag_get(LDC_I2C, I2C_FLAG_SBSEND) && (timeout < I2C_TIME_OUT))
timeout++;
if (timeout >= I2C_TIME_OUT) {
continue; // 超时,跳过该地址
}
i2c_master_addressing(LDC_I2C, address << 1, I2C_TRANSMITTER);
timeout = 0;
// 等待地址发送完成
while (!i2c_flag_get(LDC_I2C, I2C_FLAG_ADDSEND) && (timeout < I2C_TIME_OUT))
timeout++;
if (timeout < I2C_TIME_OUT) {
i2c_flag_clear(LDC_I2C, I2C_FLAG_ADDSEND);
printf("Found device at 0x%02X\r\n", address);
found_devices++;
}
// 生成停止条件
i2c_stop_on_bus(LDC_I2C);
timeout = 0;
while (i2c_flag_get(LDC_I2C, I2C_FLAG_STPDET) && (timeout < I2C_TIME_OUT))
timeout++;
}
if (found_devices == 0) {
printf("No I2C devices found.\r\n");
} else {
printf("Total %d I2C devices found.\r\n", found_devices);
}
}

View File

@ -33,7 +33,9 @@ int main(void)
printf("XLSW-3DP-LDC1612! V0.0.1\r\n"); printf("XLSW-3DP-LDC1612! V0.0.1\r\n");
printf("\r\n"); printf("\r\n");
LDC1612_Init(); LDC1612_I2CConfig();
// LDC1612_Init();
I2C_Scan();