我正在使用da14570_ds_v3-1.pdf数据表来开发I2C从设备的驱动程序。从设备需要序列开始-停止写入其寄存器&从它的寄存器开始读取。我找不到如何生成START, STOP和RESTART信号。我怎么才能做到呢?我研究了SDK中提供的EEPROM驱动程序,但它没有说任何关于生成这些比特的内容。是否有任何配置或编程序列来生成这些位?
嗨kartikkg,
你试过使用SDK中的i2c驱动程序吗?我外:你像主人一样操作当您将数据放入i2c FIFO时触发START条件,当FIFO传输时触发i2c控制器触发总线上的STOP条件。
由于MT_dialog
是的MT_dialog,我看了一下SDK中的I2C EEPROM驱动程序,我正在使用相同的配置。基于你的回复,我的假设是这样的,因为我的设备需要两个字节被发送作为寄存器地址,没有停止在他们之间,但主人似乎把停止,因为FIFO得到空后每个字节。另外,我如何生成一个RESTART而不是我需要的STOP ?
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得到空后每个字节。另外,我如何生成一个RESTART而不是我需要的STOP ?
嗨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