<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic IPU csi0 test  in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983719#M146137</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi，I have a problem. I use the ipucsi test pattern，set csi0 test control register&lt;/P&gt;&lt;P&gt;csi-&amp;gt;smfc-&amp;gt;idmac&lt;/P&gt;&lt;P&gt;first: idmac&amp;nbsp;configuration&lt;/P&gt;&lt;DIV&gt;void ipu_general_idmac_config()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;uint32_t channel = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;/* enable channel 0 */&lt;BR /&gt;&amp;nbsp;ipu_idmac_channel_enable(channel, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;memset((void *)ipu_cpmem_addr(channel), 0, sizeof(ipu_cpmem_t));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 0, 29, 0x07000000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 29, 29, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 125, 13, 0x0000027f);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 138, 12, 0x000001df);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*setup default pixel format */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 85, 4, INTERLEAVED_RGB565);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 107, 3, 3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 116, 3, 5 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 119, 3, 6 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 122, 3, 5 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 125, 3, 0 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 128, 5, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 133, 5, 5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 138, 5, 11);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 143, 5, 16);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 102, 14, 640 - 1);&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*setup pixel per burst */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 78, 7, 15);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 113, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 58, 20, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //setup rotate/vf/hf and block mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 119, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 121, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 120, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 117, 2, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_idmac_channel_mode_sel(channel, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_idmac_channel_enable1(channel, 1);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;Then, SMFC configuration:&lt;/P&gt;&lt;DIV&gt;uint32_t ipu_smfc_fifo_allocate(uint32_t channel, uint32_t map,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t burst_size)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (channel) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);//smfc map&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);//smfc bs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Wrong channel selected!!\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(1 &amp;lt;&amp;lt; 8, 0x2600000);//enable smfc&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;and the csi configuration :&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void ipu_csi_config()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;//test&lt;BR /&gt;&amp;nbsp;writel(1 &amp;lt;&amp;lt; 24, 0x2630010);//enable test&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;//writel((readl(0x2600000) | 1 &amp;lt;&amp;lt; 28), 0x2600000);//mipi&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;//writel(0x1e, 0x2638020);//di&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel(((0 &amp;lt;&amp;lt; 31) | (1 &amp;lt;&amp;lt; 15) | (0 &amp;lt;&amp;lt; 3) | (0 &amp;lt;&amp;lt; 2) | (0x4 &amp;lt;&amp;lt; 24) | (1 &amp;lt;&amp;lt; 4) | (0x9f &amp;lt;&amp;lt; 16)), 0x2630000);&lt;BR /&gt;&amp;nbsp;//writel(((0x04 &amp;lt;&amp;lt; 24) | (0x00 &amp;lt;&amp;lt; 4) | (0x0 &amp;lt;&amp;lt; 16) | (0x1 &amp;lt;&amp;lt; 11) | (0x0 &amp;lt;&amp;lt; 7) | (0x02 &amp;lt;&amp;lt; 8)), 0x2630000);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel(((0x01df &amp;lt;&amp;lt; 16) | (0x027f &amp;lt;&amp;lt; 0)), 0x2630004);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel((readl(0x2600000) | (1 &amp;lt;&amp;lt; 0)), 0x2600000);//enable csi0&lt;BR /&gt;}&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void ipu_buffer()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;writel(readl(0x26000e4) | (0 &amp;lt;&amp;lt; 28), 0x26000e4);&lt;BR /&gt;&amp;nbsp;writel(readl(0x2600268) | 1, 0x2600268);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel(readl(0x26000e4) | (0 &amp;lt;&amp;lt; 30), 0x26000e4);&lt;BR /&gt;&amp;nbsp;writel(readl(0x2600270) | 1, 0x2600270);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void ipu_capture_setup(uint32_t ipu_index, uint32_t csi_interface, uint32_t raw_width,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t raw_height, uint32_t act_width, uint32_t act_height)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;uint32_t csi_mem0 = 0x40000000, csi_mem1 = 0;&lt;BR /&gt;&amp;nbsp;int32_t csi_pixel_format = NON_INTERLEAVED_YUV420;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (csi_interface == CSI_TEST_MODE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csi_pixel_format = INTERLEAVED_RGB565;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // put csi captured image into memory first&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_general_idmac_config();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*step2: allocate smfc fifo for CSI input channel */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_smfc_fifo_allocate(0, 0, 3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*step3: config csi for IPU */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_csi_config();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset((void *)csi_mem0, 0xFF, 640 * 480 * 2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_buffer();&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;My test function is as follows:&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;int32_t csi_test_mode()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;int32_t ipu_index = 1, count = 0;&lt;BR /&gt;&amp;nbsp;int32_t width = 640, height = 480;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;/*step 2: setup IPU: from csi to display */&lt;BR /&gt;&amp;nbsp;ipu1_iomux_config();&lt;BR /&gt;&amp;nbsp;ipu_sw_reset(ipu_index, 1000);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;ipu_capture_setup(ipu_index, CSI_TEST_MODE, width, height, width, height);&lt;BR /&gt;&amp;nbsp;while(1){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;ipu_csi_test_mode_color(ipu_index, (count++) % 8);&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Why can't I get the generated checkerboard image?&lt;/DIV&gt;&lt;DIV&gt;I looked at the memory at 0x08000000 and 0x40000000,I find that the data is constant.0x40000000 looks random&lt;/DIV&gt;&lt;DIV&gt;0x08000000 looks regular.data:0x38613860 0x38653864 0x38693868 0x386d386c...&lt;/DIV&gt;&lt;DIV&gt;Can you help me?&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 28 Nov 2019 04:13:49 GMT</pubDate>
    <dc:creator>zhiyuan_song</dc:creator>
    <dc:date>2019-11-28T04:13:49Z</dc:date>
    <item>
      <title>IPU csi0 test</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983719#M146137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi，I have a problem. I use the ipucsi test pattern，set csi0 test control register&lt;/P&gt;&lt;P&gt;csi-&amp;gt;smfc-&amp;gt;idmac&lt;/P&gt;&lt;P&gt;first: idmac&amp;nbsp;configuration&lt;/P&gt;&lt;DIV&gt;void ipu_general_idmac_config()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;uint32_t channel = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;/* enable channel 0 */&lt;BR /&gt;&amp;nbsp;ipu_idmac_channel_enable(channel, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;memset((void *)ipu_cpmem_addr(channel), 0, sizeof(ipu_cpmem_t));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 0, 29, 0x07000000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 29, 29, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 125, 13, 0x0000027f);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 138, 12, 0x000001df);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*setup default pixel format */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 85, 4, INTERLEAVED_RGB565);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 107, 3, 3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 116, 3, 5 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 119, 3, 6 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 122, 3, 5 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 125, 3, 0 - 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 128, 5, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 133, 5, 5);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 138, 5, 11);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 143, 5, 16);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 102, 14, 640 - 1);&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*setup pixel per burst */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 78, 7, 15);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 113, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 1, 58, 20, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //setup rotate/vf/hf and block mode&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 119, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 121, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 120, 1, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_cpmem_set_field(ipu_cpmem_addr(channel), 0, 117, 2, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_idmac_channel_mode_sel(channel, 0);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_idmac_channel_enable1(channel, 1);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;Then, SMFC configuration:&lt;/P&gt;&lt;DIV&gt;uint32_t ipu_smfc_fifo_allocate(uint32_t channel, uint32_t map,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t burst_size)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (channel) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);//smfc map&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);//smfc bs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 1:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 3:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(map, 0x2650000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(burst_size, 0x2650008);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Wrong channel selected!!\n");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(1 &amp;lt;&amp;lt; 8, 0x2600000);//enable smfc&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;and the csi configuration :&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void ipu_csi_config()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;//test&lt;BR /&gt;&amp;nbsp;writel(1 &amp;lt;&amp;lt; 24, 0x2630010);//enable test&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;//writel((readl(0x2600000) | 1 &amp;lt;&amp;lt; 28), 0x2600000);//mipi&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;//writel(0x1e, 0x2638020);//di&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel(((0 &amp;lt;&amp;lt; 31) | (1 &amp;lt;&amp;lt; 15) | (0 &amp;lt;&amp;lt; 3) | (0 &amp;lt;&amp;lt; 2) | (0x4 &amp;lt;&amp;lt; 24) | (1 &amp;lt;&amp;lt; 4) | (0x9f &amp;lt;&amp;lt; 16)), 0x2630000);&lt;BR /&gt;&amp;nbsp;//writel(((0x04 &amp;lt;&amp;lt; 24) | (0x00 &amp;lt;&amp;lt; 4) | (0x0 &amp;lt;&amp;lt; 16) | (0x1 &amp;lt;&amp;lt; 11) | (0x0 &amp;lt;&amp;lt; 7) | (0x02 &amp;lt;&amp;lt; 8)), 0x2630000);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel(((0x01df &amp;lt;&amp;lt; 16) | (0x027f &amp;lt;&amp;lt; 0)), 0x2630004);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel((readl(0x2600000) | (1 &amp;lt;&amp;lt; 0)), 0x2600000);//enable csi0&lt;BR /&gt;}&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void ipu_buffer()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;writel(readl(0x26000e4) | (0 &amp;lt;&amp;lt; 28), 0x26000e4);&lt;BR /&gt;&amp;nbsp;writel(readl(0x2600268) | 1, 0x2600268);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;writel(readl(0x26000e4) | (0 &amp;lt;&amp;lt; 30), 0x26000e4);&lt;BR /&gt;&amp;nbsp;writel(readl(0x2600270) | 1, 0x2600270);&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void ipu_capture_setup(uint32_t ipu_index, uint32_t csi_interface, uint32_t raw_width,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t raw_height, uint32_t act_width, uint32_t act_height)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;uint32_t csi_mem0 = 0x40000000, csi_mem1 = 0;&lt;BR /&gt;&amp;nbsp;int32_t csi_pixel_format = NON_INTERLEAVED_YUV420;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (csi_interface == CSI_TEST_MODE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; csi_pixel_format = INTERLEAVED_RGB565;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // put csi captured image into memory first&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_general_idmac_config();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*step2: allocate smfc fifo for CSI input channel */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_smfc_fifo_allocate(0, 0, 3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*step3: config csi for IPU */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_csi_config();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset((void *)csi_mem0, 0xFF, 640 * 480 * 2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ipu_buffer();&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;My test function is as follows:&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;int32_t csi_test_mode()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;int32_t ipu_index = 1, count = 0;&lt;BR /&gt;&amp;nbsp;int32_t width = 640, height = 480;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;/*step 2: setup IPU: from csi to display */&lt;BR /&gt;&amp;nbsp;ipu1_iomux_config();&lt;BR /&gt;&amp;nbsp;ipu_sw_reset(ipu_index, 1000);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;ipu_capture_setup(ipu_index, CSI_TEST_MODE, width, height, width, height);&lt;BR /&gt;&amp;nbsp;while(1){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;ipu_csi_test_mode_color(ipu_index, (count++) % 8);&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Why can't I get the generated checkerboard image?&lt;/DIV&gt;&lt;DIV&gt;I looked at the memory at 0x08000000 and 0x40000000,I find that the data is constant.0x40000000 looks random&lt;/DIV&gt;&lt;DIV&gt;0x08000000 looks regular.data:0x38613860 0x38653864 0x38693868 0x386d386c...&lt;/DIV&gt;&lt;DIV&gt;Can you help me?&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Nov 2019 04:13:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983719#M146137</guid>
      <dc:creator>zhiyuan_song</dc:creator>
      <dc:date>2019-11-28T04:13:49Z</dc:date>
    </item>
    <item>
      <title>Re: IPU csi0 test</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983720#M146138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi song&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for ipu csi test pattern example one can check function ipu_csi_test_mode() in&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://github.com/RT-Thread/rt-thread/blob/master/bsp/imx6sx/iMX6_Platform_SDK/sdk/drivers/ipu/src/ipu_csi.c" title="https://github.com/RT-Thread/rt-thread/blob/master/bsp/imx6sx/iMX6_Platform_SDK/sdk/drivers/ipu/src/ipu_csi.c"&gt;rt-thread/ipu_csi.c at master · RT-Thread/rt-thread · GitHub&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Nov 2019 23:49:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983720#M146138</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2019-11-28T23:49:03Z</dc:date>
    </item>
    <item>
      <title>Re: IPU csi0 test</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983721#M146139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="display: inline !important; float: none; background-color: #ffffff; color: #3d3d3d; font-family: Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; overflow-wrap: break-word; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;hi，igorpadykov,&lt;/SPAN&gt;&lt;SPAN style="display: inline !important; float: none; background-color: #ffffff; color: #3d3d3d; font-family: Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif; font-size: 15px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; overflow-wrap: break-word; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;IPU channel 0 interrupt flag bit has become one, how to reset it?&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Nov 2019 07:30:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IPU-csi0-test/m-p/983721#M146139</guid>
      <dc:creator>zhiyuan_song</dc:creator>
      <dc:date>2019-11-29T07:30:15Z</dc:date>
    </item>
  </channel>
</rss>

