-
沁恒微CH132C的ULPI时序问题
我使用FPGA实现一个USB2.0高速设备控制器逻辑,如果USBPHY芯片使用USB3343,则功能一切正常(高速握手,枚举,Bulk通信);但切换到沁恒微的CH132C之后,枚举总是失败。请各路大神提供解决问题思路,有认识沁恒微技术支持的朋友也麻烦给我支个招。使用USB协议分析仪捕获如下,详见附图:1.高速握手正常,说明Device向USBPHY芯片能正常写入FUNC_CTRL寄存器;2.获取设备描述符总是失败在SETUP事务里,Host下发SETUP和DATA0包正常,但Device没有回复ACK包;3.在FPGA加ILA观测ulpi_dir_i,ulpi_nxt_i为何Device没收到SETUP或DATA0包,这时设备描述符的获取又能变正常,但获取其它描述符还是有类似问题,包括再次获取设备描述符也可能失败。怀疑是ULPI时序问题。1.CH132C使用输出ULPI时钟模式,即XI输入12MHz,CLK输出60MHz给FPGA;FPGA对该时钟也加了BUFG;时序报告也没有违例。2.比较CH132C和USB3343手册,PHY芯片输出方向(USBOUT方向)的DIR,NXT的输出延迟tDC,以及Data的输出延迟tDD,两个芯片有稍许差异,CH132C的tDC是min=0.8ns,max=6.0ns;tDD是min=0.8ns,max=8.0ns;而USB3343的tDC和tDD都是min=1.5ns,max=6.0ns。3.于是综合FPGA时再加如下时序约束,但问题还是没有根本解决。#PHY->Link方向加set_input_delay#ControllinesOutputDelay:tDC=(0.8ns,6.0ns)set_input_delay-clockusb_clk-max6.0[get_ports{ulpi_dir_iulpi_nxt_i}]set_input_delay-clockusb_clk-min0.8[get_ports{ulpi_dir_iulpi_nxt_i}]#DatalinesOutputDelay:tDD=(0.8ns,8.0ns)set_input_delay-clockusb_clk-max8.0[get_ports{ulpi_data_io}]set_input_delay-clockusb_clk-min0.8[get_ports{ulpi_data_io}]#PHY
2026-09-22 2

问答