zynq双核交互(1)之zynq双核的启动

zynq双核交互(1)之zynq双核的启动

  1. zynq双核交互相关的官方相关资料如下:
    1. ug585-Zynq-7000-TRM.pdf
      1. 第6.1.10章节。
    2. xapp1078-amp-linux-bare-metal.pdf
      1. 本文档还描述了如何创建可启动的解决方案以及如何调试两个cpu。
    3. xapp1079-amp-bare-metal-cortex-a9.pdf

Zynq-7000 AP SoC提供两个Cortex-A9处理器,共享公共内存和外围设备。
双核使用的一种方式是非对称多处理(AMP)机制,它允许两个处理器运行各自的操作系统或裸机应用程序,并且可以通过共享资源对这些应用程序进行松散耦合。难点是需要注意防止cpu在共享硬件资源上发生冲突。

双核启动流程理论步骤

zynq在启动时,总是先启动cpu0.然后用cpu0来启动cpu1.在zynq启动时,BootROM(zynq内部的启动程序,对用户不可见)将CPU1置于等待事件模式让cpu1就一直等待cpu0来触发启动自己。
那么cpu0如何触发启动cpu1呢,步骤如下:

  1. cpu0向地址0xFFFFFFF0写入cpu1的程序起始地址。说白了就是告诉cpu1要你运行的程序在那个地方。
    1. 注意:写入0xFFFFFFF0的地址必须是四字节对齐的。
  2. cpu0发送SEV事件。说白了它就是那个触发cpu1运行的事件。
  3. 然后cpu1就自己跑起来了。

对程序编译不太熟悉的人可能在cpu1的程序起始地址是多少以及如何设置这这个问题上卡住。这儿就拿不带mmu的裸机程序(当然RTOS的程序在这儿可以当裸机程序理解)来说。

  1. 用sdk建立cpu1的裸机应用程序。
  2. 建立完应用程序后会发现程序种会有一个lscript.ld的链接文件,我们就是要在这个文件中设置和更改cpu1应用程序的起始运行地址。也就是向地址0xFFFFFFF0要写入的地址。修改图如下:tuocpu_ld
  3. 这个地址值设置为多少合适了?这就要涉及到自己的DDR以及OCM的内存的运行分配了。简单的说就是运行内存不重叠就行。但如何做到不重叠了?这就要涉及到fsbl程序、cpu0应用程序、cpu1应用程序三个程序的运行内存分配问题了。
    1. cpu1程序的运行内存不能跟fsbl程序的运行内存重叠。说白了,就是他俩中.ld文件中的上图说的那么地址范围不能重叠。
    2. cpu1程序的运行内存不能跟cpu0的应用程序的运行内存重叠。如果cpu0的应用程序也是裸机程序,那就和比较fsbl程序的方式一致。但如果是linux,那就可以在设备树中修改ddr的地址。
    3. 注意,上面说的fsbl程序和cpu0应用程序都是运行在cpu0上的。

启动程序如下,将它加入fsbl程序或者cpu0应用程序中,都可以启动cpu1。笔者将它放在了fsbl程序main函数中的HandoffAddress = LoadBootImage();后面。

void StartCpu1(void)
{
/* cpu1运行起始地址 */
#define CPU1_START_ADDR 0x10000000
/* 触发事件 */
#define sev() __asm__("sev")

    /* 1. 向地址0xFFFFFFF0写入cpu1运行地址 */
    Xil_Out32(0xFFFFFFF0,CPU1_START_ADDR);

    dmb();/* 等待写完成 */
    fsbl_printf(DEBUG_GENERAL,"cpu1 start \n\r");

    /* 2. cpu0发送SEV事件 */
    sev();
}

双核启动实践步骤

  1. sdk中创建cpu0应用程序。
  2. sdk中创建cpu1应用程序。
  3. sdk中创建fsbl启动程序。
  4. 按照上面所说的修改cpu1的lscript.ld链接文件中的起始运行地址。
  5. 在fsbl程序中添加上面所说的启动程序。
  6. 生成Boot.bin.添加顺序如图:
  7. 下载。看效果。笔者的双核启动测试程序链接。环境是sdk2018.3.
    Boot.bin.添加顺序如图:
  8. 下载。看效果。笔者的双核启动测试程序链接。环境是sdk2018.3.

关于技术交流

此处后的文字已经和题目内容无关,可以不看。
qq群:825695030
微信公众号:嵌入式的日常
如果上面的文章对你有用,欢迎打赏、点赞、评论。二维码

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
文档共60页。主要向初学者提供了Zynq开发的技术方向,针对不同应用给出了基本的参考文档;同时对Zynq双核AMP加载方式做了详细描述,对Zynq的fsbl启动流程做了简单介绍。章节如下: Zynq User Guide 1 介绍 4 2 快速上手指南 4 3 多核开发教程 4 3.1 AMP开发说明 6 3.1.1 快速生成amp工程 6 3.1.2 Generating Boot File 8 3.1.3 烧写程序 9 3.1.4 启动 10 3.1.5 调试 10 3.1.6 总结 11 3.2 SMP开发说明 11 4 ZC706启动代码分析 11 4.1 启动代码 12 4.2 FSBL流程(FOR AMP) 13 4.3 CPU0启动CPU1流程 14 5 程序在线烧写方案及流程 14 5.1 程序烧写需求 14 5.2 提出该需求的原因 14 5.3 程序烧写方案 14 5.3.1 BOOT.BIN组成 14 5.3.2 BOOT.BIN生成方法 15 5.4 FSBL.BIN和APP.BIN等的生成 15 5.5 制作*BIN及烧写的具体步骤 15 5.5.1 制作*bin流程 15 5.5.2 BOOT.bin制作过程 15 5.5.3 FSBL.bin和APP.bin等的生成过程 22 5.6 烧写BOOT.BIN步骤 26 5.6.1 通过SDK工具烧写步骤 26 5.6.2 通过上位机烧写软件的烧写步骤 29 5.6.3 通过串口调试助手烧写步骤 29 6 Zynq Qspi控制器 30 6.1 基本特性 30 6.2 I/O接口 31 6.3 QSPI控制器模式 33 6.3.1 I/O模式 33 6.3.2 线性地址(linear address)模式 33 6.3.3 传统(legacy)SPI模式 34 6.4 QSPI 例程 34 6.5 QSPI控制器支持访问32MB方法 35 6.5.1 Bank地址寄存器(Bank address register) 35 6.5.2 扩展地址模式(Extended address mode) 35 6.5.3 使用新写命令(New commands) 35 6.6 QSPI FLASH选择 35 6.7 作为BOOT器件考虑 35 7 µC/OS系统启动指南 36 7.1 INTRODUCTION 36 7.1.1 Software Requirements 36 7.1.2 Hardware Requirements 36 7.2 HARDWARE DESIGN 37 7.2.1 Step 1. Invoke the Vivado IDE and Create a project 37 7.2.2 Step 2. Create an IP Integrator Design 39 7.2.3 Step 3. Add and setup the Zynq processor system IP block 39 7.2.4 Step 4. Customize the Zynq block for our design 41 7.2.5 Step 5. Add the soft peripherals 45 7.2.6 Step 6. Generate HDL Design Files 47 7.2.7 Step 7. Synthesis, Implement and Generate Bitstream 48 7.3 SOFTWARE DESIGN 49 7.3.1 Step 1. Installation of the µC/OS Repository 49 7.3.2 Step 2. Generate the µC/OS BSP 50 7.3.3 Step 3. Build and Debug the Demonstration Project 54 7.3.4 Step 4. Program the AXI Timer 0 with the ucos_axitimer Driver 55 7.3.5 Step 5. Program the AXI Timer 1 with the Xilinx tmrctr Driver 58 7.4 CONCLUSION 59 8 Linux系统启动指南 59
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theboynoName

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值