芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 7369|回复: 4

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

[复制链接]
  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 418

    主题

    769

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15805
    QQ
    发表于 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,则
    1. setenv ipaddr 192.168.0.5
    复制代码

    设置uboot中的serverip为电脑IP,假如电脑IP为192.168.0.3 则
    1. setenv serverip 192.168.0.3
    复制代码

    保存当前设置,这样下次启动就不用再设置这些了。
    saveenv

    在电脑上创建tftp服务器。把需要用到的文件都放进去,tftp服务器的创建很简单,不需要在ubuntu下也能创建,只需要在windows系统中使用一个第三方软件即可,附件提供了一个该软件。 tftpd32.400.zip (472.83 KB, 下载次数: 380) tftpd64.400.zip (525.44 KB, 下载次数: 393)
    两个附件,一个是32位的,一个是64位的,根据你自己的电脑系统选择。使用也非常简单,就是在Current Directory指定你放置需要传输的文件的路径,在Server interface指定你能够和开发板正常网络通信的网卡。然后就完事了,不需要再点击什么开始和结束按钮。不用的时候关掉即可,需要的时候打开软件做这两个设置就可以。
    TFTP服务器截图.png


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

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

    或者是
    1. tftp 0x10000000 preloader-mkpimage.bin
    复制代码

    将内存中的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
    复制代码

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

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



    rootfs
    擦除rootfs所在存储区
    1. nand erase 0x1000000 0xf000000
    复制代码

    从tftp拷贝rootfs到内存
    1. tftp 0x10000000 altera.ubi
    复制代码

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






    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 418

    主题

    769

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15805
    QQ
     楼主| 发表于 2023-4-19 17:20:50 | 显示全部楼层
    华邦的flash驱动有bug,导致uboot下执行saveenv会失败并重启系统,
    解决方法:
    使用附件的文件替换uboot的华邦flash驱动文件drivers/mtd/spi/winbond.c

    winbond.c (1.97 KB, 下载次数: 120)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 418

    主题

    769

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15805
    QQ
     楼主| 发表于 2023-4-20 11:17:58 | 显示全部楼层
    G:\Dev_Temp\FPGA\AC590\AC590_SoC_GHRD\software\spl_bsp\uboot-socfpga\include\configs下的socfpga_common.h文件可以修改默认环境变量,修改硬件地址信息,比如更改2个网卡的基地址
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 418

    主题

    769

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15805
    QQ
     楼主| 发表于 2023-4-20 18:10:58 | 显示全部楼层

    Intel原厂提供的系统,都是使用SD卡启动的,其soc eds编译默认生成的uboot也是使用的SD卡作为preloader、uboot、Linux系统的存储介质,这导致通过bsp-editor生成的Uboot,以及通过soc eds生成的设备树文件,都是无法在使用Nand存储器的硬件电路板上运行的。所以需要我们手动修改Uboot的环境变量,以及设备树文件。

    以下介绍在基于Nand存储器作为主存储介质的soc产品中,为设备树中的Nand添加分区
    http://www.corecourse.cn/forum.php?mod=viewthread&tid=28412
    (出处: 芯路恒电子技术论坛)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 418

    主题

    769

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15805
    QQ
     楼主| 发表于 2023-4-27 16:57:49 | 显示全部楼层

    AC590评估板的Quartus工程和Uboot源码

    Quartus工程和Uboot源码,经过深度修改的支持万象奥科的评估板,从Nand Flash启动
    hd_CycloneV_Prj.part1.rar (18 MB, 下载次数: 134)
    hd_CycloneV_Prj.part2.rar (2.45 MB, 下载次数: 118)


    以下是该工程编译出来的几个文件,可以直接烧录到nand中,用于启动和加载Linux,具体烧录方法见1楼
    preloader-mkpimage.bin (256 KB, 下载次数: 319)
    soc_system.dts (37.15 KB, 下载次数: 111)
    soc_system.rbf (4.05 MB, 下载次数: 120)
    socfpga.dtb (20.03 KB, 下载次数: 105)
    u-boot.img (354.93 KB, 下载次数: 120)
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-3-28 18:35 , Processed in 0.136879 second(s), 36 queries .

    Powered by Discuz! X3.4

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

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