I2C通信代码 -
// pcf85063a_address = 0x51
i2c_eeprom_init(pcf85063a_address,i2c_standard,i2c_7bit_addr,i2c_1byte_addr);//初始化I2C,在I2C地址大小中放置设备的地址大小
send_i2c_command(0x08&0xff);//设备具有的地址大小为两个字节长度,如果您的设备需要一个字节长度,则可以使用此指令从0x03地址或所需的任何地址读取。
等待_while_i2c_fifo_is_full();//等待TX FIFO已满
send_i2c_command(0x0100);//设置
wait_until_i2c_fifo_is_empty();//等到I2C TX FIFO空
wait_until_no_master_actity();
READ_BYTE = 0xFF&GETWORD16(I2C_DATA_CMD_REG);
我没有获得所需的波形,启动第一命令的传输 -
send_i2c_command(0x08&0xff);
信号SDA - 发送从设备地址,然后不在SDA线上发送从设备的寄存器。
我可以知道可能的错误吗?
此外,I2C接口上有几个帖子到传感器未响应。
我厌倦了使用i2c_eeprom api和链接解决方案 -https://support.dialog-semicondiondiondumondiondum/i2c-driver-lisxdx-sensor.
代码似乎结束了适当的响应。
请求帮助尽快。
谢谢,
raju.
霍尼韦尔
设备:
你好对话框,
我一直在尝试SDA和SCL线上的信号。
在观察中,在ACK时钟脉冲期间SDA线很高。主人(da14586)调用stop命令。
谢谢。
我可以知道第一篇文章中提到的代码中的错误。
谢谢
raju.
霍尼韦尔
嗨rajucoolsuraj,
我强烈建议看看SDK6的I2C EEPROM示例。该项目位于SDK目录 \ projects \ target_apps \ peripheral_examples \ i2c \ i2c_eeprom。PIF您的传感器的寄存器使用两个字节来寻址寄存器中的数据,您应该使用2字节寻址(I2C_2BYTES_ADDR)。send_i2c_command(0x08&0xff);将只发送一个字节,但如果我能够正确地形成评论,那些设备具有的地址大小是两个字节的长度。send_i2c_command将所需的数据推入I2C总线,因为您需要以启动I2C通信是内部寄存器的地址,Send_i2c_command((地址>> 8)&0xff)将只是推出8个最重要的位16bit地址,然后是第二个send_i2c_command(地址和0xff);将推动其他8位的地址。
谢谢,PM_DIALOG.
你好对话框,
我正在使用SDK - 6.0.10的代码
从设备地址(对于我的RTC)是1010001 - 因此主机 - >从属初始条件开始
START - 1010001W - 从设备寄存器(00H - 11H) - ACK
如果写入从属寄存器 - 我在ACK之后传递Data_Byte;
如果从Slave读取 - 重新启动I2C - 1010001R - 接收Data_Byte - Ack
我还尝试了另一个具有相同I2C接口的传感器 - 设备在ACK时钟脉冲上确认。
由于RTC不需要在I2C上读取/写入其寄存器的时钟;我想帮助解释赋予I2C_TAR_REG的地址,以将其传递给I2C总线事务。
0x51(1010001)或0xA2(1010001W) - W =写入位 - 0
谢谢
raju.