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.

[参考译文] AFE7950EVM:SPI 读取轮询错误

Guru**** 2455360 points
Other Parts Discussed in Thread: AFE7950, LMK04828, AFE7950EVM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1491354/afe7950evm-spi-read-polling-error

器件型号:AFE7950EVM
主题中讨论的其他器件:AFE7950LMK04828

工具/软件:

上面的屏幕截图显示了配置 AFE7950 EVM 时收到的轮询错误。
1.我们正在从 FPGA 通过 FMC 配置 LMK04828 和 AFE7950 EVM。
2.我们修改了 AFE7950 EVM 中的几个信号、以便通过 FMC 对其进行配置。
3.无论我们通过 Latte 尝试配置的是相同的配置、我们都会尝试通过 FMC 通过应用程序加载。


配置 LMK 和 AFE7950 EVM 后、用于 TX_SYNC、rx_sync 和 sysref 的 ILA 信号。

我们所遵循的顺序是:

1:config_LMKchip();--配置 LMK

睡眠 (5);

config_jesd_cores ();--配置 FPGA jesd ip core

睡眠 (5);

收发器系统复位 ();----- 收发器系统复位置为无效

睡眠 (5);

jesd_tx_reset();--在 FPGA JESD IP 内核中使 JESD TX 复位无效

睡眠 (5);

CONFIG_AFECHIP();--配置 AFE7950EVM

睡眠 (10);

