技术支持你好!我现在遇到一个这样的问题:我在自己画了一块板子,我按照手册上的步骤对I2C总线进行了配置,但是每次发送数据的时候都只发送了地址后面的数据从来没有被发送到总线上。另外对总线时钟进行100千赫和400千赫的配置都能生效。请问是什么原因导致的数据不能被发送?谢谢!
你可以把地址,寄存器,数据一起发送,不要分开什么先发地址再发数据。直接把所有需要发送的内容打包一起
我是一起发送的啊。void用户应用程序(void){静态无符号字符TX[5]={0xAA,0xAA,0xAA,0xAA,0xAA};静态无符号字符RX[5];i2c\ U设备开发=ad\ U i2c\ U打开(BH1750);端口_init();demo_i2c_init();设置呼吸(0,255,255,255);而(1){dev=adèi2cèU open(BH1750);ad\u i2c\u写入(dev,TX,3);ADI2C关闭(dev);操作系统延迟(100);}}我新建了这个任务。但是发送出来的数据并不是0XAA型而是只发送了一个地址0xD0。void demo\u i2c\u init(无效){adØi2cØinit();I2C总线初始化(I2C1);I2C设备初始化(BH1750);}I2C\从设备\ DMA(I2C1,BH1750,0xD0,HW\ I2C\寻址\ 7B,HW\ I2C\速度\标准,2)/*GWJ公司*/这个是我初始化程序。而且我用逻辑分析仪分析出来的数据却是0XA0和0XD0型正好错开一个一点位。
个人意见,这个I2C都没有确认需要确认I2C地址了
非常感谢!确实是地址有问题,现在可以读写了。但是还是有个问题想请教:我的从设备地址的0xD0,我之前设置的也是0xD0。发送出去的却是0xA0现在我将设备地址设置为0xE8,发送出去的就正好是0xD0型了,所以现在可以成功发送数据。从上面的情况看是I2C正好错开了一个一点为,不知道是什么原因造成的?烦请技术支持帮忙分析下。谢谢!
从机设备地址是七比特位吧,末尾再加上读写位就构成了第一个要发送的字节
是的,地址没有整对。现在好了。
我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出来,希望问题能得到解决。谢谢!
你可以把地址,寄存器,数据一起发送,不要分开什么先发地址再发数据。直接把所有需要发送的内容打包一起
我是一起发送的啊。
void用户应用程序(void)
{
静态无符号字符TX[5]={0xAA,0xAA,0xAA,0xAA,0xAA};
静态无符号字符RX[5];
i2c\ U设备开发=ad\ U i2c\ U打开(BH1750);
端口_init();
demo_i2c_init();
设置呼吸(0,255,255,255);
而(1)
{
dev=adèi2cèU open(BH1750);
ad\u i2c\u写入(dev,TX,3);
ADI2C关闭(dev);
操作系统延迟(100);
}
}
我新建了这个任务。但是发送出来的数据并不是0XAA型而是只发送了一个地址0xD0。
void demo\u i2c\u init(无效)
{
adØi2cØinit();
I2C总线初始化(I2C1);
I2C设备初始化(BH1750);
}
I2C\从设备\ DMA(I2C1,BH1750,0xD0,HW\ I2C\寻址\ 7B,HW\ I2C\速度\标准,2)/*GWJ公司*/
这个是我初始化程序。而且我用逻辑分析仪分析出来的数据却是0XA0和0XD0型正好错开一个一点位。
个人意见,这个I2C都没有确认需要确认I2C地址了
非常感谢!
确实是地址有问题,现在可以读写了。但是还是有个问题想请教:我的从设备地址的0xD0,我之前设置的也是0xD0。发送出去的却是0xA0现在我将设备地址设置为0xE8,发送出去的就正好是0xD0型了,所以现在可以成功发送数据。从上面的情况看是I2C正好错开了一个一点为,不知道是什么原因造成的?烦请技术支持帮忙分析下。谢谢!
从机设备地址是七比特位吧,末尾再加上读写位就构成了第一个要发送的字节
是的,地址没有整对。现在好了。
我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出来,希望问题能得到解决。谢谢!