<?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 Re: iMX6 uSDHC and eMMC in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258587#M172239</link>
    <description>&lt;P&gt;My bad - didn't read the TRM closely. When setting up the IOMUXC for the data pins I thought the pin muxes for port SDHC4 would be ALT_FUNC_0 like the other SDHC ports. Turns out they should be ALT_FUNC_1. Thanks for your help. Everything works now.&lt;/P&gt;</description>
    <pubDate>Thu, 08 Apr 2021 06:23:43 GMT</pubDate>
    <dc:creator>ogj</dc:creator>
    <dc:date>2021-04-08T06:23:43Z</dc:date>
    <item>
      <title>iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1257668#M172165</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I’m having trouble getting the usdhc controller in the iMX6Q working with&amp;nbsp; the onboard Micron MTFC4GACAJCN-4M eMMC device. Our driver works fine with SDHC cards (on SDHC2 and SDHC3). SDHC4 is connected to an eMMC device. We realize that some commands are different between SD cards and eMMC devices. The board is an OTS iMX6 Quad from Embedded Artists.&lt;/P&gt;&lt;P&gt;The issue is with sending CMD8 to get the extended CSD – it fails. The following commands are executed successfully before sending the CMD8: CMD0, CMD1, CMD2, CMD3, at this point the operating frequency is changed to 26 MHz per the iMX6 SDK, CMD9, CMD7 (eMMC does go to trans state), CMD6 to change to 8-bit bus, CMD16 ( 512 byte sectors – necessary??), and then CMD8.&lt;/P&gt;&lt;P&gt;On sending CMD8, the command is accepted (INTSTAT bit 0 is a 1), but no data transfers. We’ve tried the SDK code (PIO mode to double check) and our own code which uses DMA, but no data transfers. Here are the registers (SDK PIO mode) while waiting for data to transfer:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ogj_0-1617773247891.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/141463iA87B065BFC2466D0/image-size/medium?v=v2&amp;amp;px=400" role="button" title="ogj_0-1617773247891.png" alt="ogj_0-1617773247891.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note that INTSTAT is 1 (command complete), but PRSSTAT bit BREN is low meaning no data is available to read. CDIHB is high indicating transfer in progress. RTA is high indicating a data read is active. BLK_ATT shows 1 block of 512 bytes. Should SDOFF be high at this point or does that matter?&lt;/P&gt;&lt;P&gt;Here is the code for setting up the read:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;static int32_t mmc_read_esd&lt;/P&gt;&lt;P&gt;(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SDHC_MemMapPtr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg_ptr&lt;/P&gt;&lt;P&gt;)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; CMD&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; cmd;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Set block length&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; card_cmd_config(&amp;amp;cmd, CMD16, BLK_LEN, READ, RESPONSE_48, DATA_PRESENT_NONE, TRUE, TRUE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; usdhc_printf("Sending CMD16\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Send CMD16&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if(SUCCESS == host_send_cmd(reg_ptr, &amp;amp;cmd))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configure block attribute&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; host_cfg_block(reg_ptr, BLK_LEN, ONE, ESDHC_BLKATTR_WML_BLOCK);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read extended CSD&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; card_cmd_config(&amp;amp;cmd, CMD8, NO_ARG, READ, RESPONSE_48, DATA_PRESENT, TRUE, TRUE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usdhc_printf("Sending CMD8\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send CMD8&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(SUCCESS == host_send_cmd(reg_ptr, &amp;amp;cmd))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return host_data_read(reg_ptr, (uint32_t *) ext_csd_data, BLK_LEN, ESDHC_BLKATTR_WML_BLOCK);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return(FAIL);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The command is accepted, and here’s the code for reading the buffer (which is the same code used to read CMD17/18 data for an SD card which works fine):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;int32_t host_data_read&lt;/P&gt;&lt;P&gt;(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; SDHC_MemMapPtr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reg_ptr,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t&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; *dst_ptr,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t&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; length,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t&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; wml&lt;/P&gt;&lt;P&gt;)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int32_t&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; idx;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int32_t&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; itr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t&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; loop;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Enable Interrupt flags&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; reg_ptr-&amp;gt;IRQSTATEN |= ESDHC_INTERRUPT_ENABLE;&lt;/P&gt;&lt;P&gt;//&amp;nbsp;&amp;nbsp; HW_USDHC_INT_STATUS_EN(instance).U |= ESDHC_INTERRUPT_ENABLE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Read data to dst_ptr&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; loop = length / (4 * wml);&amp;nbsp;&amp;nbsp; //wml is in 32-bit words - length is in bytes&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; for(idx = 0; idx &amp;lt; loop; idx++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait until buffer ready&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(reg_ptr-&amp;gt;PRSSTAT &amp;amp; SDHC_PRSSTAT_BREN));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read from FIFO watermark words&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(itr = 0; itr &amp;lt; wml; itr++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dst_ptr = reg_ptr-&amp;gt;DATPORT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst_ptr++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Read leftover data that is not WML aligned&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Note: loop is used here as the number of words left to read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; loop = (length % (4 * wml)) / 4;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if(loop != 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait until buffer ready&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(reg_ptr-&amp;gt;PRSSTAT &amp;amp; SDHC_PRSSTAT_BREN));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the leftover to destination buffer&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(itr = 0; itr &amp;lt; loop; itr++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dst_ptr = reg_ptr-&amp;gt;DATPORT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst_ptr++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Reading stalls waiting for the SDHC_PRSSTAT_BREN bit to be set – which never happens. This is using the SDK code.&lt;/P&gt;&lt;P&gt;Any ideas?&lt;/P&gt;</description>
      <pubDate>Wed, 07 Apr 2021 05:30:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1257668#M172165</guid>
      <dc:creator>ogj</dc:creator>
      <dc:date>2021-04-07T05:30:47Z</dc:date>
    </item>
    <item>
      <title>Re: iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1257783#M172182</link>
      <description>&lt;P&gt;Hi Ken&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;one can test other emmc parts/boards as this particular emmc can be broken.&lt;/P&gt;
