资讯详情

【ZMP1107笔记】适配16M的SPI-Flash并去掉EMMC

ZMP1107适配更大的SPI Nor-Flash并去掉EMMC

资料选择

官方提供两个ZMP110x相关配置如下:

  • ZMP107 8M SPI Nor-Flash 4GEMMC:SPI Nor-Flash存放Uboot,Kernel等,EMMC存放Rootfs和应用demo等。
  • ZMP106 16M SPI Nor-Flash:Uboot,Kernel、文件系统,应用demo等。

比较分析后决定ZMP1106的SDK修改数据ZMP1107比较容易。

修改Uboot的SPI Nor-Flash的分区

  • 16MB的SPI Nor-Flash分区规划(实际应用中的4)M用户分区不够,可以继续扩展)
分区名 偏移(0x) 大小(0x) 初步大小 备注
UBOOT 0x0 0x40000(256K) 146K boot分区
ENV 0x40000 0x10000(64K) 4K 环境变量分区
ENVBK 0x50000 0x10000(64K) 4K 环境变量备份分区
DTB 0x60000 0x10000(64K) 27K 设备树分区
KERNEL 0x70000 0x280000(2560K) 2197K 内核分区
LOGO 0x2f0000 0x80000(512K) 11K 开机LOGO分区
ROOTFS 0x370000 0x800000(8192K) 6776K 文件系统分区
WORK 0xb70000 0x490000(4672KB) 3K 用户分区
  • 进入uboot根据上述分区修改目录zmp110x_evb.h文件:gedit include/configs/zmp110x_evb.h
#define MTDIDS_DEFAULT "nor0=spi0.0" #define CONFIG_DEFAULT_MTDPARTS \ "mtdparts=mtdparts=spi0.0:256K@0x0(UBOOT),64K@0x40000(ENV),64K@0x50000(ENVBK),64K@0x60000(DTB),"\ "2560K@0x70000(KERNEL),512K@0x2f0000(LOGO),8192K@0x370000(ROOTFS),-@0xb70000(WORK)" 
  • 修改启动方式:Kernel,dtb,rootfs 都存放于 SPI Nor-Flash,这种情况下 rootfs 使用 squashfs 压缩自读文件系统,启动相应的命令 boot_mtd。只修改其他默认启动模式。修改env.cfg文件:gedit envtool/zmp1106_smart_panel_nor.cfg
 bootcmd run boot_mtd 
  • 根据不同的SPI Nor-Flash修改设备树:gedit arch/arm/boot/dts/zmp110x_spi_nor.dtsi
gd25q128: spi-norflash@2 { 
              compatible = "gd,gd25q128";     norflash-name = "gd25q128";     reg = <2>;      /* spiflash gd25q128 */     norflash-jedec-id = <0xc84018>; //不同flash芯片。ID不同     norflash-ext-id = <0>;     norflash-sector-size = <0x10000>;
    norflash-n-sectors = <256>; 

    norflash-flags = <0x18F8>;
    rd_status_cmd = <0x05>, <0x35>, <0x15>;
    wr_status_cmd = <0x01>, <0x31>, <0x11>;
    wr_mode = <1>;
    norflash-wr_flags = <2>;

    /* status reg bit map */
    norflash-b-wip = <0>;
    norflash-b-wel = <1>;
    norflash-b-bp0 = <2>;
    norflash-b-bp1 = <3>;
    norflash-b-bp2 = <4>;
    norflash-b-bp3 = <5>; 
    norflash-b-bp4 = <6>;
    norflash-b-srp0 = <7>;
    norflash-b-srp1 = <8>;
    norflash-b-qe = <9>; 
    norflash-b-cmp = <14>; 
    norflash-b-sus = <15>; 

    status = "disable";
};
  • 修改板级设备树:gedit arch/arm/boot/dts/zmp1106_smart_panel.dts
&gd25q128 { 
        
    status = "okay";
};
  • 检查uboot中是否有gd25q128的驱动: gedit drivers/mtd/spi/sf_probe.c ,已经有了,没有的话按照格式添加,细节参数参考芯片手册。
/*spiflash gd25q128c*/
{ 
        
    .jedec_id = 0xc84018,	.ext_id = 0,
    .b_wip = 0,	.b_wel = 1,	.b_bp0 = 2,	.b_bp1 = 3,
    .b_bp2 = 4,	.b_bp3 = 5,	.b_bp4 = 6,	.b_srp0 = 7,
    .b_srp1 = 8,.b_qe = 9,	.b_lb = 10,	.b_cmp = 14,
    .b_sus = 15,
    .read_sr = spi_flash_cmd_read_status,
    .write_sr = spi_flash_gd25q128c_cmd_write_status,
},

{ 
         "gd25q128", 0xc84018, 0, 64 * 1024, 256, SECT_4K|SFLAG_COM_STATUS2, 0,},

编译Uboot、Kernel等

注意:路劲使用自己主机的真实路径

  • 依次执行以下命令编译 U-Boot,编译完成后会在 U-Boot 目录生成 u-boot.bin 文件
zlgmcu@ubuntu:~/u-boot$ export PATH=$PATH":/opt/arm-zlgmcu-linux-uclibcgnueabi/bin"
zlgmcu@ubuntu:~/u-boot$ export ARCH=arm
zlgmcu@ubuntu:~/u-boot$ export CROSS_COMPILE=arm-zlgmcu-linux-uclibcgnueabi-
zlgmcu@ubuntu:~/u-boot$ make distclean
zlgmcu@ubuntu:~/u-boot$ make zmp110x_evb_config
zlgmcu@ubuntu:~/u-boot$ make all -j4

在这里插入图片描述

  • 在 Kernel 源码目录下,依次执行下面命令进行编译:
zlgmcu@ubuntu:~/kernel $ export PATH="/opt/arm-zlgmcu-linux-uclibcgnueabi/bin:"$PATH
zlgmcu@ubuntu:~/kernel $ export ARCH=arm
zlgmcu@ubuntu:~/kernel $ export CROSS_COMPILE=arm-zlgmcu-linux-uclibcgnueabi-
zlgmcu@ubuntu:~/kernel $ make O=../bd_kernel zmp1107_evb_defconfig
zlgmcu@ubuntu:~/kernel $ make O=../bd_kernel uImage dtbs modules -j4
zlgmcu@ubuntu:~/kernel $ make O=../bd_kernel INSTALL_MOD_PATH=../bd_modules modules_install -j4

下载系统

将上述编译文件放到burntool-v1.0.01-image目录下,使用USB对板子进行升级,burntool-v1.0.01-image工具需要进行如下配置。

分区配置如下:

spiflash配置如下:

确认保存后,长按boot健,给板子上电,看到进度条更新后松手即可下载系统。

w25q128和gd25q128兼容,但是ID不同,如果要修改,只需要将上面的chipID改成w25q128的0x1840ef,设备树中ID也改成0xef4018即可(注意大小端),我这里就是这样做的。

公众号

标签: 厚膜无感功率电阻zmp50

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司