我使用da14570_ds_v3-1.pdf数据表为I2C从设备开发一个驱动程序。从设备需要序列START -STOP写入寄存器&START STOP to Read from its寄存器。我找不到如何生成START, STOP和RESTART信号。我怎么能做同样的事呢?我已经研究了在SDK中提供的EEPROM驱动程序,但它没有说任何关于生成这些位的内容。有任何配置或编程序列来生成这些位吗?
嗨kartikkg,
你试过使用SDK中的i2c驱动程序吗?我如果你像主人一样行事当你将数据放入i2c FIFO时触发START条件,当FIFO传输时触发i2c控制器在总线上触发STOP条件。
由于MT_dialog
是的MT_dialog,我看了一下SDK中的I2C EEPROM驱动程序,我正在使用相同的配置。基于你的回复,我的假设是这样的,因为我的设备需要两个字节发送作为寄存器地址之间没有停止,但主人似乎放了停止,因为FIFO在每个字节后得到空。另外,我如何生成一个重启而不是停止,因为我需要?
START和STOP信号由控制器产生。由于您的设备使用两个字节地址,您是否尝试将I2C_ADDRESS_SIZE定义为I2C_2BYTES_ADDR。
嗨MT_dialog,我查看了代码,函数i2c_send_address似乎可以完成您提到的工作,但是我还没有尝试它。我不理解这个函数wrt的行为开始停止信号&这一行特别是SetWord16(I2C_TAR_REG, i2c_dev_address | ((address_to_send & 0x10000) >> 16));//设置从设备地址。你能给我介绍一下这个函数以及它如何产生这些信号吗因为我自己都没有可以检查的范围。我还想知道如何和何时生成一个RESTART。
你不能强制I2C产生START/RESTART或STOP信号,如果在FIFO中有数据,那么控制器将自动产生这些信号。i2c_send_address函数将禁用控制器和传感器的地址,之后控制器将启用,等到处于闲置状态,然后司机将MSB地址的FIFO和明年将LSB FIFO。如果你在FIFO为空之前放置地址的第二个字节,控制器将不会产生一个停止位。
嗨kartikkg,
你试过使用SDK中的i2c驱动程序吗?我如果你像主人一样行事当你将数据放入i2c FIFO时触发START条件,当FIFO传输时触发i2c控制器在总线上触发STOP条件。
由于MT_dialog
是的MT_dialog,我看了一下SDK中的I2C EEPROM驱动程序,我正在使用相同的配置。基于你的回复,我的假设是这样的,因为我的设备需要两个字节发送作为寄存器地址之间没有停止,但主人似乎放了停止,因为FIFO在每个字节后得到空。另外,我如何生成一个重启而不是停止,因为我需要?
嗨kartikkg,
START和STOP信号由控制器产生。由于您的设备使用两个字节地址,您是否尝试将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));//设置从设备地址。
你能给我介绍一下这个函数以及它如何产生这些信号吗因为我自己都没有可以检查的范围。我还想知道如何和何时生成一个RESTART。
嗨kartikkg,
你不能强制I2C产生START/RESTART或STOP信号,如果在FIFO中有数据,那么控制器将自动产生这些信号。i2c_send_address函数将禁用控制器和传感器的地址,之后控制器将启用,等到处于闲置状态,然后司机将MSB地址的FIFO和明年将LSB FIFO。如果你在FIFO为空之前放置地址的第二个字节,控制器将不会产生一个停止位。
由于MT_dialog