&lt;P&gt;Also one can check procedure on i.MX6Q Sabre SD board. May be useful below link&lt;/P&gt;
&lt;P&gt;where some emmc parts work and some not:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.nxp.com/t5/i-MX-Processors/eMMC-8GB-to-4GB-crash-on-linux-yocto-boot/m-p/373231" target="_blank" rel="noopener"&gt;https://community.nxp.com/t5/i-MX-Processors/eMMC-8GB-to-4GB-crash-on-linux-yocto-boot/m-p/373231&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;/P&gt;</description>
      <pubDate>Wed, 07 Apr 2021 08:15:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1257783#M172182</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2021-04-07T08:15:04Z</dc:date>
    </item>
    <item>
      <title>Re: iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258123#M172209</link>
      <description>&lt;P&gt;The board came preloaded with uboot and linix on the eMMC and it does run.&lt;/P&gt;</description>
      <pubDate>Wed, 07 Apr 2021 15:23:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258123#M172209</guid>
      <dc:creator>ogj</dc:creator>
      <dc:date>2021-04-07T15:23:45Z</dc:date>
    </item>
    <item>
      <title>Re: iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258317#M172215</link>
      <description>&lt;P&gt;Why&amp;nbsp; CMD8 for emmc in JEDEC spec should be the same CMD8&amp;nbsp;in SD Card association spec?&lt;/P&gt;</description>
      <pubDate>Wed, 07 Apr 2021 21:29:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258317#M172215</guid>
      <dc:creator>BiyongSUN</dc:creator>
      <dc:date>2021-04-07T21:29:21Z</dc:date>
    </item>
    <item>
      <title>Re: iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258407#M172222</link>
      <description>&lt;P&gt;&amp;gt;The board came preloaded with uboot and linix on the eMMC and it does run.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;in such case you can debug it and compare procedure steps with failing case.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;/P&gt;</description>
      <pubDate>Thu, 08 Apr 2021 01:03:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258407#M172222</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2021-04-08T01:03:48Z</dc:date>
    </item>
    <item>
      <title>Re: iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258439#M172229</link>
      <description>&lt;P&gt;Please search the SD association spec to check if you can find the&amp;nbsp;&lt;SPAN&gt;extended CSD in SD association spec,&amp;nbsp; which is in the eMMC JEDEC spec. They are two different specs.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 08 Apr 2021 02:07:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258439#M172229</guid>
      <dc:creator>BiyongSUN</dc:creator>
      <dc:date>2021-04-08T02:07:52Z</dc:date>
    </item>
    <item>
      <title>Re: iMX6 uSDHC and eMMC</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258587#M172239</link>
      <description>&lt;P&gt;My bad - didn't read the TRM closely. When setting up the IOMUXC for the data pins I thought the pin muxes for port SDHC4 would be ALT_FUNC_0 like the other SDHC ports. Turns out they should be ALT_FUNC_1. Thanks for your help. Everything works now.&lt;/P&gt;</description>
      <pubDate>Thu, 08 Apr 2021 06:23:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/iMX6-uSDHC-and-eMMC/m-p/1258587#M172239</guid>
      <dc:creator>ogj</dc:creator>
      <dc:date>2021-04-08T06:23:43Z</dc:date>
    </item>
  </channel>
</rss>

