开发环境搭建


1. 板子硬件连接

1.1. SSC009A主板示意图

电源: DC 12V

调试串口: TTL电平,特率115200

图1-1

SPI-NOR 启动的jumper配置:

图1-2

SPI-NAND启动的Jumper配置:

图1-3

1.2. SSC009B主板示意图

图1-4

SPI-NOR启动的Jumper配置:

图1-5

SPI-NAND启动的Jumper配置

图1-6


2. 准备编译环境

通常以交叉编译的方式进行开发和调试,即"宿主机+目标机"的形式。而宿主机和目标机的连接一般采用串口连接或网络连接,如下图所示:

图2-1交叉编译连接方式

注:提供的debug tool作用为读寄存器和烧写Mboot。

2.1. 安装Linux服务器

建议使用Ubuntu 16.06(64bit)。

2.2. 安装交叉编译工具

提供编译工具链arm-buildroot-linux-uclibcgnueabihf-4.9.4用于编译uclibc版本的mi和kernel,boot,kernel,工具链一般打包在SDK开发包中,或者请找FAE获取。


3. 编译

本芯片支持nor flash和spi nand flash两种启动方式,因此在SDK中编译有所区分,通过不同的配置文件来实现,SDK中包含了最新的boot和kernel的image,并且脚本打包成可烧录的image。

3.1. 编译boot

  • SPI-NOR package

    #declare -x ARCH="arm"  
    # declare -x CROSS\_COMPILE="$compiler"  
    //exp: uclibc "arm-buildroot-linux-uclibcgnueabihf-"  
    # make infinity6b0_ufu_defconfig;  
    #make clean;  
    #make
    
  • SPI-NAND package

    #declare -x ARCH="arm"  
    # declare -x CROSS_COMPILE="$compiler"  
    //exp: uclibc "arm-buildroot-linux-uclibcgnueabihf-"  
    # make infinity6b0_ufu_spinand_defconfig;  
    #make clean;  
    #make
    
  • Get image

    # cp u-boot.xz.img.bin ${ your_release_path }// 选择spi-nor时  
    # cp u-boot_spinand.xz.img.bin ${ your_release_path }// 选择spi-nand时
    

3.2. 编译kernel

  • SPI-NOR Kernel (ASIC)

    表3-1

    CHIP Glibc compiler Uclibc compiler Kernel make config DTS
    SSC9341 Buildroot Uclibc 4.9.4 arm-buildroot-linux-uclibcgnueabihf- infinity6b0_ssc009a_s01a_usbcam_defconfig infinity6b0-ssc009a-s01a.dts
  • SPI-NAND Kernel (ASIC)

表3-2

CHIP Glibc compiler Uclibc compiler Kernel make config DTS
SSC9341 Buildroot Uclibc 4.9.4 arm-buildroot-linux-uclibcgnueabihf- infinity6b0_ssc009a_s01a_spinand_usbcam_defconfig infinity6b0-ssc009a-s01a.dts

注:请参考表格和你的芯片版本做对应的编译。

# declare -x ARCH="arm"

# declare -x CROSS_COMPILE="$compiler"

//exp: uclibc "arm-buildroot-linux-uclibcgnueabihf-"

# make xxx_kernel_make_config

//exp: make infinity6b0_ssc009a_s01a_spinand_usbcam_defconfig

# make clean;

# make
  • Get image
    # cp arch/arm/boot/uImage.xz ${ your_release_path }
    

3.3. 编译SDK(ALKAID)

  • SPI-NOR flash package

    表3-3

    CHIP Glibc Uclibc
    SSC9341 nor.uclibc-squashfs.009a.64.qfn88 nor.uclibc-squashfs.009a.64.qfn88
  • SPI-NAND flash package

    表3-4

    CHIP Glibc Uclibc
    SSC9341 spinand.uclibc-squashfs.009a.64.qfn88 spinand.uclibc-squashfs.009a.64.qfn88

注:请参考表格和你的芯片版本做对应的编译。

# cd $/{Alkaid}/project

# . /setup_config.sh xxx_alkaid_build_config

//exp: . /setup_config.sh./configs/ipc/i6b0/nor.uclibc-squashfs.009a.64.qfn88

# make image
  • Get image
    # cd \${Alkaid}/project/image/output/images
    

