芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 活动
查看: 91|回复: 0

AC590-SoC开发板常用操作说明

[复制链接]
  • TA的每日心情
    可爱
    2019-5-10 10:58
  • 214

    主题

    383

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    10906
    发表于 2019-11-28 12:44:34 | 显示全部楼层 |阅读模式
    AC590-SOC开发板采用核心板+底板的结构。核心板资源如下:
    FPGA:5CSEMA2U23I7N     25K逻辑单元,672个管脚,FPGA部分总共可用管脚为140个。含双核ARM Cortex-A9 CPU,800MHz主频,能够运行Linux操作系统

    DDR3:   (MT41K128M16JT-125 IT   /  MT41K256M16TW-107 IT.P)      512M/1G字节存储容量高速DDR3存储器   

    Nand FLASH:256/512M字节存储容量Nand FLASH。
    (MX30LF2G18AC-TI / 29F2G08ABAEA (256MB)    MX30LF4G18AC-TI(512MB))

    QSPI FLASH:(W25Q32JVSIQ)  4M字节QSPI FLASH。

    引脚,DF12D(3.0)-80DP-0.5V (81)   公座,HRS正品,每个连接座 为80pin、0.5mm间距,共4个。


    AC590-SOC开发板,默认使用nand flash存储Linux内核(zimage)、文件系统(rootfs)、设备树(dtb)和FPGA的配置文件(rbf),uboot默认存储在QSPI Flash中。暂时没有将uboot和preloader直接存储在nand flash中,主要是容灾考虑。核心板已经通过电阻设置默认从QSPI Flash中加载uboot,然后从Nand中启动内核。
    没有特别的必要,不建议更新Uboot。如果需要更新Preloader,由于Quartus自带的烧写器不支持华邦的这个QSPI FLASH,所以是不能直接烧写FLASH的,两种方案,一种是加载好Linux系统之后,在Linux系统下烧写QSPI FLASH,一种是Uboot下挂载TFTP,用TFTP传输Uboot和preloader文件,然后烧写到QSPI中。


    开发板启动流程:

    1、CPU默认从QSPI FLASH启动,QSPI FLASH中已经默认烧写好了preloader和uboot。核心板上也通过电阻的方式配置了让HPS上电就从QSPI Flash启动。
    2、CPU上电从QSPI FLASH中读取preloader,preloader运行后再从Qspi中读取uboot到内存中。然后uboot运行。
    3、在uboot运行后,会从nand flash中读取FPGA的配置文件soc_system.rbf并配置FPGA,读取nand flash的地址为:0xa00000
    4、接着, Uboot从nand flash中读取Linux内核文件(zImage),读取nand flash的地址为:0x400000
    5、最后,Uboot从nand flash中读取Linux设备树文件(dtb),读取地址为0x300000

    当以上操作都执行完成之后,Uboot执行从nand flash启动的命令,让CPU开始加载Linux内核。


    以下先给出开发板上nand flash的分块说明:

      
    filename
      
    addr
    length/size

    reserved(放置Uboot
    0x000000~0x300000
    0x300000

    dtb
    0x300000~0x400000
    0x100000
    soc_system.dtb
    kernel
    0x400000~0xa00000
    0x600000
    zImage
    rbf
    0xa00000~0x1000000
    0x600000
    soc_system.rbf
    rootfs
    0x1000000~0x10000000
    0xf000000




    从上面的分块表可以看到,nand flash的0x000000~0x300000地址为保留地址,事实上,这部分地址正是为preloader和uboot镜像所预留,如果希望把uboot和preloader烧写到nand flash,正是烧写到这一段。

    另外,最后一段空间0x1000000~0x10000000 为Linux文件系统分区,如果希望烧写文件系统,则烧写到该分区。


    更新Uboot的方法
    1、在Linux系统中更新Prloader和uboot

    在Linux能够正常启动运行的情况下,采用在Linux系统中更新Uboot的方法最为方便,此方法要求的条件是u-boot和preloader镜像必须有条件接入到Linux系统中,
    在有网口的情况下,使用tftp命令从PC端直接拷贝preloader和uboot镜像到开发板的文件系统中,再使用Linux下的nand操作命令来擦除和写入到nand flash中。比如,可以按照以下流程进行:
    1、在windows上使用TFTP软件创建一个TFTP服务器(windows系统自带了也有,但是不好用,不如用这个第三方的简单易用)
    2、把编译好的preloader.img文件和uboot.img文件拷贝到服务器指定的目录下
    3、设置开发板的IP和TFTP服务器处于同一个网段
    4、使用tftp命令将preloader.img文件和uboot.img文件拷贝到开发板的文件系统中,例如:
    tftp -gr preloader.img 192.168.0.3
    tftp -gr u-boot.img 192.168.0.3
    5、查看开发板的nand分区,以确定写入到哪里。
    cat /proc/mtd

    6、把存放preloader.img和u-boot.img的mtd0分区先格式化,使用的命令为:
    flash_erase /dev/mtd0 0 24
    其中0是起始地址,24是擦除的块大小,nand flash擦除时以128KB为一块,我们的nand中将0x0~0x300000地址范围的存储空间留给了存放uboot和preloader,这一块的总共有128K*24个字节,所以如果要全擦除的话,就要设计最后的擦除块个数为24。当然,如果只擦除这中间的一部分也是可以的,例如preloader很小,为64KB,只占用半个擦除块大小,所以擦除第一块就足够了,而uboot存放在以0xC0000开始的地址段,一般不超过768KB,所以从0xC0000开始,擦除6个128K块即可。注意。uboot的环境变量保存在以0x80000开始的存储空间,如果希望重新烧写preloader而不丢失之前已经设置好的uboot环境变量,则建议分段擦除,既仅擦除从0x0开始的一个块(用来更新preloader)和从0xC0000开始的所有块(12个)。

    7、使用mtd_debug命令将preloader和uboot镜像更新到指定地址。例如,更新uboot到0xC0000地址的命令为
    mtd_debug write /dev/mtdblock0 0xC0000 0x59AA0 u-boot.img
    这个里面有个0x59AA0的值,这个值就是u-boot.img文件的大小,该大小单位为字节,可以通过在Linux下输入ls -la命令查看,然后换算为十六进制即可。
    更新preloader.img文件到nand flash也可以使用上面的命令,例如如果使用mtd_debug更新preloader.img文件,则命令应该为:
    mtd_debug write /dev/mtdblock0 0x00000 0x10000 preloader.img
    但是实际上,由于preloader是写入到mtd0的0地址的,我们可以使用更加简单的命令来实现,例如:
    flashcp preloader.img /dev/mtd0
    也就是用flashcp命令直接将preloader文件拷贝到mtd0块中,这个命令会自动将文件拷贝到0地址开始的地方。


    在uboot中更新各种文件

    先行准备工作:
    设置uboot中的ipaddr与电脑IP同一个网段,如192.168.0.5,则
    setenv ipaddr 192.168.0.5
    设置uboot中的serverip为电脑IP,假如电脑IP为192.168.0.3 则
    setenv serverip 192.168.0.3
    保存当前设置,这样下次启动就不用再设置这些了。
    saveenv

    在电脑上创建tftp服务器。把需要用到的文件都放进去

    preloader
    擦除preloader所在存储区
    1. nand erase 0x0 0x20000
    复制代码

    从tftp拷贝preloader.img到内存
    1. tftp 0x10000000 preloader.img
    复制代码

    将内存中的preloader数据写到nand
    1. nand write 0x10000000 0x0 ${filesize}
    复制代码


    uboot
    擦除u-boot所在存储区
    1. nand erase 0xC0000 0xE0000
    复制代码

    从tftp拷贝u-boot.img到内存
    1. tftp 0x10000000 u-boot.img
    复制代码

    将内存中的u-boot.img数据写到nand
    1. nand write 0x10000000 0xC0000 ${filesize}
    复制代码


    dtb
    擦除dtb所在存储区
    1. nand erase 0x300000 0x100000
    复制代码

    从tftp拷贝dtb到内存
    1. tftp 0x10000000 soc_system.dtb
    复制代码

    将内存中的soc_system.dtb数据写到nand
    1. nand write 0x10000000 0x300000 ${filesize}
    复制代码



    rbf
    擦除rbf所在存储区
    1. nand erase 0xa00000 0x600000
    复制代码

    从tftp拷贝rbf到内存
    1. tftp 0x10000000 soc_system.rbf
    复制代码

    将内存中的soc_system.rbf数据写到nand
    1. nand write 0x10000000 0xa00000 ${filesize}
    复制代码



    zImage
    擦除zImage所在存储区
    1. nand erase 0x400000 0x600000[size=14px]
    复制代码

    从tftp拷贝zImage到内存
    1. tftp 0x10000000 zImage[size=14px]
    复制代码

    将内存中的zImage数据写到nand
    1. nand write 0x10000000 0x400000 ${filesize}[size=14px]
    复制代码



    rootfs
    擦除rootfs所在存储区
    1. nand erase 0x1000000 0xf000000[size=14px]
    复制代码

    从tftp拷贝rootfs到内存
    1. tftp 0x10000000 altera_ubifs.img[size=14px]
    复制代码

    将内存中的altera_ubifs.img数据写到nand
    1. nand write 0x10000000 0x1000000 ${filesize}[size=14px]
    复制代码




    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|手机版|Archiver|芯路恒电子技术论坛  

    GMT+8, 2019-12-6 14:25 , Processed in 0.085981 second(s), 12 queries , File On.

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表