近期遇到了一个关于Utopia接口的问题。
通常根据Utopia Level 2的标准,当Master在轮询PHY时,若对应的PHY有数据待发,则它要拉高其RX_CLAV。然后Master会将RX_ENB拉高,在下降沿选中该PHY,被选中的PHY会以一个RX_SOC脉冲开始数据的传输。请看从UL2 spec中摘录的描述。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/topping/f2f8e9892e064f8e80067e7f39ec5e05.jpg)
![](https://p-blog.csdn.net/images/p_blog_csdn_net/topping/e7f5c2b3943742e28213b14f8cd7bc95.jpg)
而当所有PHY都没有数据传送时,Master应该拉高其RX_ENB信号,以使得下一个有数据的PHY能够被选中传输数据。
然而我所碰到的PHY和Master的行为与Utopia Level 2的描述不一致。主要表现在Master在所有PHY都没有数据传输时,它的RX_ENB信号并没有拉高,导致其它PHY的数据不能发送。
示波器看到的波形如下,4条通道分别是:
1 RX_CLAV
2 RX_ENB
3 RX_Addr_1
4 RX_Addr_0