jesd_rx_reset();--在 FPGA JESD IP 内核中使 JESD Rx 复位无效。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    在通过 FMC 更新 SPI 电路板之前、是否使用 AFE79xx GUI 测试了此设置? 您看到的错误与 DAC JESD 相关。 其中之一是说 SYNC 信号没有从 DAC 到达 FPGA 、因为 JESD IP 没有向 DAC 发送 K 字符。

    如果您探测 SYNC 信号、您是否看到它变为低电平、然后又回到高电平?  

    此致、

    David Chaparro  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、David:

    TX 同步信号会变低和变高。 我分享了我的 ILA 屏幕截图、该屏幕截图表明 TX 同步信号存在问题。

    请问、我是如何解决这个问题的、是什么原因引起这个问题的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    您看到的 JESD 错误表明 DAC 未从 FPGA 接收到 K 字符。 您能否查看以下内容?  

    1. 对于 DAC 同步信号、您只能看到它从高到低到高一次过渡、还是继续发生这种情况?
    2. AFE 和 FPGA 上的 JESD 参数应匹配。 您能否确认 JESD 设置在两者上匹配?  
    3. 是否首次使用 AFE79xx GUI 对 EVM 进行编程来测试设置?

    您是否在 ADC JESD 链路上看到任何错误、这些错误将在 FPGA 端报告?  


    此致、

    David Chaparro  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、David:

    1:仅 DAC SYNC 信号持续观察切换高>低>高。 有时、高电平的时间也会更长。

    2 :由于我们在处理后通过 Latte 进行了一次参数检查,我们尝试使用我们的应用程序在 AFE 和 FPGA 中进行相同的参数设置。

    3 :是的,它最初已经使用 Latte 进行了测试,然后我们开始使用我们的应用程序。

    从 Latte 我们将 LMK 和 AFE 的 SPI 配置转换为 txt 文件、并在我们的应用程序中使用了 SPI API 调用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    您能否共享 Latte 脚本和您在设置中使用的配置文件?  

    此致、

    David Chaparro  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ## Initiates AFE79xx Bring-up
    setupParams.skipLmk	=	True
    AFE.deviceBringup()
    
    AFE.TOP.overrideTdd(15,3,15)
    #fpgaside 24410 afeside 12410 1 inst's are there
    ##############		Read me			##############
    #In HSDC Pro DAC tab, Select AFE79xx_2x2TX_44210; Data Rate = 245.76M
    #In HSDC Pro ADC tab, Select AFE79xx_2x2RX_44210; Data Rate = 245.76M ---> To capture 4 RX channels
    
    sysParams=AFE.systemParams
    sysParams.__init__();sysParams.chipVersion=chipVersion
    
    setupParams.skipFpga = 1 # setup FPGA (TSW14J56) using HSDC Pro 
    ##############		Top Level			##############
    sysParams.FRef			= 491.52
    sysParams.FadcRx		= 2949.12
    sysParams.FadcFb		= 2949.12
    sysParams.Fdac			= 2949.12*4
    sysParams.externalClockRx=False
    sysParams.externalClockTx=False
    													
    ##############		Digital Chain		##############
    
    		#####	RX	#####
    sysParams.ddcFactorRx	=	[12,12,12,12]			#DDC decimation factor for RX A, B, C and D
    sysParams.rxEnable		=   [True,True,False,False]
    sysParams.rxNco0		= 	[[1500,1500],			#Band0, Band1 for RXA 
    							[1500,1500],        	#Band0, Band1 for RXB 
    							[1500,1500],        	#Band0, Band1 for RXC 
    							[1500,1500]]        	#Band0, Band1 for RXD  
    
    		#####	FB	#####
    sysParams.fbEnable		=	[False,False]
    sysParams.ddcFactorFb	=	[12,12]					#DDC decimation factor for FB 1 and 2
    sysParams.fbNco0		= 	[9500,9500]				#Band0 for FB1 and FB2 
    
    		#####	TX	#####
    sysParams.ducFactorTx	=	[48,48,48,48]			#DUC interpolation factor for TX A, B, C and D
    sysParams.txEnable		=   [True,True,False,False]
    sysParams.txNco0		= 	[[1500,1500],			#Band0, Band1 for TXA 
    							[1500,1500],        	#Band0, Band1 for TXB 
    							[1500,1500],        	#Band0, Band1 for TXC 
    							[1500,1500]]        	#Band0, Band1 for TXD
    
    
    ##############		JESD		##############
    
    		#####	ADC-JESD	#####
    sysParams.jesdSystemMode= [3,3]
    													#SystemMode 0:	2R1F-FDD						; rx1-rx2-fb -fb
    													#SystemMode 1:	1R1F-FDD						; rx -rx -fb -fb
    													#SystemMode 2:	2R-FDD							; rx1-rx1-rx2-rx2
    													#SystemMode 3:	1R								; rx -rx -rx -rx
    													#SystemMode 4:	1F								; fb -fb- fb -fb
    													#SystemMode 5:	1R1F-TDD						; rx/fb-rx/fb-rx/fb-rx/fb
    													
    sysParams.jesdTxProtocol= [0,0]						# 0 - 8b/10b encoding; 2 - 64b/66b encoding 
    sysParams.LMFSHdRx		= ["24410","24410","24410","24410"]   #changed by Lakshmi ["44210","44210","44210","44210"] 
    													# The 2nd and 4th are valid only for jesdSystemMode values in (0,2).
    													# For other modes, select 4 converter modes for 1st and 3rd.
    sysParams.LMFSHdFb		= ["24410","24410"]
    
    sysParams.rxJesdTxScr	= [True,True,True,True] 
    sysParams.fbJesdTxScr	= [True,True]
    
    sysParams.rxJesdTxK		= [16,16,16,16]
    sysParams.fbJesdTxK		= [16,16]
    
    sysParams.jesdTxLaneMux	= [0,1,2,3,4,5,6,7]			# Enter which lanes you want in each location. 
    													# For example, if you want to exchange the first two lines of each 2T,
    													#		this should be [[1,0,2,3],[5,4,6,7]]
    sysParams.serdesTxLanePolarity = [1,1,0,0,0,0,0,0]	########## newly added
    sysParams.jesdTxRbd		= [2, 2] 					########## newly added
    		#####	DAC-JESD	#####
    sysParams.jesdRxProtocol= [0,0]
    sysParams.LMFSHdTx		= ["24410","24410","24410","24410"]  
    sysParams.jesdRxLaneMux	= [0,1,2,3,4,5,6,7]			# Enter which lanes you want in each location.
    sysParams.serdesRxLanePolarity = [1,1,0,0,0,0,0,0]													# For example, if you want to exchange the first two lines of each 2R
    													#		this should be [[1,0,2,3],[5,4,6,7]]
    sysParams.jesdRxRbd		= [2, 2] 					########## changed
    sysParams.jesdRxScr		= [True,True,True,True]
    sysParams.jesdRxK		= [16,16,16,16]
    
    		#####	JESD Common	#####
    	
    sysParams.jesdABLvdsSync= False
    sysParams.jesdCDLvdsSync= False
    sysParams.syncLoopBack	= True	#JESD Sync signal is connected to FPGA
    
    ##############		GPIO		##############
    sysParams.gpioMapping	= {
    						'H8': 'ADC_SYNC0',
    						'H7': 'DAC_SYNC0',  	#'ADC_SYNC1',
    						'N8': 'ADC_SYNC2',
    						'N7': 'ADC_SYNC3',
    						'H9': 'ADC_SYNC1',		#'DAC_SYNC0',
    						'G9': 'DAC_SYNC1',
    						'N9': 'DAC_SYNC2',
    						'P9': 'DAC_SYNC3',
    						'P14': 'GLOBAL_PDN',
    						'K14': 'FBABTDD',
    						'R6': 'FBCDTDD',
    						'H15': ['TXATDD','TXBTDD'],
    						'V5': ['TXCTDD','TXDTDD'],
    						'E7': ['RXATDD','RXBTDD'],
    						'R15': ['RXCTDD','RXDTDD']}
    
    ##############		LMK Params		##############
    lmkParams.pllEn			= True
    lmkParams.inputClk		= 983.04 # Valid only when lmkParams.pllEn = False
    lmkParams.lmkFrefClk	= True
    setupParams.fpgaRefClk	= 245.76 # Should be equal to LaneRate/40 for TSW14J56
    
    ##############		Logging		##############
    logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
    logDumpInst.logFormat=0x21 #Modify to 0x1 to save register scequence to log file. Script takes more time to execute.
    logDumpInst.rewriteFile=1
    logDumpInst.rewriteFileFormat4=1
    device.optimizeWrites=0
    device.rawWriteLogEn=1
    
    device.delay_time = 0
    #--------------------------------------#
    setupParams.skipLmk	=	False
    AFE.initializeConfig()
    lmkParams.sysrefFreq = AFE.systemStatus.sysrefFreq
    lmkParams.lmkPulseSysrefMode = False
    AFE.LMK.lmkConfig()

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在这里、我附加了包含用于配置 AFE 芯片的函数和代码的 CPP 文件、序列与 Latte 相同。在配置 AFE(即“Afe79xxPg1Format5C.txt"和“和 Afe79xxPg1.txt e2e.ti.com/.../Afe79xxPg1Format5C.txte2e.ti.com/.../5706.Afe79xxPg1.txte2e.ti.com/.../test.cpp)后、SPI 读/写操作已用作从 Latte 脚本生成的.txt 文件中的参考   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    感谢您分享这些文件。 我看不到文件有任何具体问题。  

    下面给出了我们看到的导致 SYNC 切换的常见问题。 您能在设置中检查这些吗?

    1. SYSREF 关闭或频率不正确。  
      1. 您能否探测并检查 SYSREF 是否已打开并正在运行?
    2. JESD 链路参数不匹配。 K 参数是否在两侧设置为相同的值?  


    您提到过、您已经使用 Latte 软件控制 EVM 对此进行了测试。 执行此操作时、您在 FPGA 上使用的固件与现在使用的固件相同。 如果没有、从那时到现在有哪些变化?  

    您是否能够检查 ADC JESD 链路是否已接通、以及是否有任何错误?  

    此致、

    David Chaparro

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我在 Vivado 工具的 ILA 中探测到的 FPGA 的 SYSREF 输入。

    2. JESD 参数相同, K 值也相同,在拿铁和我们的配置中都是 16。

    ADC 链路看起来稳定、未切换。

    从 Latte 配置到当前设置的唯一变化是、现在我们通过 SPI 配置 LMK 和 AFE、并从 SOC 上的处理系统(ARM 处理器)配置 JESD 内核、并且 FPGA 在这两种情况下都保持不变

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、David:

    当我们检查调试工具 ILA Vivado 工具中的信号时、我们观察到了该情况。 TX_SYNC 未切换。 但在配置 AFE7950 EVM 时、我们仍然会收到上述屏幕截图中提到的 SPI 读取轮询错误。

    此致、

    Ajay TJ

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    只是为了确认、您现在只能看到 tx_sync 信号从 high->low->high 一次、但会得到您在帖子中提到的初始错误吗?  

    您是否能够看到复位信号按预期切换? 我想知道复位是否未被发现、这可以停止您看到的问题。  

    此致、

    David Chaparro

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、David:

    是的、TX_SYNC 信号仅从高->低->高一次。 仍然会得到帖子中提到的初始错误。

    我们所遵循的重置顺序是:

    1:config_LMKchip();--配置 LMK

    睡眠 (5);

    config_jesd_cores ();--配置 FPGA jesd ip core

    睡眠 (5);

    收发器系统复位 ();----- 收发器系统复位置为无效

    睡眠 (5);

    jesd_tx_reset();--在 FPGA JESD IP 内核中使 JESD TX 复位无效

    睡眠 (5);

    CONFIG_AFECHIP();--配置 AFE7950EVM

    睡眠 (10);

    jesd_rx_reset();--在 FPGA JESD IP 内核中使 JESD Rx 复位无效。

    我们能够根据遵循的顺序看到复位切换。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、David:

    由于我们能够看到 TX 和 Rx 同步为高电平、您能帮助我们如何使用 SPI 写入为 AFE7950 ADC 生成测试图形吗? 这是要设置它生成的地址。

    此致、

    Ajay TJ

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ajay:

    对于 ADC 斜坡模式、您可以使用以下 SPI 写入。

    device.writeReg (0x16、0x01)

    device.writeReg (0x109、0x02)

    DEVICE.writeReg (0x10A、0x02)

    device.writeReg (0x16、0x02)

    device.writeReg (0x109、0x02)

    DEVICE.writeReg (0x10A、0x02)

    device.writeReg (0x16、0x00)

    此致、

    David Chaparro