技术支持你好!我现在遇到一个这样的问题:我在自己画了一块板子,我按照手册上的步骤对I2C总线进行了配置,但是每次发送数据的时候都只发送了地址后面的数据从来没有被发送到总线上。另外对总线时钟进行100 khz和400 khz的配置都能生效。请问是什么原因导致的数据不能被发送?谢谢!
你可以把地址,寄存器,数据一起发送,不要分开什么先发地址再发数据。直接把所有需要发送的内容打包一起
我是一起发送的啊。空白User_APP(空白){static unsigned char TX[5]={0xAA, 0xAA, 0xAA, 0xAA, 0xAA};static unsigned char RX[5];i2c_device = ad_i2c_open(BH1750);port_init ();demo_i2c_init ();Setup_breath (0, 255, 255, 255);而(1){dev = ad_i2c_open (BH1750);ad_i2c_write (dev TX 3);ad_i2c_close (dev);OS_DELAY (100);}}我新建了这个任务。但是发送出来的数据并不是0 xaa,而是只发送了一个地址0 xd0。空白demo_i2c_init(空白){ad_i2c_init ();I2C_BUS_INIT (I2C1);I2C_DEVICE_INIT (BH1750);}I2C_SLAVE_DEVICE_DMA(I2C1, BH1750, 0xD0, HW_I2C_ADDRESSING_7B,HW_I2C_SPEED_STANDARD,2);/*GWJ*/这个是我初始化程序。而且我用逻辑分析仪分析出来的数据却是0 xa0和0 xd0正好错开一个位。
个人意见,这个I2C都没有ACK,需要确认I2C地址了
非常感谢!确实是地址有问题,现在可以读写了。但是还是有个问题想请教:我的从设备地址的0 xd0,我之前设置的也是0 xd0。发送出去的却xa0是0。现在我将设备地址设置为0 xe8发送出去的就正好是0 xd0了,所以现在可以成功发送数据。从上面的情况看是I2C正好错开了一个为,不知道是什么原因造成的?烦请技术支持帮忙分析下。谢谢!
从机设备地址是七比特位吧,末尾再加上读写位就构成了第一个要发送的字节
是的,地址没有整对。现在好了。
我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出来,希望问题能得到解决。谢谢!
你可以把地址,寄存器,数据一起发送,不要分开什么先发地址再发数据。直接把所有需要发送的内容打包一起
我是一起发送的啊。
空白User_APP(空白)
{
static unsigned char TX[5]={0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
static unsigned char RX[5];
i2c_device = ad_i2c_open(BH1750);
port_init ();
demo_i2c_init ();
Setup_breath (0, 255, 255, 255);
而(1)
{
dev = ad_i2c_open (BH1750);
ad_i2c_write (dev TX 3);
ad_i2c_close (dev);
OS_DELAY (100);
}
}
我新建了这个任务。但是发送出来的数据并不是0 xaa,而是只发送了一个地址0 xd0。
空白demo_i2c_init(空白)
{
ad_i2c_init ();
I2C_BUS_INIT (I2C1);
I2C_DEVICE_INIT (BH1750);
}
I2C_SLAVE_DEVICE_DMA(I2C1, BH1750, 0xD0, HW_I2C_ADDRESSING_7B,HW_I2C_SPEED_STANDARD,2);/*GWJ*/
这个是我初始化程序。而且我用逻辑分析仪分析出来的数据却是0 xa0和0 xd0正好错开一个位。
个人意见,这个I2C都没有ACK,需要确认I2C地址了
非常感谢!
确实是地址有问题,现在可以读写了。但是还是有个问题想请教:我的从设备地址的0 xd0,我之前设置的也是0 xd0。发送出去的却xa0是0。现在我将设备地址设置为0 xe8发送出去的就正好是0 xd0了,所以现在可以成功发送数据。从上面的情况看是I2C正好错开了一个为,不知道是什么原因造成的?烦请技术支持帮忙分析下。谢谢!
从机设备地址是七比特位吧,末尾再加上读写位就构成了第一个要发送的字节
是的,地址没有整对。现在好了。
我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出来,希望问题能得到解决。谢谢!