3个帖子/ 0个新
最后发表
Krixen
离线
最后看到:3年9个月前
加入:2015-09-28 16:27
I2C问题

我试图在SDK 5.0.4中使用I2C_EEPROM写入信息到数字电位器。

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

我使用了I2C_Write_Byte函数,但出于某种原因,当我查看范围时,它不断发送地址字节不间断,从来没有其他任何东西。

当我尝试使用这些函数时:

SEND_I2C_COMMAND (0 x58);
SEND_I2C_COMMAND (0 x00);
SEND_I2C_COMMAND (0 xff);

无论我发送什么,它仍然发送我最后放入I2C_Write_Byte函数的相同地址字节。

我的问题是:

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

设备:
Krixen
离线
最后看到:3年9个月前
加入:2015-09-28 16:27
时钟和数据交换了吗

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

即使当我只发送I2C_Write_Byte(0x22, 0x30),它仍然发送我最初硬编码的地址一遍又一遍。它只是做它想做的事情,而不是我发送的命令。我不知道发生了什么。

MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨Krixen,

嗨Krixen,

如果I2C模块多恩没有得到传感器的响应或内存和你继续推动一个I2C交互I2C只会发送的地址设置为I2C_TAR_REG直到有一个反应,之前开始emmiting数据指示。所以你在分析器上只得到模块的地址而不是你的数据的原因是因为当I2C模块发送传感器的地址时,另一边的传感器没有响应。一个带有2字节寄存器地址(0x22)并写入一个字节(0x08)的裸事务可以是:

i2c_eeprom_init(I2C_SLAVE_ADDRESS, I2C_SPEED_MODE, I2C_ADDRESS_MODE, I2C_ADDRESS_SIZE);

GLOBAL_INT_DISABLE ();
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待没有主活动
SEND_I2C_COMMAND((0x22 >> 8) & 0xFF);//设置地址MSB,写访问
SEND_I2C_COMMAND(0将& 0 xff);/ /设置LSB
SEND_I2C_COMMAND ((& 0 xff);
GLOBAL_INT_RESTORE ();

由于MT_dialog