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.

[参考译文] AFE7900EVM:使用 GPIO 引脚的 NCO 跳频

Guru**** 2347060 points
Other Parts Discussed in Thread: AFE7900, AFE7950
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1425895/afe7900evm-nco-frequency-hopping-using-gpio-pins

器件型号:AFE7900EVM
Thread 中讨论的其他器件:AFE7900AFE7950

工具与软件:

嗨、

我正在尝试控制 AFE7900每个通道中的16个 NCO。 下面是我使用的 Latte 脚本的一部分。 但是、当我尝试执行代码时、会收到以下错误。 您能否就可能出现的问题提供建议?  

##====

正在执行... AFE79xx/NCO_JPLOY/configLMK.py

#开始时间2024年10月16日18:31:45.275000

在 TX NCO 的第二奈奎斯特操作中、不支持 DAC 交错模式。

外部 Sysref 频率应为一个整数因子:3.84MHz

2T2R1F 编号:0

有效配置:true

laneRateRx:9830.4

laneRateFb:9830.4

laneRateTx:9830.4

2T2R1F 编号:1.

有效配置:true

laneRateRx:9830.4

laneRateFb:9830.4

laneRateTx:9830.4

LMK 时钟分频器-器件寄存器复位。

LMK 时钟分频器-器件寄存器复位。

这里使用来自 LMK 源的参考时钟、确保电路板连接可以做到这一点

#DONE 正在执行... AFE79xx/NCO_JPLOY/configLMK.py

#结束时间2024年10月16日18:31:46.215000

#Execution time = 0.939999818802秒

##===== 错误:1、警告:1 ====== #

sysParams.gpioMapping={
		'H8': 'ADC_SYNC0',
		'H7': 'DAC_SYNC0',
		'N8': 'ADC_SYNC2',
		'N7': 'ADC_SYNC3',
		'H9': 'ADC_SYNC1',
		'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'],
		'D5': 'TX_NCOSEL_0', 
		'G10': 'TX_NCOSEL_1', 
		'T6': 'TX_NCOSEL_2', 
		'T5': 'TX_NCOSEL_3'}

sysParams.useSpiSysref = False
#setupParams.skipLmk	=	False
#AFE.LMK.lmkConfig()

##############		16 NCO Params		##############
sysParams.ncoFreqMode	= "FCW"

sysStatus.txChainDirectCtrl=True
sysParams.txChainDirectCtrl=True
sysParams.ncoTxMode		=	[3,3]
sysParams.broadcastTxNcoSel = 1
sysParams.numTxNCO		=	2

for i in range(16):
	for j in range(3):
		AFE.updateTxNcoInfiniteNcoMode(j,2000,i)

提前感谢、

