DA14680的I2C只发送设备地址而没有继续发送数据问题

8 posts / 0 new
Last post
吉瓦jgwgshxd
Offline
Last seen:2 years 10 months ago
加入:2016-12-14 10:52
DA14680的I2C只发送设备地址而没有继续发送数据问题

技术支持你好!
我现在遇到一个这样的问题:我在自己画了一块板子,我按照手册上的步骤对I2C总线进行了配置,但是每次发送数据的时候都只发送了地址后面的数据从来没有被发送到总线上。另外对总线时钟进行100KHz和400KHz的配置都能生效。请问是什么原因导致的数据不能被发送?谢谢!

Device:
index219
Offline
Last seen:1 year 2 months ago
加入:2016-05-23 07:00
你可以把地址,寄存器,数据一起发送

你可以把地址,寄存器,数据一起发送,不要分开什么先发地址再发数据。直接把所有需要发送的内容打包一起

吉瓦jgwgshxd
Offline
Last seen:2 years 10 months ago
加入:2016-12-14 10:52
我是一起发送的啊。

我是一起发送的啊。
void User_APP(void)
{
static unsigned char TX[5]={0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
static unsigned char RX[5];
i2c_device dev = ad_i2c_open(BH1750);
port_init();
demo_i2c_init();
setup_breath(0, 255, 255, 255);
while(1)
{
dev = ad_i2c_open(BH1750);
ad_i2c_write(dev, TX, 3);
ad_i2c_close(dev);
OS_DELAY(100);
}
}
我新建了这个任务。但是发送出来的数据并不是0XAA,而是只发送了一个地址0xD0.
void demo_i2c_init(void)
{
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*/
这个是我初始化程序。而且我用逻辑分析仪分析出来的数据却是0XA0,和0XD0正好错开一个bit位。

附件:
GumpYang
Offline
Last seen:4 days 10 hours ago
加入:2014-05-20 07:38
个人意见,这个I2C都没有ACK,需要确认I2C地址了

个人意见,这个I2C都没有ACK,需要确认I2C地址了

吉瓦jgwgshxd
Offline
Last seen:2 years 10 months ago
加入:2016-12-14 10:52
非常感谢!

非常感谢!
确实是地址有问题,现在可以读写了。但是还是有个问题想请教:我的从设备地址的0xD0,我之前设置的也是0xD0.发送出去的却是0xA0。现在我将设备地址设置为0xE8,发送出去的就正好是0xD0了,所以现在可以成功发送数据。从上面的情况看是I2C正好错开了一个bit为,不知道是什么原因造成的?烦请技术支持帮忙分析下。谢谢!

userYR
Offline
Last seen:3 years 1 month ago
加入:2016-11-08 08:28
从机设备地址是七比特位吧

从机设备地址是七比特位吧,末尾再加上读写位就构成了第一个要发送的字节

吉瓦jgwgshxd
Offline
Last seen:2 years 10 months ago
加入:2016-12-14 10:52
是的,地址没有整对。现在好了。

是的,地址没有整对。现在好了。

吉瓦jgwgshxd
Offline
Last seen:2 years 10 months ago
加入:2016-12-14 10:52
我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出

我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出来,希望问题能得到解决。谢谢!