4. 烧写

4.1. Burning code by uboot

  • Run tftp (FTP server) on PC

Step1. 使用tftp工具指向image path:SDK\project\image\output\images\,并选择正确的网卡。

图4-1

Step 2. 连接板子的网口到PC端,连接debug串口工具到PC端,并检查连接的正确性。

  • Run tftp (FTP Client) on EVB

Step 1. 板子开机,长按回车,进入bootloader command line. Mstar 的boot loader。

  • 首次烧录请设置IP:(除非ip设置变更或者更換flash)
    # set -f gatewayip 192.168.1.1  
    # set -f ipaddr 192.168.1.127 //设定FTP Client (EVB板子)使用的IP  
    # set -f netmask 255.255.255.0  
    # set -f serverip 192.168.1.100//设定FTP server (PC) 的IP  
    # saveenv
    

注:

  1. 为了保证烧录顺利,请保证PC和开发板处于同一网段。

  2. 请采用静态方式固定分配ip。防止烧录时ip地址跳变。

  3. 您也可以使用独立网卡使PC端直连开发板,固定该网卡的内网ip地址,并按上述方法设定开发板。

  4. 在UBOOT console下执行以下指令即可自动透过ethernet烧录。

    # estar (OR: estar auto_update.txt)
    

4.2. Burning uboot by ISP Tool

本方式适用于空机烧录,或者uboot已经损坏导致无法通过uboot升级的场合。

注:必须使用我们专用的ISP TOOL工具,工具途径请咨询我们的FAE提供

4.2.1. SPI-NOR-Flash

  • Default Partition layout

    表4-1

    No range size
    IPL 0x00000000, 0x00010000 64KB
    IPL_CUST 0x00010000, 0x00020000 64KB
    MXPT 0x00020000, 0x00030000 64KB
    UBOOT 0x00030000, 0x0004F000 124KB
    UBOOT_ENV 0x0004F000, 0x00050000 4KB
    BOOT 0x00000000, 0x00050000 320KB
    KERNEL 0x00050000, 0x00250000 2048KB
    ROOTFS 0x00250000, 0x00650000 4096KB
    NVRSERVICE 0x00650000, 0x00950000 3072KB
    CUSTOMER 0x00950000, 0x006B0000 6848KB

注意:

以上是默认的分区配置,在项目开发的过程或者不同的项目上,分区很可能会不同。实际使用的分区请参考编译镜像中的image/partition_layout.txt。

  • Burning code by ISP tool

    表4-2

    offset Binary放置目录
    IPL.bin 0x0000 ${ALKAID}\project\image\output\images\IPL.bin
    IPL_CUST.bin 0x10000 ${ALKAID}\project\image\output\images\IPL_CUST.bin
    MXP_SF.bin 0x20000 ${ALKAID}\project\image\output\images\MXP_SF.bin
    u-boot.xz.img.bin 0x30000 ${ALKAID}\project\image\output\images\u-boot.xz.img.bin
  • Burning Steps

    • Step1. 执行ISP tool。并且关闭UART terminal,否则无法正常'Connect'。

    • Step2. 选择SPI tab, 点击'More' 并且选择类型为'SPI'。

      图4-2

    • Step3. 加载烧录文件并点击'Connect'。

      图4-3

    • Step4. 加载image "IPL.bin",并点击'Run'。

      注:烧写IPL 的时候,推荐all chip。之后烧写可改成erase file。

      图4-4

    • Step5. 加载 image "IPL_CUST.bin", 取消'Erase Device'选项。设置'Base shift 'at 0x10000。

      注:可能随着版本变化,Base shift的地址以表格1-2数据为准。

      图4-5

    • Step6. 加载image "MXP_SF.bin", 设置'Base shift 'at 0x20000。

      图4-6

    • Step7. 加载image "u-boot.xz.img.bin" , 设置'Base shift 'at 0x30000。

      图4-7

    • Step8. 重启EVB板子,关闭工具。

