AnsweredAssumed Answered

i.MX6 MIPI/CSI-2 virtual channels

Question asked by haff on Aug 5, 2016
Latest reply on Jul 3, 2019 by lin ben

I'm working on the i.MX6Q board with toshiba chip tc358743 (HDMI->CSI2) and trying to get interlaced modes working. But it only supports one way to distinguish top and bottom fields: through custom Data Identifier of CSI2 packets. So I'm trying to set top field to use 0th channel and bottom field - 1st. But I can't get 1st (or any other except 0th) channel on i.MX6 side.


As I understand, these are the steps I need to change virtual channel:

- use corresponding ipu/csi (ipu0 csi1 is for 1st channel for instance);

- configure CSI_MIPI_DI register with the received data type

- configure SMFC_MAP to connect needed channel to csi port

- (optional) configure IOMUX_GPR1 (for i.mx6q) to select MIPI input for ipu0/csi0 or ipu1/csi1 if needed.


For configuring MIPI itself there is also a question of correct clocking and other minor stuff. But I get the output correctly when 0th channel is configured. When on tc358743 side I configure different Data Type (for instance 0x23 instead of 0x24) I see that video changes indeed. So this setting works. But when I specify 0x64 (Data Type 0x24, virtual channel 1) I get no frames, playback doesn't start and imx reports:

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0


I'm testing output with the simplest gstreamer pipe:

$ gst-launch-1.0 imxv4l2videosrc ! fakesink


I attach dump of all related registers. What am I missing? How can I debug it? I highly doubt that tc358743 may fail to write Data Id of channels != 0 into MIPI packet header.


Side question: is it possible to perform interlace between buffers captured by different CSI_MEM channels using custom CPMEM configuration?

Original Attachment has been moved to: