I2C通信代码 -
// PCF85063A_ADDRESS = 0x51
i2c_eeprom_init(PCF85063A_ADDRESS,I2C_STANDARD,I2C_7BIT_ADDR,I2C_1BYTE_ADDR);//初始化I2C,在I2C地址大小将设备的地址大小
SEND_I2C_COMMAND(0x08的&为0xFF);//该设备具有的地址长度是两个字节长度,如果你的设备需要一个字节长度,你可以使用该指令从0×03地址或任何地址,你需要阅读。
WAIT_WHILE_I2C_FIFO_IS_FULL();//等待,如果发送FIFO满
SEND_I2C_COMMAND(0100);//设置读取<大小>次访问
WAIT_UNTIL_I2C_FIFO_IS_EMPTY();//等待,直到I2C发送FIFO空
WAIT_UNTIL_NO_MASTER_ACTIVITY();
READ_BYTE = 0xFF的&GetWord16(I2C_DATA_CMD_REG);
我不上发起第一指挥权移交获得所需的波形 -
SEND_I2C_COMMAND(0x08的&为0xFF);
信号SDA - 发送从设备的地址,然后不发送从设备的SDA线寄存器。
我能知道可能的错误呢?
此外,出现了几个后I2C接口上的传感器没有响应。
我已经使用i2c_eeprom API和链路解腻 -https://support.dialog-semiconductor.com/i2c-driver-lisxdx-sensor
该代码似乎要结束了wihout适当的响应。
请求帮助,尽快。
谢谢,
raju.
霍尼韦尔
设备:
你好对话框,
我一直在尝试对SDA和SCL信号。
上观察时,SDA线是ACK时钟脉冲期间高。和主(DA14586)调用停止命令。
谢谢。
我可以知道什么是错在第一篇文章中提到的代码。
谢谢
RAJU
霍尼韦尔
嗨rajucoolsuraj,
我会强烈建议去看看在SDk6的I2C EEPROM的例子。该项目是在SDK目录 \项目\ 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(地址&0xFF的)的;将推地址的其余8位。
谢谢,PM_DIALOG.
你好对话框,
我使用的代码从SDK - 6.0.10
从属设备地址(我的RTC)是1010001 - 因此其主 - >从初始状态开始与
开始 - 1010001W - 从属设备寄存器(00H - 11H) - 确认
如果写入机寄存器 - 我通过Data_Byte确认后;
如果从机读取数据 - 重新启动I2C - 1010001R - 收到data_byte - 确认
我还试验了用相同的I2C接口的另一传感器 - 承认所述ACK时钟脉冲的装置。
由于RTC并不需要运行读取/写入寄存器通过I2C的时钟;我想解释,使得它适合的I2C_TAR_REG将它传递给I2C总线交易的地址有帮助。
0x51(1010001)或0xA2(1010001W) - W =写入位 - 0
谢谢
raju.