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.

[参考译文] AWR2243:传感器启动后 MSS CPU 故障(MSS 处理器线性调频脉冲错误)

Guru**** 2539500 points
Other Parts Discussed in Thread: AWR2243, MMWAVE-STUDIO, AWR2243BOOST

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1554574/awr2243-mss-cpu-fault-mss-processor-chirp-errors-after-sensor-start

器件型号:AWR2243
Thread 中讨论的其他器件: MMWAVE-STUDIO

工具/软件:

我将在设计中使用 AWR2243 单芯片、并通过 SPI 和 CSI-2 接口将它连接到 FPGA。  

我已经让 MMWAVE-LINK 在我的 FPGA 中的 ARM 处理器上工作、现在 SPI 可以发送命令并正确读取响应。

所以我尝试使用 MMWAVE-LINK 中的命令开始采样、以下是配置代码:

// Configurations
	// 1. Set channel
	rlChanCfg_t channelConfig = {
		.rxChannelEn = 0b1111, // Enable all RX channels
		.txChannelEn = 0b101,  // Enable 0 and 2 TX channel
		.cascading   = 0x0000, // No cascading
		.cascadingPinoutCfg = 0, // No cascading signal output
	};

	retval = rlSetChannelConfig(deviceMap, &channelConfig);

	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"Channel configuration failed (%d)\n", retval);
	}

	printf(OK_MESSAGE"Channel configuration OK!\n");

	// 2. ADC output
	rlAdcOutCfg_t adcConfig = { 0 };
	adcConfig.fmt.b2AdcBits = RL_ADC_DATA_16_BIT;
	adcConfig.fmt.b2AdcOutFmt = RL_ADC_FORMAT_COMPLEX_2X;
	adcConfig.fmt.b8FullScaleReducFctr = 0;

	retval = rlSetAdcOutConfig(deviceMap, &adcConfig);

	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"ADC configuration failed (%d)\n", retval);
	}

	printf(OK_MESSAGE"ADC configuration OK!\n");

	//  3. Device data path config
	rlDevDataFmtCfg_t data_fmt_config = {
		.rxChannelEn = 0b1111, // Enable all channels
		.adcBits = 2,          // 16-bit
	    .adcFmt = 1,           // Complex
		.iqSwapSel = 0,        // I first
		.chInterleave = 0,     // Interleaved
	};
	retval = rlDeviceSetDataFmtConfig(deviceMap, &data_fmt_config);

	rlDevDataPathCfg_t dataPathConfig = {
		.intfSel = 0, // CSI2 interface
		.transferFmtPkt0 = 0b000001, // ADC data only (PKT0)
		.transferFmtPkt1 = 0b000000, // No data (PKT1)
		.cqConfig = 0b10,            // CQ = 16-bit
		.cq0TransSize = 0,		     // Do NOT transfer the CQ data
		.cq1TransSize = 0,
		.cq2TransSize = 0
	};

	retval += rlDeviceSetDataPathConfig(deviceMap, &dataPathConfig);

	// Data rate, HSI clock, lane, etc. configuration
	rlDevDataPathClkCfg_t datapath_clk_cfg = {
		.laneClkCfg = 1,    // DDR clock for CSI-2
		.dataRate = 0b0001, // 600 Mbps CSI-2 DDR
	};
	retval += rlDeviceSetDataPathClkConfig(deviceMap, &datapath_clk_cfg);

	rlDevHsiClk_t hsi_clk_cfg = {
		.hsiClk = 0x9,      // For DDR 600 Mbps
	};
	retval += rlDeviceSetHsiClk(deviceMap, &hsi_clk_cfg);

	rlDevLaneEnable_t lane_en_cfg = {
		// .laneEn = 0b1111,  // Enable lane 0 ~ 3
	    // .laneEn = 0b0011,     // Enable lane 0 ~ 1
		.laneEn = 0b0001,     // Enable lane 0
	};
	retval += rlDeviceSetLaneConfig(deviceMap, &lane_en_cfg);

	// Enable continous streaming mode
	rlDevContStreamingModeCfg_t cont_cfg = {
		.contStreamModeEn = 1
	};

	retval += rlDeviceSetContStreamingModeConfig(deviceMap, &cont_cfg);

	// Configuration of CSI
	rlDevCsi2Cfg_t csi2_cfg = {
		.lanePosPolSel = 0x35421, // Each lane is normal pos. and pol.
		//.lanePosPolSel   = 0x35241,  // Lane 0 -> 0, Lane 1 -> 4, CLK -> 3 for REV.1 board
		.lineStartEndDis = 0,     // Enable line start/end
	};

	retval += rlDeviceSetCsi2Config(deviceMap, &csi2_cfg);


	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"Device data path config failed (%d)\n", retval);
	}

	printf(OK_MESSAGE"Device data path config OK!\n");

	// RF initialization
	retval = rlRfInit(deviceMap);
	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"RF init failed (%d)\n", retval);
	}

	ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
	printf(OK_MESSAGE"RF init OK!\n");

	// Dynamic configurations
	//  1. Profile
	rlProfileCfg_t adcprofile = {
		.profileId = 0,
		.pfVcoSelect = 0b000,         // Use VCO1 and internal VCO selection
		.pfCalLutUpdate = 0b00,       // Automatically update the calibration LUT
		.startFreqConst = 0x558E38E3, // Start @ 77 GHz (1 LSB = 53.644 Hz)
		.idleTimeConst = 5000,        // Idle = 50 us
		.adcStartTimeConst = 600,     // ADC start time = 6 us
		.rampEndTime = 50000,         // Ramp end time = 500 us
		.txOutPowerBackoffCode = 0,   // No TX power back-off
		.txPhaseShifter = 0,          // No TX phase shift
		.freqSlopeConst = 145,        // Ramp slope @ 7.001 MHz/us (1 LSB = 48.279 kHz/us)
		.txStartTime = 0,             // TX start time = 0us
		.numAdcSamples = 256,		  // ADC samples = 256 (max 1024 in 16KB complex 4-ch)
		.digOutSampleRate = 10000,    // ADC sample rate = 10 Msps (1 LSB = 1 ksps)
		.hpfCornerFreq1 = 0x00,       // HPF1 corner freq = 175 kHz
		.hpfCornerFreq2 = 0x00,       // HPF2 corner freq = 350 kHz
		.txCalibEnCfg =  0x816D,      // Enable only TX0, TX2 while calibration
		.rxGain = (0b10 << 6) | 36,   // RX Gain = 36 dB, target RF gain = 36 dB
	};
    retval = rlSetProfileConfig(deviceMap, 1, &adcprofile);
    if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"Profile 0 set failure (%d)\n", retval);
	}

	printf(OK_MESSAGE"Profile 0 set OK!\n");

	//  2. Chirp
	rlChirpCfg_t chirp_conf = {
		.chirpStartIdx = 0,
		.chirpEndIdx = 0,
		.profileId = 0,
		.startFreqVar = 0,
		.idleTimeVar = 0,
		.adcStartTimeVar = 0,
		.txEnable = 0b101,    // Enable TX 0 and 2
	};

	retval = rlSetChirpConfig(deviceMap, 1, &chirp_conf);
	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"Chirp 0:0 set failure (%d)\n", retval);
	}

	printf(OK_MESSAGE"Chirp 0:0 set OK!\n");

	//  3. Frame
	rlFrameCfg_t frame_cfg = {
		.chirpStartIdx = 0,
		.chirpEndIdx = 0,
		.numLoops = 255,
		.numFrames = 0,   // Infinite frames
		.numAdcSamples = adcprofile.numAdcSamples * 2,
		.framePeriodicity = 36000000, // Frame period = 50 ms (1 LSB = 5 ns)
		.triggerSelect = 0x0001,      // Use software trigger
		.frameTriggerDelay = 0,       // No trigger delay
	};

	retval = rlSetFrameConfig(deviceMap, &frame_cfg);
	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"Frame set failure (%d)\n", retval);
	}

	printf(OK_MESSAGE"Frame set OK!\n");

