This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ONET8501PB: 请问,通过IIC控制,读操作,发送寄存器地址没有响应信号是什么原因

Part Number: ONET8501PB
Other Parts Discussed in Thread: ONET2804T

读操作,发送器件地址有ACK,但是发送寄存器0地址,没有ACK信号(第一行为DATA输出信号,第二行为DATA输入信号,对应同一个DATA引脚,第三行为CLK信号)

写操作,写寄存器0,数据0,看着是正常的。

读操作和写操作发送从机地址和寄存器地址,都是一样的程序

  • 您好,那有尝试读取其他寄存器是否能收到ACK呢?

    从读时序来看,0x00地址之后确实没有收到ACK信号, 后面波形看不到了,那么第九个clock没有收到ACK之后,后面0x00寄存器的值可以读吗?因为这个波形只看到寄存器地址之后clock时钟就看不到了,所以方便的话可以用示波器测量下时序。

  • 您好,后面波形看不到是因为我在程序里没有检测到ACK信号,就进行退出了。

    在您的建议下,我重新修改了下程序,发现在读操作中,如果在发送寄存器地址时,没有收到ACK信号,那么后面数据为0XFF,应该从机在数据字节没有对总线进行操纵,没有数据。另外我还想请问一下,是否总线在每进行一个字节传输后,需要重新加一个start信号。因为手册上有“ Data Transfer: Only one data byte can be transferred between a START and a STOP condition. ”这样一句话,而在手册时序图上却没有体现。

     读0x00寄存器

     读0x07寄存器

     读0x0E寄存器(实际两个RATE引脚设置成1和0)

  • 补充一下我的回复, Data Transfer: Only one data byte can be transferred between a START and a STOP condition,是否是指器件地址+读写操作+重新start+寄存器地址+重新start+寄存器数据,还是指正常两次对寄存器读写之间,需要重新start(也就是我目前的时序)

  • 您好,昨天我看到datasheet中这样写的了,但是根据它的顺序,即下图,指的应该是您目前的时序,start+7bit address+R/W+ACK+register address+ACK+register data+Stop

    除了寄存器0x000之外有尝试其他寄存器吗?是否也是类似情况?

  • 您好,已经尝试过读取0x0,0x7,0xE。结果已经在上面回复了

  • 嗯,我查了下其他光纤网络IC的数据手册,因为有些手册受限看不到完整的,其中ONET2804T的手册中给出了数据传输的读写时序图,可以看到读时序之前也是先写,然后重新start,开始进行读。 我不太确定是不是ONET其他device也是这样的时序,在ONET8501中确实没有给出具体的类似时序,您这边方便试试吗? 

  • 谢谢,我试了一下,按照您的新时序,已经可以正确读出0X0E中的数据了。另外有一点需要说明一下,在与这个芯片通信的时候,无论收发,都是先发的高位,看手册时序图上的1-7和8很容易误认为是先发的低位。再次感谢您的帮助。

  • 非常感谢您的反馈,另外,一般16位的data,先发MSB,再发LSB。

    很高兴您的问题得以解决,后续有什么问题,再讨论。