4.2.2. SPI-NAND Flash

  • Default Partition layout

    表4-3

    No range size
    CIS 0x00000000-0x00020000 128KB
    IPL0 0x00140000-0x00200000 768KB
    IPL_CUST0 0x00200000-0x00260000 384KB
    IPL_CUST1 0x00260000-0x002c0000 384KB
    UBOOT0 0x002c0000-0x00320000 384KB
    UBOOT1 0x00320000-0x00380000 384KB
    ENV 0x00380000-0x003c0000 256KB
    KERNEL 0x003c0000-0x008c0000 5120KB
    RECOVERY 0x008c0000-0x00dc0000 5120KB
    rootfs 0x00dc0000-0x013c0000 6144KB
    UBI 0x0013c0000-0x008000000 110848KB

注意:

  • 以上是默认的分区配置,在项目开发的过程或者不同的项目上,分区很可能会不同。实际使用的分区请参考编译镜像中的image/partition_layout.txt。

  • Burning code by ISP tool

  • ISP Tool Version

请确定 ISP Tool 版本为V5.0.3.23091b(beta)。
ISP Tool会在首次版本发布的时候一起打包在Tool目录下。

  • Images list

    表4-4

    Offset Image所在目录
    GCIS.bin 0x000000 project\image\output\images\ GCIS.bin
    IPL.bin 0x140000 project\image\output\images\IPL.bin
    IPL_CUST.bin 0x200000 project\image\output\images\IPL_CUST.bin
    u-boot_spinand.xz.img.bin 0x2C0000 project\image\output\images\ u-boot_spinand.xz.img.bin
  • Burning Steps

    • Step1. 执行ISP tool。并且关闭UART terminal,否则可能无法正常'Connect'。

      图4-8

    • Step2. 选择SPI tab, 点击'More' 并且选择类型为'SPINAND'。

      图4-9

    • Step3. 加载烧录文件并点击'Connect'。

      图4-10

    • Step4. 加载image "GCIS.bin",并点击'Run'

      注:需要勾选' erase all chip'

      图4-11

    • Step5. 加载 image "IPL.bin", 取消'Erase Device'选项, 设置'Base shift 'at 0x140000。

      图4-12

    • Step6. 加载image "IPL_CUST.bin", 设置'Base shift 'at 0x200000。

      图4-13

    • Step7. 加载image "u-boot_spinand.xz.img.bin" , 设置'Base shift 'at 0x2C0000。

      图4-14

    • Step8. 重启EVB板子,关闭工具。


4.3. Burning code by SD卡

  1. 制作SD卡软件升级包,在3.3 编译SDK(ALKAID)编译好image的基础上,执行如下命令:

    # cd $/{Alkaid}/project
    
    # ./make_sd_upgrade_sigmastar.sh
    

    (在出现的提示中全部输入”y”)

  2. 将{Alkaid}\project\image\output\images中的如下两个文件拷贝到SD卡:

    • SigmastarUpgradeSD.bin

    • upgrade_script.txt

  3. 将SD卡从PC端弹出并插入到板子的卡槽中,板子上电开机,长按回车,进入bootloader command line,执行如下命令进行SD卡升级:

    # sdstar
    

    PS:可以通过如下命令设置环境变量,以后只要有SD卡和升级包即可自动升级,不用再敲升级命令: setenv sdautoupgrade 1;saveenv


4.4. USBDownloadTool 2.0 使用说明(ufu升级)

在 USBDownloadTool 2.0 中,延续 1.0 版本支持三种升级方式:空片升级、u-boot 升级和kernel下利用usb gadget驱动升级。1.0 版本中 usb gadget升级只支持UVC,采用 uvc XU command来通知板子进行固件升级。为了更具通用性,2.0 版本扩展到任意的 usb gadget驱动,通过默认端点(EP0)发送自定义的特殊setup command来通知板子升级。而空片升级、u-boot升级方式与1.0 版本完全相同。无论是哪种升级方式,最终都是通过 u-boot中的 UFU command来进行的,因此首先要在u-boot中开启对gadget mass storage driver和ufu command的支持。具体方法请参照下列步骤。

4.4.1. u-boot 开启 UFU 支持

menuconfig -> 
    Command line interface ---> 
            USB commands --->

按照下图将三项选上:

注意:图中红框选项,如果选择 Auto run ufu command in boot,那么进入 u-boot 就会跑进ufu 停住,等待升级。此项用在空片升级才需要选,正常情况是不需要选上,否则会进不到 kernel。

