海思的IIC函数:hi_i2c_master_send(client, buf, idx);
当寄存器reg_addr_num 为1,write_num为2时可以正常写入,为1时不能写入,大余2时,还是写成功两个字节,现在想要一次性写入多个字节,怎么解决呢?
int hi_i2c_write_nbyte(unsigned char i2c_bus,unsigned char devaddress,unsigned int reg_addr, unsigned int reg_addr_num, unsigned char *pdata, unsigned int data_byte_num)
{
unsigned char buf[256];
int ret = 0,i,write_num;
int idx = 0;
struct i2c_client *client;
write_num=data_byte_num;
if(write_num>256)
{
printk("i2c write can write 256 data\n");
write_num=256;
}
if(i2c_bus==1)
client = I2C1_client;
else if(i2c_bus==2)
client = I2C2_client;
else if(i2c_bus==3)
client = I2C3_client;
else if(i2c_bus==4)
client = I2C4_client;
else
client = I2C1_client;
client->addr=devaddress;
/* reg_addr config */
if (reg_addr_num == 2)
buf[idx++] = (reg_addr >> 8);
buf[idx++] = reg_addr;
/* data config */
for(i=0;i<write_num;i++)
{
buf[idx++] = pdata[i];
}
ret = hi_i2c_master_send(client, buf, idx);
return ret;
}