AnsweredAssumed Answered

How to partition QSPI NOR Flash on iMX6UL-EVL ?

Question asked by toanjunifer@gmail.com on Aug 28, 2019
Latest reply on Sep 3, 2019 by toanjunifer@gmail.com

Hi,

   As question above, this issue actually hardly with me. So I hope someone can help me.

   I trying to flash U-boot, zImage, .dts file and rootfs into QSPI. And I'm using mfgtools. So the problem is when I read ucl2.xml, in part QSPI Nor Flash, this tool is flash only .imx file and header file.

   Then, I check mtd partition in Linux command line:

$ cat /proc/mtd

mtd0: 02000000 00010000 "21e0000.qspi"

   It's show me only one part is mtd0 with size 32Mb. Then I try to customize the device tree file and devide it into 4 parts.

&qspi {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_qspi>;
    status = "okay";
    ddrsmp=<0>;

    flash0: n25q256a@0 {
        #address-cells = <1>;
        #size-cells = <1>;
        compatible = "micron,n25q256a";
        spi-max-frequency = <29000000>;
        spi-nor,ddr-quad-read-dummy = <6>;
        reg = <0>;
        partition@0 {
            /* 1M for Uboot */
            reg = <0x00000000 0x00100000>;
            label = "uboot";
        };
        partition@1 {
            /* 8M for kernel- zImage */
            reg = <0x00100000 0x00800000>;
            label = "kernel";
        };
        partition@2 {
            /* 1M for device tree */
            reg = <0x00800000 0x00100000>;
            label = "dts";
        };
        partition@3 {
            /* 20M for root file system */
            reg = <0x00900000 0x01400000>;
            label = "rootfs";
        };
    };
};

And I execute again this command: 

$ cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00010000 "uboot"
mtd1: 00800000 00010000 "kernel"
mtd2: 00100000 00010000 "dts"
mtd3: 01400000 00010000 "rootfs"

 Okay, It's seem be right. But when I access uboot environment and check with:

$ printenv

baudrate=115200
board_name=EVK
board_rev=14X14
boot_fdt=try
bootcmd=run findfdt;mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=3
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
ethact=FEC1
ethaddr=00:04:9f:04:d3:8d
ethprime=FEC
fdt_addr=0x83000000
fdt_file=undefined
fdt_high=0xffffffff
findfdt=if test $fdt_file = undefined; then if test $board_name = EVK && test $board_rev = 9X9; then setenv fdt_file imx6ul-9x9-evk.dtb; fi; if test $board_name = EVK && test $board_rev = 14X14; then setenv fdt_file imx6ul-14x14-evk.dtb; fi; if test $fdt_file = undefined; then echo WARNING: Could not determine dtb to use; fi; fi;
image=zImage
initrd_addr=0x83800000
initrd_high=0xffffffff
ip_dyn=yes
loadaddr=0x80800000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcdev=1
mmcpart=1
mmcroot=/dev/mmcblk1p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
panel=TFT43AB
script=boot.scr

Environment size: 2457/8188 byte

And I can not found mtdparts environment. Then I try execute this command to add mtdparts environment:

$ setenv mtdparts mtdparts=21e0000.qspi:1m(uboot),8m(kernel),1m(dtb),20(rootfs)

Then I check with command: 

$ printenv mtdparts

mtdparts=mtdparts=21e0000.qspi:1m(uboot),8m(kernel),1m(dtb),20(rootfs)

Next step, I customize the ucl2.xml to flash all 4 parts above. <In attached file below>

But I got error with:

UTP: received command '$ flash_erase /dev/mtd1 0 20'
UTP: executing "flash_erase /dev/mtd1 0 20"
flash_erase: error!: /dev/mtd1
error 2 (No such file or directory)
UTP: sending Non-success to kernel for command $ flash_erase /dev/mtd1 0 20.
utp_poll: exit with status 65280

This mean I do something wrong in partition. May I only partition in kernel but actually in default It still one partition is mtd0. 

Someone can help me ?

Thank you so much,

Toan

Attachments

Outcomes