我正在使用da14570_ds_v3-1.pdf datasheet为I2C从设备开发一个驱动程序。从设备需要序列start -stop以写入其寄存器&从其寄存器开始停止读取。我找不到如何生成启动,停止和重启信号。我该怎么做?我研究了SDK中提供的EEPROM驱动程序,但它没有说任何关于生成这些位的东西。是否有任何配置或编程序列来生成这些位?
嗨Kartikkg,
您是否尝试过从SDK使用I2C驱动程序?一世f你是主人当将数据放入I2C FIFO时,将触发启动条件,当FIFO发送它触发I2C控制器以触发总线上的停止条件。
谢谢mt_dialog.
是的mt_dialog,我在SDK中查看了I2C EEPROM驱动程序,我使用相同的配置。基于您的回复我的假设是这样,由于我的设备需要两个字节,以便在它们之间发送寄存器地址,但是主机似乎放置停止,因为FIFO在每个字节后都会空。此外,我如何生成重启而不是我需要的停车?
启动和停止信号由控制器生成。由于您的设备使用了两个字节地址,您是否尝试将I2C_Address_size定义为i2c_2bytes_addr。
嗨mt_dialog,我看了代码,函数i2c_send_address似乎做了你提到的作业,但仍然没有尝试过。我不了解该功能WRT的行为,以便在特定setword16(i2c_tar_reg,i2c_dev_address |((address_to_send&0x10000)>> 16)));//设置从设备addres。你能通过这个功能来走我吗?它将如何生成这些信号,因为我没有待检查自己的范围。此外,我也想知道生成重启的方法和何时。
如果FIFO中有数据,则无法强制I2C生成启动/重启或停止信号,则控制器会自动生成这些信号。i2c_send_address函数将禁用控制器并设置传感器的地址,之后将启用控制器并将等待在空闲状态,然后驱动程序将在FIFO中的地址的MSB放置,然后将下一个将放置LSB在FIFO。如果在FIFO为空之前放置地址的第二个字节,则控制器不会生成停止位。
嗨Kartikkg,
您是否尝试过从SDK使用I2C驱动程序?一世f你是主人当将数据放入I2C FIFO时,将触发启动条件,当FIFO发送它触发I2C控制器以触发总线上的停止条件。
谢谢mt_dialog.
是的mt_dialog,我在SDK中查看了I2C EEPROM驱动程序,我使用相同的配置。基于您的回复我的假设是这样,由于我的设备需要两个字节,以便在它们之间发送寄存器地址,但是主机似乎放置停止,因为FIFO在每个字节后都会空。此外,我如何生成重启而不是我需要的停车?
嗨Kartikkg,
启动和停止信号由控制器生成。由于您的设备使用了两个字节地址,您是否尝试将I2C_Address_size定义为i2c_2bytes_addr。
谢谢mt_dialog.
嗨mt_dialog,
我看了代码,函数i2c_send_address似乎做了你提到的作业,但仍然没有尝试过。我不了解该功能WRT的行为,以便在特定setword16(i2c_tar_reg,i2c_dev_address |((address_to_send&0x10000)>> 16)));//设置从设备addres。
你能通过这个功能来走我吗?它将如何生成这些信号,因为我没有待检查自己的范围。此外,我也想知道生成重启的方法和何时。
嗨Kartikkg,
如果FIFO中有数据,则无法强制I2C生成启动/重启或停止信号,则控制器会自动生成这些信号。i2c_send_address函数将禁用控制器并设置传感器的地址,之后将启用控制器并将等待在空闲状态,然后驱动程序将在FIFO中的地址的MSB放置,然后将下一个将放置LSB在FIFO。如果在FIFO为空之前放置地址的第二个字节,则控制器不会生成停止位。
谢谢mt_dialog.