又有问题要来请教各位前辈们。 在用SMBus读取信息时遇到了麻烦,命令的格式是这样的: S+slaveaddr+command code+S+(slaveaddr|0x01)...... 现在发送slaveaddr可以正确得到从机返回的ACK,但是发送command code的时候就收不到ACK了。用示波器抓到图1所示的波形,可以看到,主机在发送完数据之后就直接把CLK拉低了,根本就没有等待接收ACK。 正确的话应该是像图2那样,即使器件没有响应也能收到一个NACk的吧???简单的说就是应该能看到9个CLK脉冲吧??但是我现在发command code之后只能数到8个。 请教一下各位前辈,这有可能是什么地方出了问题??是command code不正确,还是器件有问题??折腾了一个星期了。谢谢。
今天发现这样的情况,在同一根I2C总线上挂了三个器件,先不说遇到问题的0x16那个。 用相同的代码读写其中一个FM器件可以正常操作,(就是利用写进去两个字节,再读出这两个字节的办法)但是读写另外一个24C02的时候就不行了,读出来的全是FF,用示波器看到波形似乎没有什么问题,8bit数据+ACK,读和写的波形都没什么问题。不知道究竟是写不进去,还是读不出来.....
|