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

8个职位/ 0个新职位
最后发表
gwjgwgshxd
离线
最后看到:3年4个月前
加入:2016-12-14 52
DA14680的I2C只发送设备地址而没有继续发送数据问题

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

设备:
index219
离线
最后看到:1年8个月前
加入:2016-05-23 07:00
你可以把地址,寄存器,数据一起发送

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

gwjgwgshxd
离线
最后看到:3年4个月前
加入:2016-12-14 52
我是一起发送的啊。

我是一起发送的啊。
空白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正好错开一个位。

附件:
GumpYang
离线
最后看到:12小时34分钟前
加入:2014-05-20 07:38
个人意见,这个I2C都没有ACK,需要确认I2C地址了

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

gwjgwgshxd
离线
最后看到:3年4个月前
加入:2016-12-14 52
非常感谢!

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

userYR
离线
最后看到:3年7个月前
加入:2016-11-08 08:28
从机设备地址是七比特位吧

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

gwjgwgshxd
离线
最后看到:3年4个月前
加入:2016-12-14 52
是的,地址没有整对。现在好了。

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

gwjgwgshxd
离线
最后看到:3年4个月前
加入:2016-12-14 52
我将数据手册上给的标准时序图与我自己采集到的实际时序图贴出

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