所有配置命令都返回 OK(无错误代码,无错误事件)。

完成所有配置后、使用该代码开始采样

// Let sensor start!!
	rlFrameTrigger_t trigger = {
		.startStop = 1
	};

	retval = rlFrameStartStop(deviceMap, &trigger);
	if (retval != RL_RET_CODE_OK)
	{
		printf(ERR_MESSAGE"Sensor start failure (%d)\n", retval);
	}

但在开始采样后、我的处理器接收到大量雷达异步事件并  持续包含 AWR_AE_MSS_CPUFAULT_SB、采样似乎失败了。

 异步 事件中的 AWR_AE_MSS_CPUFAULT_SB 包含以下值:

5002		AWR_AE_MSS_CPUFAULT_SB
0024		Length = 36
0004		Fault type = MSS Processor Chirp Errors
0000		Line num  = 0
0001 8800	Fault LR
0000 0000	Fault Prev. LR
0000 0000	Fault SPSR
0000 0000	Fault SP
0000 0000	Fault Cause Address
FFFF 		Fault Error Status
FF		Source of the error
FF 		AXI error type
FF		Error access type
FF 		Error recovery type
0000		Reserved

我找到许多文档、但找不到有关错误 0x04 MSS 处理器线性调频脉冲错误的说明。

我认为这与线性调频脉冲配置相关吗? 但我在 MMWAVE-STUDIO 上使用相同的配置、工作正常。

