linux的IIC程序有关问题
linux的IIC程序问题
利用linux-6410的iic驱动与RDA5820(射频芯片)芯片通信,从RDA5820读取数据的时候,得到的数据总是全FF,用同一个IIC借口读取TMP100温度传感器的温度却能够正常读取,也就是说IIC应该是可以用的;RDA5820的处理方式是按照一个可用的事例去处理的,不知道是哪里出了问题,有用过RDA5820这个芯片的吗?帮忙解决一下,是读取的方式不对吗
u16 RDA5820_RD_Reg(int fd, u8 addr)
{
u16 res;
int readsize=0;
int writesize=0;
unsigned char read_buf[5]={0};
unsigned char write_buf[7]={0};
//设置从机地址
res = ioctl(fd,I2C_SLAVE,0x11);
if(res < 0){
return -1;
}
write_buf[0] = RDA5820_WRITE;
writesize=write(fd,write_buf,1);//写命令
if (writesize<0)
{
close(fd);
return -1;
}
usleep(100); //
if(write(fd,&addr,1)!=1) //写地址
{
close(fd);
return -1;
}
write_buf[0] = RDA5820_READ;
writesize=write(fd,write_buf,1);//写命令
if (writesize<0)
{
close(fd);
return -1;
}
readsize=read(fd,read_buf,sizeof(read_buf)); //读数据,这里读出来的值全是FF
if(readsize<0)
{
close(fd);
return -1;
}
for (i=0;i<sizeof(read_buf);i++)
{
printf("char= %d\n",read_buf[i]);
}
}
int main(void)
{
int fd,res,i;
fd = open("/dev/i2c-0",O_RDWR);
if (fd<0)
{
printf("can't open i2c device!\n");
exit(1);
}
res = ioctl(fd,I2C_TENBIT,0); //7位地址
if(res < 0){
close(fd);
return -1;
}
RDA5820_RD_Reg(fd,0x00); //读取RDA5820里的数据
close(fd);
return 0;
}
------解决思路----------------------
看看芯片的编程手册 是不是某些该初始化的没初始化
------解决思路----------------------
一般写就算没写进去也没啥提示 读一下就知道了
利用linux-6410的iic驱动与RDA5820(射频芯片)芯片通信,从RDA5820读取数据的时候,得到的数据总是全FF,用同一个IIC借口读取TMP100温度传感器的温度却能够正常读取,也就是说IIC应该是可以用的;RDA5820的处理方式是按照一个可用的事例去处理的,不知道是哪里出了问题,有用过RDA5820这个芯片的吗?帮忙解决一下,是读取的方式不对吗
u16 RDA5820_RD_Reg(int fd, u8 addr)
{
u16 res;
int readsize=0;
int writesize=0;
unsigned char read_buf[5]={0};
unsigned char write_buf[7]={0};
//设置从机地址
res = ioctl(fd,I2C_SLAVE,0x11);
if(res < 0){
return -1;
}
write_buf[0] = RDA5820_WRITE;
writesize=write(fd,write_buf,1);//写命令
if (writesize<0)
{
close(fd);
return -1;
}
usleep(100); //
if(write(fd,&addr,1)!=1) //写地址
{
close(fd);
return -1;
}
write_buf[0] = RDA5820_READ;
writesize=write(fd,write_buf,1);//写命令
if (writesize<0)
{
close(fd);
return -1;
}
readsize=read(fd,read_buf,sizeof(read_buf)); //读数据,这里读出来的值全是FF
if(readsize<0)
{
close(fd);
return -1;
}
for (i=0;i<sizeof(read_buf);i++)
{
printf("char= %d\n",read_buf[i]);
}
}
int main(void)
{
int fd,res,i;
fd = open("/dev/i2c-0",O_RDWR);
if (fd<0)
{
printf("can't open i2c device!\n");
exit(1);
}
res = ioctl(fd,I2C_TENBIT,0); //7位地址
if(res < 0){
close(fd);
return -1;
}
RDA5820_RD_Reg(fd,0x00); //读取RDA5820里的数据
close(fd);
return 0;
}
------解决思路----------------------
看看芯片的编程手册 是不是某些该初始化的没初始化
------解决思路----------------------
一般写就算没写进去也没啥提示 读一下就知道了