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.

Linux/AM5728: Custom board eMMC issue

Part Number: AM5728
Other Parts Discussed in Thread: CSD

Tool/software: Linux

hi all,
We've made a custom board according to 5728 evm board but we use different emmc.
However,our custom board can't run the emmc in the right way,the dmesg file is showed below.6558.trace.txt

  • the processor sdk we use is ti-processor-sdk-linux-am57xx-evm-03.00.00.04-Linux-x86-Install.bin,

    the emmc use KLMAG1JENB-B041 16GB  Following is our eMMC's data sheet.

    the emmc flash only support HS26 HS52 mode,when our board use 3.3v IO.  

    In all,i am still confused where the problem is and wondering if someone can provide more insight for me on this!

    Thanks in advance!KLMxGxJENB-B041(eMMC5.1 1ynm based e_MMC)1.0.pdf

  • To which MMC port is the memory connected?
  • Jim,

    Check the below e2e thread. It is for DRA7x device, but should be similar to AM57x device also.

    e2e.ti.com/.../575820

    Regards,
    Pavel
  • mmc2 use for emmc flash and use 3.3v 

  • I check it again according to your suggestion
    I found that:

    1: dts config
    mmc@480b4000 {
    compatible = "ti,dra7-hsmmc", "ti,omap4-hsmmc";
    reg = <0x480b4000 0x400>;
    interrupts = <0x0 0x51 0x4>;
    ti,hwmods = "mmc2";
    ti,dual-volt;
    ti,needs-special-reset;
    dmas = <0xc9 0x2f 0xc9 0x30>;
    dma-names = "tx", "rx";
    status = "okay";
    pinctrl-names = "default", "hs", "ddr_1_8v";
    pinctrl-0 = <0xcf>;
    vmmc-supply = <0xc7>;
    bus-width = <0x8>;
    ti,non-removable;
    no-1-8-v;
    pinctrl-1 = <0xd0>;
    pinctrl-2 = <0xd1 0xd2>;
    max-frequency = <0x2dc6c00>;
    cap-mmc-highspeed;
    };

    2. trace:

    clock: 400000 Hz
    vdd: 21 (3.3 ~ 3.4 V)
    bus mode: 2 (push-pull)
    chip select: 0 (don't care)
    power mode: 2 (on)
    bus width: 0 (1 bits)
    timing spec: 0 (legacy)
    signal voltage: 0 (3.30 V)
    driver type: 0 (driver type B)

    [ 3.857332] omap_hsmmc 480b4000.mmc: i/o voltage switch to 3V
    [ 3.863208] omap_hsmmc 480b4000.mmc: Initial signal voltage of 3.3v


    [ 4.953039] mmc1: starting CMD7 arg 00010000 flags 00000015
    [ 4.953043] ldq mmc_wait_for_req_done 511
    [ 4.956600] ldq omap_hsmmc_request_done 1054
    [ 4.956602] ldq mmc_request_done 138
    [ 4.956607] mmc1: req done (CMD7): 0: 00000700 00000000 00000000 00000000
    [ 4.956619] ldq mmc_wait_for_req_done 516
    [ 4.956621] ldq mmc_init_card 1524
    [ 4.956623] ldq mmc_read_ext_csd 605
    [ 4.956625] ldq mmc_read_ext_csd 612
    [ 4.956630] ldq mmc_send_cxd_data 334
    [ 4.956633] mmc1: starting CMD8 arg 00000000 flags 000000b5
    [ 4.956636] mmc1: blksz 512 blocks 1 flags 00000200 tsac 150 ms nsac 1000
    [ 4.956640] ldq omap_hsmmc_prepare_data 1671 use dma
    [ 4.956651] ldq mmc_wait_for_req_done 511

    cmd8 RESPs is ok but can not get data from DATA0

  • mmc2_pins_default: mmc2_pins_default {
    pinctrl-single,pins = <
    DRA7XX_CORE_IOPAD(0x349c, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a23.mmc2_clk */
    DRA7XX_CORE_IOPAD(0x34b0, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_cs1.mmc2_cmd */
    DRA7XX_CORE_IOPAD(0x34a0, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a24.mmc2_dat0 */
    DRA7XX_CORE_IOPAD(0x34a4, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a25.mmc2_dat1 */
    DRA7XX_CORE_IOPAD(0x34a8, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a26.mmc2_dat2 */
    DRA7XX_CORE_IOPAD(0x34ac, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a27.mmc2_dat3 */
    DRA7XX_CORE_IOPAD(0x348c, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a19.mmc2_dat4 */
    DRA7XX_CORE_IOPAD(0x3490, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a20.mmc2_dat5 */
    DRA7XX_CORE_IOPAD(0x3494, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a21.mmc2_dat6 */
    DRA7XX_CORE_IOPAD(0x3498, (PIN_INPUT_PULLUP | MUX_MODE1)) /* gpmc_a22.mmc2_dat7 */
    >;
    };


    &mmc2 {
    pinctrl-names = "default", "hs", "ddr_1_8v";
    pinctrl-0 = <&mmc2_pins_default>;
    pinctrl-1 = <&mmc2_pins_hs>;
    pinctrl-2 = <&mmc2_pins_ddr_3_3v &mmc2_iodelay_ddr_3_3v_conf>;

    /* max-frequency = <24000000>; */
    max-frequency = <48000000>;
    cap-mmc-highspeed;
    };

    mmc2: mmc@480b4000 {
    compatible = "ti,dra7-hsmmc", "ti,omap4-hsmmc";
    reg = <0x480b4000 0x400>;
    interrupts = <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
    ti,hwmods = "mmc2";
    ti,dual-volt;
    ti,needs-special-reset;
    dmas = <&sdma_xbar 47>, <&sdma_xbar 48>;
    dma-names = "tx", "rx";
    status = "disabled";
    };
  • Jim,

    From what I understand, you are using the same configuration as AM572x TI EVM (MMC2, pinmux, 3.3V). Thus you can keep the mmc2 pinmux and settings from EVM dts file:

    u-boot/arch/arm/dts/am57xx-beagle-x15-common.dtsi

    u-boot/arch/arm/dts/am57xx-evm-reva3.dts

    &mmc2 {

    status = "okay";

    pinctrl-names = "default";

    pinctrl-0 = <&mmc2_pins_default>;

    vmmc-supply = <&vdd_3v3>;   --------> Do you use similar voltage supply?

    bus-width = <8>;

    ti,non-removable;

    cap-mmc-dual-data-rate;

    no-1-8-v;

    };

     

    vdd_3v3: fixedregulator-vdd_3v3 {

    compatible = "regulator-fixed";

    regulator-name = "vdd_3v3";

    vin-supply = <&regen1>;

    regulator-min-microvolt = <3300000>;

    regulator-max-microvolt = <3300000>;

    };

     

    &mmc2 {

    pinctrl-names = "default", "hs", "ddr_1_8v";

    pinctrl-0 = <&mmc2_pins_default>;

    pinctrl-1 = <&mmc2_pins_hs>;

    pinctrl-2 = <&mmc2_pins_ddr_3_3v &mmc2_iodelay_ddr_3_3v_conf>;

    /delete-property/ mmc-hs200-1_8v;

    };

     

    From what I understand, you do not need to boot from eMMC. I will suggest you to test eMMC first at u-boot stage. Refer to the below wiki page:

     

    http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User's_Guide#Using_SD.2C_eMMC_or_USB_storage

     

    Regards,
    Pavel