NXP MCU 技术william hill官网
直播中

安德森大

8年用户 1275经验值
擅长:接口/总线/驱动
私信 关注
[问答]

IMXRT1176 MIPI_CSI2RX未运行的原因?

我正在使用 Analog Devices 的 ADV7280-M 解码 720*576 像素的 PAL 输出模拟摄像机的视频。它以符合 ITU-R.BT 656.3 标准的 YUV422 8 位格式输出视频。起初,我无法运行 ADV7280M,但后来我发现并解决了问题。这是我在社区中心询问的链接。您可以从此处阅读并查看问题的详细信息。
  • 现在,ADV7280M 可以向 imxrt1176 发送视频或测试模式。我可以在示波器屏幕上看到它。但是,我仍然无法获取任何数据。为了准确起见,我强制 adv7280-m 的 CLKP_N 和 DP0-DN0 线进入 ULPS 状态。在 imxrt1176 端,我启用中断 ULPS 状态更改并等待任何中断发生。但是到目前为止我什么都看不到。这是我关于一些 MIPI CSI2Rx 相关功能的相关代码部分;
PGMC_BPC4->BPC_POWER_CTRL |= (PGMC_BPC_BPC_POWER_CTRL_PSW_ON_SOFT_MASK | PGMC_BPC_BPC_POWER_CTRL_ISO_OFF_SOFT_MASK);
csi2rxConfig.laneNum = DEMO_CAMERA_MIPI_CSI_LANE; // 1 车道我正在使用
csi2rxConfig.tHsSettle_EscClk = 0x0C; // adv7280m 正在运行渐进模式。所以,216MHz 时钟速度

(void)CLOCK_EnableClock(s_csi2rxClocks[CSI2RX_Getinstance(base)]);
MIPI_CSI2RX_SoftwareReset(base, true);
SDK_DelayAtLeastUs(1 * 10 * 1000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
MIPI_CSI2RX_SoftwareReset(base, false);
SDK_DelayAtLeastUs(1 * 10 * 1000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
CSI2RX_REG_CFG_NUM_LANES(base) = config->laneNum - 1UL;
CSI2RX_REG_CFG_DISABLE_DATA_LANES(base) =
MIPI_CSI2RX_CSI2RX_CFG_NUM_LANES_csi2rx_cfg_num_lanes_MASK & ~((1UL << (uint32_t)config->laneNum) - 1UL);

CSI2RX_REG_CFG_DISABLE_PAYLOAD_0(基础)= 0xFFFFBFFB;
CSI2RX_REG_CFG_DISABLE_PAYLOAD_1(基础)= 0XFFFFFFFF;
CSI2RX_REG_IRQ_MASK(基础) = MIPI_CSI2RX_IRQ_MASK_IRQ_MASK_SHIFT;
CSI2RX_EnableInterrupts(MIPI_CSI2RX, kCSI2RX_InterruptUlpsStatusChange);
/* 像素链接控制 */
VIDEO_MUX->PLM_CTRL.RW = 0U;
IOMUXC_GPR->GPR59 = (IOMUXC_GPR->GPR59 & ~(IOMUXC_GPR_GPR59_MIPI_CSI_S_PRG_RXHS_SETTLE_MASK)) |
IOMUXC_GPR_GPR59_MIPI_CSI_RX_ENABLE_MASK | /* 启用接收。*/
IOMUXC_GPR_GPR59_MIPI_CSI_AUTO_PD_EN_MASK | /* 自动关闭未使用的通道。*/
IOMUXC_GPR_GPR59_MIPI_CSI_SOFT_RST_N_MASK | IOMUXC_GPR_GPR59_MIPI_CSI_PD_RX_MASK |
IOMUXC_GPR_GPR59_MIPI_CSI_DDRCLK_EN_MASK | /* 启用 DDR 时钟。*/
IOMUXC_GPR_GPR59_MIPI_CSI_CONT_CLK_MODE_MASK | /* 继续时钟。*/
IOMUXC_GPR_GPR59_MIPI_CSI_S_PRG_RXHS_SETTLE(tHsSettle_EscClk - 1UL); /* T(HS-SETTLE) */
//IOMUXC_GPR->GPR59 &= ~IOMUXC_GPR_GPR59_MIPI_CSI_RX_RCAL_MASK; // 我使用了关于
//IOMUXC_GPR->GPR59 |= IOMUXC_GPR_GPR59_MIPI_CSI_RX_RCAL(1) 的所有 4 个设置;//在芯片终止位上,没有成功。
VIDEO_MUX->CFG_DT_DISABLE.RW = 0xFFFFFFBF;//yuv422_8Bit 启用,geri kalan tüm 数据 tipleri 禁用 edilmesini sağlıyor。
/* 启用像素链接主控。*/
VIDEO_MUX->PLM_CTRL.SET = (VIDEO_MUX_PLM_CTRL_ENABLE_SHIFT | VIDEO_MUX_PLM_CTRL_VALID_OVERRIDE_MASK);
/* 启动 PHY。*/
IOMUXC_GPR->GPR59 &= ~IOMUXC_GPR_GPR59_MIPI_CSI_PD_RX_MASK;
顺便说一句,这是我的 MIPI-CSI 外设和外置摄像头的初始化命令
CAMERA_RECEIVER_Init(&cameraReceiver, &cameraConfig, NULL, NULL);
BOARD_InitMipiCsi();
CAMERA_DEVICE_Init(&cameraDevice, &cameraConfig);
CAMERA_DEVICE_Start(&cameraDevice);
所以,我首先打开并准备好 CSI,然后我初始化并运行外部摄像头。因此,在连续时钟模式下,不可能错过 CLKP0-N0 线上的 HS 时钟。
上面的代码初始化有什么问题?我如何证明数据到达 MIPI-CSI2RX,任何方法或任何 FIFO/寄存器被读取?我如何证明 imxrt1176 的终止可以适当地动态更改?
附言:
我连续将外部摄像头置于进入和退出 ULPS 状态,如下所示;
while (s_newFrameShown == false)
{
CAMERA_DEVICE_Enter_ULPS_State(&cameraDevice);
SDK_DelayAtLeastUs(3 * 10 * 1000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
CAMERA_DEVICE_Exit_ULPS_State(&cameraDevice);
uint32_t status = CSI2RX_GetUlpsStatus(MIPI_CSI2RX);
if (kCSI2RX_ClockLaneUlps & status)
{
csi2_ulps_register_durum_bilgisi++ ;
}
SDK_DelayAtLeastUs(3 * 10 * 1000, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
}

最后是 ISR 函数
void MIPI_CSI_IRQHandler(void)
{
counter++;
SDK_ISR_EXIT_BARRIER;
}

根据 Analog Devices 的 AN-1337 pdf 文档,
MIPI-CSI2 接收器 DPHY 终端(即 NXP IMXRT1176)必须根据发射器阻抗(即 ADV7280-M)动态修改其自身的输入阻抗。如果不是,则电压电平/差异和 HS(高速)终端使能在数据线 DP0-N0 上未按预期显示。
AN-1337 是这么说的;




根据我抓取的示波器,在数据线DP0-N0上,没有任何关于IMXRT1176 HS termination ON的迹象。我还添加了 CLKP-N 线。



更多回帖

发帖
×
20
完善资料,
赚取积分