RTC PCF85063A通过I2C使用i2c_eeprom API调用

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.wsdof.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
rajucoolsuraj
离线
最后看到:11个月,2个星期前
加入:2018-12-12 16:09
RTC PCF85063A通过I2C使用i2c_eeprom API调用

I2C通信代码-

/ / PCF85063A_ADDRESS = 0 x51

i2c_eeprom_init(PCF85063A_ADDRESS, I2C_STANDARD, I2C_7BIT_ADDR, I2C_1BYTE_ADDR);//初始化i2c,在i2c地址大小中放置设备的地址大小
SEND_I2C_COMMAND ((& 0 xff);//设备的地址大小是两个字节长度,如果你的设备是一个字节长度,你可以使用这个指令从0x03地址或任何你需要的地址读取。

WAIT_WHILE_I2C_FIFO_IS_FULL ();//如果Tx FIFO是满的,等待

SEND_I2C_COMMAND (0 x0100);//设置的读访问次数

WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待直到I2C Tx FIFO空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();

read_byte = 0xFF & GetWord16(I2C_DATA_CMD_REG);

我没有得到一个所需的波形,开始传递第一个命令-

SEND_I2C_COMMAND ((& 0 xff);

信号SDA -传输从设备地址,然后不传输从设备的寄存器在SDA行。

我能知道可能的错误吗?
另外,有几篇关于I2C接口传感器没有响应的文章。

我已经厌倦了使用i2c_eeprom API和链接解决方案https://support.dialog-semiconductor.com/i2c-driver-lisxdx-sensor

代码似乎没有适当的响应就结束了。

请尽快请求帮助。

谢谢,

霍尼韦尔

设备:
rajucoolsuraj
离线
最后看到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,

我一直在SDA和SCL线路上试验信号。

根据观察,在ACK时钟脉冲期间,SDA线是高的。master (DA14586)调用一个停止命令。

谢谢。

我可以知道第一篇文章中提到的代码有什么错误吗?

谢谢

霍尼韦尔

PM_Dialog
离线
最后看到:2天12小时前
工作人员
加入:2018-02-08 11:03
嗨rajucoolsuraj,

嗨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首先最重要的一点16位地址然后第二SEND_I2C_COMMAND(地址& 0 xff);将推入地址的其余8位。

谢谢,PM_Dialog

rajucoolsuraj
离线
最后看到:11个月,2个星期前
加入:2018-12-12 16:09
你好,对话框,

你好,对话框,

我使用的代码来自SDK - 6.0.10

从设备地址(对于我的RTC)是1010001 -因此主->从设备初始条件开始

start - 1010001W -从设备寄存器(00h - 11h) - Ack

if writing to slave register - I pass Data_Byte after Ack;

如果从slave读取-重启I2C - 1010001R - receive data_byte - Ack

我还试验了另一个具有相同I2C接口的传感器-设备在ACk时钟脉冲上确认。

因为RTC在I2C上读/写寄存器时不需要运行时钟;我希望能够帮助解释使I2C_TAR_REG正确地将其传递给I2C总线事务的地址。

0x51(1010001)或0xA2(1010001W) - W =写位- 0

谢谢