Lg.

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

    您好、LG、

    此 错误可能是由脚本中的某个 NCO 设置引起的。 您能否检查所有 NCO 值是否都处于 AFE7950支持的范围内、该范围具有600MHz 的下限?

    此致、

    David Chaparro  

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

    尊敬的 David:

    感谢您的答复。 错误已成功纠正。 我目前正在为输入信号提供恒定值。 不过、当我切换 NCO 并检查输出时、会收到 NCO0和 NCO1的一些输出、但频率不在所需的频率。 对于其他 NCO、根本没有输出。 下面随附了我使用的 Latte 脚本。 您能否就可能出现的问题提供建议?


    谢谢!

    Lg.

    '''
    Validation :  AFE79xx Library Version 
    				v1.67, v1.74
    Case			RX					TX						   FB						CLK					Notes
    ----	-----------------	  -----------------			-----------------			-----------			------------
    1		245.76Msps, 24410     491.52Msps, 44210			491.52Msps, 22210			FADC=2949.12M       DAC in interleaved mode
    		SerDes=9830.4Mbps     SerDes=9830.4Mbps			SerDes=9830.4Mbps			FDAC=8847.36M
    		PLL0, NCO=3500M		  PLL0, NCO=3500M			NCO=3500M                   REF=491.52M
    		
    2		245.76Msps, 24410     491.52Msps, 44210			491.52Msps, 22210			FADC=2949.12M       DAC in straight mode
    		SerDes=9830.4Mbps     SerDes=9830.4Mbps			SerDes=9830.4Mbps			FDAC=8847.36M
    		PLL0, NCO=3500M		  PLL0, NCO=3500M			NCO=3500M                   REF=491.52M
    '''
    setupParams.skipFpga 				= 1
    sysParams							=	AFE.systemParams
    setupParams.fpgaRefClk 				= 245.76#184.32#
    AFE.systemStatus.loadTrims			= 1
    
    
    sysParams.FRef                    	= 491.52
    sysParams.FadcRx                  	= 2949.12
    sysParams.FadcFb				  	= 2949.12
    sysParams.Fdac                    	= 2949.12*4
    
    sysParams.enableDacInterleavedMode	= True 					#DAC interleave mode to save power consumption. Fs/2 - Fin spur occurs
    
    sysParams.modeTdd 					= 0		
    										# 0- Single TDD Pin for all Channels
    										# 1- Separate Control for 2T/2R/1F
    										# 2- Separate Control for 1T/1R/1F			
    
    sysParams.topLevelSystemMode		= 'StaticTDDMode'
    sysParams.RRFMode 					= 0   #4T4R2F FDD mode
    sysParams.jesdSystemMode			= [3,3]
    										#SystemMode 0:	2R1F-FDD						; rx1-rx2-fb-fb
    										#SystemMode 1:	1R1F-FDD						; rx1-rx1-fb-fb
    										#SystemMode 2:	2R-FDD							; rx1-rx1-rx2-rx2
    										#SystemMode 3:	1R								; rx1-rx1-rx1-rx1
    										#SystemMode 4:	1F								; fb-fb-fb-fb
    										#SystemMode 5:	1R1F-TDD						; rx1/fb-rx1/fb-rx1/fb-rx1/fb
    										#SystemMode 8:	1R1F-TDD 1R-FDD	(FB-2Lanes)(RX1 RX2 interchanged)		; rx2/fb-rx2/fb-rx1-rx1
    
    
    sysParams.jesdLoopbackEn			= 0 #Make it 1 to Enable the JESDTX to JESDRX internal loopback
    sysParams.LMFSHdRx                	= ["44210","44210","44210","44210"]	
    										# The 2nd and 4th are valid only for jesdSystemMode values in (2,6,7,8). For other modes, select 4 converter modes for 1st and 3rd.
    sysParams.LMFSHdFb                	= ["22210","22210"]
    sysParams.LMFSHdTx                	= ["44210","44210","44210","44210"]
    sysParams.jesdTxProtocol            = [0,0]
    sysParams.jesdRxProtocol            = [0,0]
    sysParams.serdesFirmware			= True 		# If you want to lead any firmware, please speify the path here. Otherwise it will not write any firmware
    sysParams.jesdTxLaneMux				= [0,1,2,3,4,5,6,7]	
    												# Enter which lanes you want in each location. 
    												# Note that across 2T Mux is not possible in 0.5.
    												# 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		= [True, True, False, False, True, True, False, False]
    sysParams.jesdRxLaneMux				= [0,1,2,3,4,5,7,6]	
    												# Enter which lanes you want in each location.
    												# Note that across 2R Mux is not possible in 0.5.
    												# 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.serdesRxLanePolarity		= [True, True, True, True, False, False, False, False]
    sysParams.jesdRxRbd					= [4, 4]
    
    sysParams.rxJesdTxScr				= [False]*4
    sysParams.fbJesdTxScr				= [False]*2
    sysParams.jesdRxScr					= [False]*4
    
    sysParams.rxJesdTxK					= [32]*4
    sysParams.fbJesdTxK					= [32]*2
    sysParams.jesdRxK					= [16]*4 #[32]*4
    
    
    	
    #sysParams.txNco0					= 	[[5000,5000],
    #										[5000,5000],
    #										[5000,5000],
    #										[5000,5000]]
    
    sysParams.rxNco0					= 	[[9500,9500],
    										[9500,9500],
    										[9500,9500],
    										[9500,9500]]
    
    sysParams.fbNco0					= 	[2500,2500] #[1800,1800]			#FBA, FBC for NCO0
    sysParams.fbNco1					= 	[2500,2500] #[1800,1800]			#FBA, FBC for NCO1
    sysParams.fbNco2					= 	[2500,2500] #[1800,1800]			#FBA, FBC for NCO2
    sysParams.fbNco3					= 	[2500,2500] #[1800,1800]			#FBA, FBC for NCO3
    
    sysParams.numBandsRx				= [0]*4					# 0 for single, 1 for dual
    sysParams.numBandsFb				= [0,0]				
    sysParams.numBandsTx				= [0,0,0,0]
    
    sysParams.ddcFactorRx             	= [6]*4			# DDC decimation factor for RX A, B, C and D
    sysParams.ddcFactorFb             	= [6]*2
    sysParams.ducFactorTx             	= [24]*4
    
    AFE.systemStatus.loadTrims			=1
    
    ## The following parameters sets up the LMK04828 clocking schemes
    lmkParams.pllEn						=	True#False
    lmkParams.inputClk					=	1474.56#737.28
    lmkParams.sysrefFreq				=	2949.12/1024
    lmkParams.lmkFrefClk				=	True
    
    ## The following parameters sets up the register and macro dumps
    logDumpInst.setFileName(ASTERIX_DIR+DEVICES_DIR+r"\Afe79xxPg1.txt")
    logDumpInst.logFormat				= 0x0f
    logDumpInst.rewriteFile				= 1
    logDumpInst.rewriteFileFormat4		= 1
    device.optimizeWrites				= 0
    device.rawWriteLogEn				= 1
    lmk.rawWriteLogEn					= 1
    
    ## The following parameters sets up the SYNCIN and SYNCOUT to interface with the TSW14J57
    sysParams.jesdABLvdsSync			= 0
    sysParams.jesdCDLvdsSync			= 0
    sysParams.rxJesdTxSyncMux			= [0,0,0,0]
    sysParams.fbJesdTxSyncMux			= [0,0]
    sysParams.jesdRxSyncMux				= [0,0,0,0]		#[0,0,1,1]
    sysParams.syncLoopBack				= True
    
    # ## The following parameters sets up the AGC
    # sysParams.agcParams[0].agcMode = 1 ##internal AGC
    # sysParams.agcParams[0].gpioRstEnable = 0 ##disable GPIO based reset to AGC detector 
    # sysParams.agcParams[0].atken = [0, 1, 0] ##enable big and small step attack
    # sysParams.agcParams[0].decayen = [0,1,0] ##enable big and small step decay
    # sysParams.agcParams[0].atksize = [2,1,0] ## bigs step = 2dB, small step = 1dB
    # sysParams.agcParams[0].decaysize = [2,1,0] ##big step = 2dB, small step = 1dB
    # sysParams.agcParams[0].atkthreshold = [-1, -2, -14] ##attack threshold
    # sysParams.agcParams[0].decaythreshold = [-14, -6, -20] ##decay threshold
    # sysParams.agcParams[0].atkwinlength = [170, 170] ## detector time constant expressed inn absolute time in ns. 
    # sysParams.agcParams[0].decaywinlength = 87380 ##detector time constant expressed in absolute time in ns. All detectors use the same value for decay time constant
    # sysParams.agcParams[0].atkNumHitsAbs = [8,8] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock
    # sysParams.agcParams[0].decayNumHitsAbs = [100,100] ##absolute number of times signal crosses threshold. These crossing are with respect to the FADC/8 clock
    # sysParams.agcParams[0].minDsaAttn = 0 ##minimum DSA attenuation used by AGC
    # sysParams.agcParams[0].maxDsaAttn = 22 ##maximum DSA attenuation used by AGC
    # sysParams.agcParams[0].totalGainRange = 22 ##total gain range used by ALC for gain compensation
    # sysParams.agcParams[0].minAttnAlc = 0 ##minimum attenuation used by ALC for compensation when useMinAttnAgc = 0
    # sysParams.agcParams[0].useMinAttnAgc = 1 ##enable ALC to use minimum attenuation from AGC for which compensation is required.
    # sysParams.agcParams[0].alcEn = 1
    # sysParams.agcParams[0].alcMode = 0 ##floating point DGC
    # sysParams.agcParams[0].fltPtMode = 0 ##if exponent > 0, dont send MSB
    # sysParams.agcParams[0].fltPtFmt = 1 ##3 bit exponent
    
    
    ## The following parameters sets up the GPIOs
    sysParams.gpioMapping={
    		'H8': 'ADC_SYNC0',
    		'H7': 'DAC_SYNC0',
    		'N8': 'ADC_SYNC2',
    		'N7': 'ADC_SYNC3',
    		'H9': 'ADC_SYNC1',
    		'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'],
    		'D5': 'TX_NCOSEL_0', 
    		'G10': 'TX_NCOSEL_1', 
    		'T6': 'TX_NCOSEL_2', 
    		'T5': 'TX_NCOSEL_3'}
    
    #AFE.systemParams.papParams[0]['enable'] = True
    #AFE.systemParams.papParams[1]['enable'] = True
    #AFE.systemParams.papParams[2]['enable'] = True
    #AFE.systemParams.papParams[3]['enable'] = True
    
    sysParams.useSpiSysref = False
    #setupParams.skipLmk	=	False
    #AFE.LMK.lmkConfig()
    
    ##############		16 NCO Params		##############
    sysParams.ncoFreqMode	= "FCW"
    
    sysStatus.txChainDirectCtrl=True
    sysParams.txChainDirectCtrl=True
    sysParams.ncoTxMode		=	[3,3]
    sysParams.broadcastTxNcoSel = 1
    sysParams.numTxNCO		=	2
    
    for i in range(16):
    	for j in range(4):
    		AFE.updateTxNcoInfiniteNcoMode(j,3200 + 75*i,i)
    
    
    
    		
    ## Initiates LMK04828 and AFE79xx Bring-up 
    
    setupParams.skipLmk	=	False
    AFE.initializeConfig()
    lmkParams.sysrefFreq = AFE.systemStatus.sysrefFreq
    lmkParams.lmkPulseSysrefMode = False
    AFE.LMK.lmkConfig()
    
    
    

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

    您好、LG、

    只是确认一下、您是否在使用最新版本的 AFE79xx GUI? 如果不是、我建议更新到最新 版本、看看这样是否可以解决问题、因为旧版本可能不支持。  

    您能否共享输出音调的两个 NCO 的输出频率?  


    此致、

    David Chaparro