RT-Thread studio i2c 驱动TCA62724(RGBLED驱动)芯片问题记录
配置完i2c后根据芯片手册可成功亮灯,但是每次的写入读出时间要很长(3-5s),后来发现是i2c的延时问题,官方给定的是1us的延时,这里需要根据自己的芯片改动
stm32f427vi delay_us =100,亲测可用
这款芯片网上资料较少,根据手册可以写,下面是驱动代码
struct rt_i2c_msg msg;
rt_uint8_t readbuf[2];
rt_uint8_t yellow_buff[5] = {TCA62724_PWM0_AUTOINC_ON_ADDR,0x0F,0x0F,0x0F,0x03};
rt_uint8_t red_buff[5] = {TCA62724_PWM0_AUTOINC_ON_ADDR,0x00,0x00,0x0F,0x03};
rt_uint8_t green_buff[5] = {TCA62724_PWM0_AUTOINC_ON_ADDR,0x00,0x0F,0x00,0x03};
rt_uint8_t blue_buff[5] = {TCA62724_PWM0_AUTOINC_ON_ADDR,0x0F,0x00,0x00,0x03};
rt_uint8_t shutdown_buff[5] = {TCA62724_PWM0_AUTOINC_ON_ADDR,0x00,0x00,0x00,0x03};
void rgb_send(struct rt_i2c_bus_device *dev,rt_uint8_t *sendbuff,rt_uint16_t len)
{
msg.addr = TCA62724_SLAVE_WRITE_ADDR>>1;
msg.flags = RT_I2C_WR;
msg.buf = sendbuff;
msg.len=len;
rt_i2c_transfer(dev, &msg, len);
rt_thread_mdelay(10);
}
void LED_RGB()
{
i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(TCA62724_I2C_BUS_NAME);
if(i2c_bus==RT_NULL)
{
rt_kprintf("open i2c device failed! please check it out !\r\n");
}else {
rt_kprintf("i2c success!!\r\n");
}
while(1)
{
rgb_send(i2c_bus,blue_buff,5);
rt_thread_mdelay(300);
rgb_send(i2c_bus,shutdown_buff,5);
rt_thread_mdelay(300);
}
}