/*
* Copyright (c) 2006-2020, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020-09-01 tyustli first version
*/
#include "rtconfig.h"
#ifdef RT_USING_I2C
#include <rtdevice.h>
#include <rtthread.h>
#define TEST_I2C_BUS "i2c1"
/*find slave i2c device address*/
static void i2c_find_address(const char *name)
{
rt_device_t dev;
dev = rt_device_find(TEST_I2C_BUS);
if (!dev)
{
return;
}
if (rt_device_open(dev, RT_DEVICE_OFLAG_RDWR) != RT_EOK)
{
return;
}
struct rt_i2c_msg msgs[2];
uint8_t buf = 0;
msgs[0].flags = RT_I2C_WR;
msgs[0].buf = &buf;
msgs[0].len = 1;
msgs[1].flags = RT_I2C_RD;
msgs[1].buf = &buf;
msgs[1].len = 1;
for (int i = 0; i <= 0x7f; i++)
{
int len;
msgs[0].addr = i;
msgs[1].addr = i;
len = rt_i2c_transfer((struct rt_i2c_bus_device *)dev, msgs, 2);
if (len == 2)
{
rt_kprintf("add:0x%x transfer success \r\n", i);
}
}
rt_device_close(dev);
return;
}
MSH_CMD_EXPORT(i2c_find_address, find i2c address);
#endif /* RT_USING_I2C */
/******************** end of file ****************/