问题描述
在ADI提供的官方demo (ver: hdl_2019_r1) 中,重新编译zcu102的版本会出现ad9361驱动无法正常挂载的问题。
- 使用ADI预编译镜像 (ver: hdl_2019_r1) 不会出现该问题
- 使用Vivado 2018.3 编译源码出现该问题
- 使用ADI预编译镜像 (ver: hdl_2019_r1) 中提供的bitstream文件重新生成BOOT.bin文件不会出现该问题
错误信息:
[ 5.460830] SAMPL CLK: 61440000 tuning: RX
[ 5.464845] 0:1:2:3:4:5:6:7:8:9:a:b:c:d:e:f:
[ 5.469270] 0:# # # # # # # # # # # # # # # #
[ 5.473697] 1:# # # # # # # # # # # # # # # #
[ 5.478127] ad9361 spi1.0: ad9361_dig_tune_delay: Tuning RX FAILED!
[ 5.484783] cf_axi_adc: probe of 99020000.cf-ad9361-lpc failed with error -5
推测为综合或者实现策略不同导致的时序问题。实际上在其他SoC (zedboard, zc706) 上,将transceiver的发送与接收FIFO连接到自己设计的模块上时也有概率出现上述问题。可以参考ADI 对接口时序的描述。
解决方法
这里暂时没有想到好的解决方法,但提供一个可以跳过此问题的方法。
- 在源码中添加 ADC_IODELAY_ENABLE 参数。这里可以参照
library/axi_ad9361/axi_ad9361.v
文件中 DAC_IODELAY_ENABLE 参数的定义方法,注意也要在子模块中添加此参数,并都参考 DAC_IODELAY_ENABLE 的定义与使用。 - 在 ad9361 IP 配置中关闭 ADC_IODELAY_ENABLE 与 DAC_IODELAY_ENABLE (设为0)。
- 重新生成bitstream文件。
要注意此方法根据ADI描述可能会出现不可靠的时序问题,但在接下来的项目使用中并没有出现该问题。
对ADI的询问帖
FMCOMMS3 on ZCU102 Tuning RX Fail