4.4.2 升级操作步骤

  1. 准备升级

    首先, 按照上图将 USBDownloadTool、 u-boot.bin、 usb_updater.bin放入到编译好的image文件夹中,然后用USB线将板子接到PC 上就可以了。

  2. 空片升级

    按照上面步骤1 准备好升级环境之后,USBDownloadTool 就可以进行空片升级。空片升级,即当 nor flash/nand flash/emmc 为空片时,板子 ROM 启动后会进入 USB boot mode(EVB 板也可以通过跳线强制进入 USB boot) ,此时将板子通过 USB 线接到 PC 上, USBDownloadTool 会检测到 mass storage 设备。双击运行 USBDownloadTool.exe,然后点击"Upgrade Firmware",USBDownloadTool 会先后将 usb_updater.bin 和 u-boot.bin 加载到板子Dram中运行,这里u-boot.bin在编译时就选择了"Auto run ufu command in boot",因此会自动跑进ufu command中,然后USBDownloadTool检测到板子跑进uboot ufu模式以后,就自动下发升级,等待升级完成就行了。

  3. U-BOOT 下升级

    同样按照上面的步骤1 方法准备好升级环境之后:

    1. 板子启动进入 u-boot命令行,执行以下两条命令(此处设置的env 是为了让板子重启之后能跑进ufu模式) :

      setenv ota_upgrade_status 1 
      saveenv
      
    2. 重启,此时 u-boot将进入ufu模式停住,等待升级,如下图:

    3. 双击运行USBDownloadTool.exe,然后点击"Upgrade Firmware"等待完成升级就行。

    4. 升级完成,注意清除上面设置的env,然后重启, 否则将会再次进入ufu command。清除env,执行:

      setenv ota_upgrade_status 0 
      saveenv
      
  4. UVC升级

    UVC 升级是在板子运行在 linux kernel 时,利用 usb gadget uvc 驱动来升级。当板子端device 跑的是 UVC function 时,通过 USBDownloadTool 下发自定义 XU command,设置ota_upgrade_status为1,然后重启,将会在u-boot中进入 ufu模式,等待USBDownloadTool下发升级。

    同样按照上面步骤1 方法准备好升级环境:

    1. XU command修改

      在 UVC 应用端程序中添加相应的 XU command,以支持 ota 升级的处理:

      system("/etc/fw_setenv ota_upgrade_status 1");
      

    2. 板子端 UVC 应用程序运行起来,在 PC 端能看到 uvc camera 设备后,双击运行USBDownloadTool.exe,然后点击"Upgrade Firmware",此时 USBDownloadTool将会一直等待板子端进入u-boot ufu 模式;

    3. 重启板子,将进入 u-boot ufu模式,USBDownloadTool检测到后,就会自动下发升级,等待升级完成。

  5. 扩展升级

    当板子运行在 linux kernel 或者 RTOS 时,针对不同的应用需求,device 可能是不同的function,仅仅支持 uvc 升级显然不能完全满足需求。因此在 2.0 版本中,USBDownloadTool进行了扩展, 以支持更多场景下的升级。 默认情况下, USBDownloadTool还是首先检测device是不是uvc,如果是uvc,就跟上面uvc升级步骤一模一样;如果不是uvc,才会使用到扩展升级。为了支持扩展升级,USBDownloadTool将会通过 EP0下发自定义的 setup command来取代 XU command,通知板子进行升级。 (注:特殊的 setup command 已添加到 usb gadget driver 中,须更新到相应版本,才能进行升级。 ) 同上步骤1 ,准备好升级环境:

    1. 双击运行USBDownloadTool.exe,点击"Upgrade Firmware",此时USBDownloadTool会检测是不是uvc,如果不是将弹出选择窗口如下图:

    2. 然后在choose device对话框选择对应的 device,点击 OK,USBDownloadTool将会下发自定义setup command到板子端; 点击cancel则不会下发。 如果板子端支持该command,那么USBDownloadTool就会一直等待板子端进入u-boot ufu模式;如果不支持,则不会有动作;

    3. USBDownloadTool检测到后,就会自动下发升级,等待升级完成就行了。


5. 常见异常处理

5.1. 连接ISP tool时,提示”Connected, but no SPI flash found”

这种异常是针对板子中已有程序的情形。

5.2. 解决方法

进入boot命令行,执行go 0x10,让程序跑死,然后再连接ISP tool,如下图所示: