Using VxWorks BSP with Zynq-7000 AP SoC译文

概述

本文XAPP1158介绍了在Zynq-7000上运行VxWorks 6.9的技术细节。

介绍

Zynq-7000在不使用JTAG的情况下,通过PS完成PS和PL的初始化和配置。配置过程由两部分完成:

  • 上电复位或者软复位之后,首先执行BootROM中的固化代码
  • PS的设备配置单元(Device Configuration Unit),它控制JTAG调试访问;提供AES、HMAC和PACP等模块的接口,用来实现PL配置和数据解密;

PS可以选择以安全或者非安全模式完成PS和PL的配置。PL的配置还可以由外部主机通过JTAG接口完成。

Zynq-7000的初始化包括以下几个阶段:

Stage 0: BootROM

上电复位或者软复位,从BootROM取第一条指令开始执行。

为了安全起见,BootROM执行过程中,JTAG被禁用。

BootROM包括NAND,NOR,Qual-SPI,SD和PCAP的驱动,不包含DDR和其他外设初始化。

上电复位时,芯片采样一组BOOT_MODE配置引脚的电平,并将采样结果保存到BOOT_ROM寄存器中,BootROM据此选择从哪个启动媒介加载FSBL。

BootROM支持加密和非加密的FSBL镜像文件,由此决定安全启动或者非安全启动。安全启动的解密和校验,通过PL内置的AES-256或者SHA-256硬核实现,因此,如果要支持安全启动,PL必须上电。

Stage 1: FSBL

具体介绍参考UG821

如果启动媒介支持XIP,则FSBL第一阶段通过XIP方式执行;如果不支持,则由BootROM将FSBL第一阶段代码(不超过192KB)加载到OCM执行。

FSBL负责实现如下功能:

  1. UG821明确要求的PS配置;
  2. 加载bitstream文件到PL;
  3. 加载SSBL或者VxWorks系统镜像到DDR;
  4. 将控制权移交给SSBL或者VxWorks;

FSBL执行过程中,通常I/D-Cache和MMU被禁用。

Stage 2: VxWorks Bootloader

又称为SSBL(second stage boot loader),负责将VxWorks系统镜像加载到DDR并开始执行,可选。

VxWorks移植

配置和创建VxWorks bootloader

操作步骤详见原文,不予赘述。 

配置和创建VxWorks Kernel Image

操作步骤详见原文,不予赘述。  

创建和调试Hello World应用程序

操作步骤详见原文,不予赘述。  

访问PS侧的外设

Zynq-7000系列SoC使用ARM Cortex-A9处理器,每一个外设都是memory mapped。Zynq-7000的地址映射表在UG585中详细列出。

#include <stdio.h>
#include <sys/mman.h>

#define GPIO_BASE 0xE000A000
#define GPIO_DIRM_0 0x00000204
#define GPIO_OEN_0 0x00000208
#define GPIO_DATA_0 0x00000040

int main(void)
{
    int val = 0xffffffff;

    printf("Hello World!\n");

    sysOutLong(GPIO_BASE + GPIO_DIRM_0, 0x00000400);
    sysOutLong(GPIO_BASE + GPIO_OEN_0, 0x00000400);

    while (1) {
        sysOutLong(GPIO_BASE + GPIO_DATA_0, val);
        sleep(1);
        val ^= 0xffffffff;
    }

    return 0;
}

 

访问PL侧的外设

PS和PL之间的两组master GP AXI接口,各自独占1GB地址空间(详见UG585),访问PL侧的外设与访问PS侧外设的区别在于:

首先必须加载bitstream到PL,其中包括AXI_GPIO外设;

其次,必须修改VxWorks BSP,允许访问为PL侧外设分配的地址段;

 

posted on 2022-06-12 18:49  者旨於陽  阅读(699)  评论(0编辑  收藏  举报

导航