也许我会忘记其他一些配置? 请告诉我什么是错,谢谢。

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

    顺便说一下、下面是我芯片的硬件/固件版本信息:

    硬件版本:1.1.4

    MSS 版本:2.2.1.7

    MSS 于 2020 年 3 月 17 日构建

    RF 版本:2.2.0.13

    RF 修补程序版本:0.0

    芯片 ID:0055864C 0000000D 0000001A 00000010

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

    您好:  

    当在 ADC 缓冲区中接收到的较旧数据尚未被读出、而较新的数据需要覆盖缓冲区时、可能会发生此问题。 请检查此案例的配置、并在必要时进行更新。

    此致、
    Shailesh

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

    您好:

    感谢您的答复。 您是指数据速率过高、CSI 接口无法及时传输所有数据吗?

    我找到了关于这个问题的其他讨论、他们说这个问题可能是由 CSI 数据速率引起的。 但我尝试通过增加斜坡结束时间来降低数据速率、或降低 ADC 采样率、而没有变化。

    我还检查了 CSI 配置。 我启用了所有 4 个 CSI 通道、并将其配置为最大比特率 600Mbps、因此我认为 CSI 接口可以 2400Mbps 的速率传输、这明显高于 ADC 的速率。

    或者在开始采样之前需要做点什么? 喜欢启动传输吗? 恐怕我甚至没有在接口上启动任何传输。

    顺便说一下、我使用示波器来测量接口。 我看到 CSI_CLK_P/N 引脚上有 300MHz 时钟、但其他数据引脚会卡在 1.8V、并且上面没有任何信号变化。

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

    您好、

    我懂了。 我不确定这是否可能是其他一些配置问题。 为了进行确认、我可以让您比较 mmWave studio 模式和设置之间的每个命令和状态吗? 一种方法是使用 mmWave Studio 生成的跟踪文件、它提供了主机控制器和 AWR 器件之间所有通信的详细细分。 您能否查看使用 mmWave Studio 时主机的序列是否与该序列完全匹配? 请告诉我这是否适合您。

    此致、
    Shailesh

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

    您好、

    感谢您的答复。 根据你的建议,我将尝试抓住 mmmwavestudio 和董事会之间的通信稍后.  

    顺便说一下、我的 同事在 DCA1000 上使用具有相同线性调频脉冲/帧配置的 LVDS 接口、运行良好。 他也没有尝试使用 CSI 接口。 选择 LVDS/CSI 是否是问题原因?

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

    您好、

    因此、错误配置 CSI2 可能会导致缓冲器不为空、然后给出该错误。 此外、根据您使用的 TI EVM、如果确实需要一些板级更新来连接 CSI2。

    此致、
    Shailesh  

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

    您好、  

    感谢您的答复。 我使用 AWR2243BOOST 演示板进行评估、我应该在板级更新什么?

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

    让我请相关专家研究一下并提出建议。

    此致、
    Shailesh

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

    提前感谢您!

    我将电路板连接到 DCA1000、并使用 MMWaveStudio 软件发送命令。 在 LVDS 模式下、电路板工作正常、数据可以采集回计算机并显示在软件上。 由于 DCA1000 无法支持 CSI-2 模式、因此我只尝试将电路板更改为 CSI-2 模式并监控调试控制台、这样采样就可以正常启动/停止、并且未发生错误事件(可能已被软件抑制)。

    我还通过逻辑分析仪捕获了 DCA1000 和电路板之间的 SPI 传输。 我注意到 DCA1000 发送的数据包与 FPGA 板发送的数据包非常相同。 每个命令的顺序也相同。 唯一不同的是 CRC 方法(DCA1000 使用 CRC-16、FPGA 使用 CRC-32、但在这两个调试控制台中均未报告任何 CRC 错误)。

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

    您好、

    是否有对此的更新? 谢谢!

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

    我终于找到了问题。

    FPGA 侧的接收器损坏、导致差分对卡在 1.2V、AWR2243 无法再发送数据。 更换 FPGA 可解决 此问题。