3个帖子/ 0新
最后一篇
克瑞克
离线
最后一次露面:3年8个月前
加入:2015-09-28 16:27
I2C问题

我正在尝试在SDK 5.0.4中使用I2C_EEPROM来将信息写入数字电位器。

我想写入地址0b0101100指令字节0x00和信息0xF8。

我正在使用i2c_write_byte函数,但由于我看起来有些原因,它一直保持发送地址字节不停,而不是其他任何东西。

当我尝试使用函数时:

send_i2c_command(0x58);
send_i2c_command(0x00);
send_i2c_command(0xff);

无论我发送什么,它仍然会发送相同的地址字节我上次放在i2c_write_byte函数中。

我的问题是:

什么是最棒的方式,我可以通过I2C编写三个字节(Addr,指令,数据)(可选用于使用SDK 5.0.4代码)?
为什么它不断地发送地址字节不停而不是发送指令/数据字节?

设备:
克瑞克
离线
最后一次露面:3年8个月前
加入:2015-09-28 16:27
有时钟和数据切换

有时钟和数据转换。我的第一个假设是错误的,它花了一些时间,但I2C仍然一遍又一遍地发送相同的地址。

即使我只发送I2C_WRITE_BYTE(0x22,0x30),它仍然会发送我最初遍历的地址。这只是做任何它想要的东西而不是我发送的命令。我不确定发生了什么。

mt_dialog.
离线
最后一次露面:2个月1周前
职员
加入:2015-06-08 11:34
嗨krixen,

嗨krixen,

如果I2C模块无法从传感器或内存中取消响应,并且您继续推动I2C交互,则I2C将仅发送到I2C_TAR_REG的地址,直到开始授权数据之前存在响应你已经指示了。因此,您仅在分析器上获取模块的地址而不是您的数据的原因是因为当I2C模块发送传感器的地址时,另一侧的传感器没有响应。具有2byte寄存器地址(0x22)并编写字节(0x08)的裸机可能是:

i2c_eeprom_init(i2c_slave_address,i2c_speed_mode,i2c_address_mode,i2c_address_size);

global_int_disable();
wait_until_no_master_actity();//等到没有主活动
send_i2c_command((0x22 >> 8)&0xff);//设置地址MSB,写访问
send_i2c_command(0x22&0xff);//设置LSB
send_i2c_command(0x08&0xff);
global_int_restore();

谢谢mt_dialog.