0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于多核DSP的BootLoader程序的实现

电子工程师 来源:电子技术应用 作者:刘慧,林海虹,刘 2021-06-03 17:48 次阅读

DSP芯片的BootLoader程序用于实现用户程序上电自举,它有多种工作方式。上电自举就是将用户存放在片外的非易失性、慢速的存储器中的程序装载到片内易失的、高速的存储空间中,以保证用户程序在DSP核内的高速运行。

多核DSP是指由多个独立的DSP子核集成的DSP芯片,且所有DSP子核共享一套片外总线。由于每个DSP子核内部都有其自身独立的掩模BootLoader程序,当DSP芯片上电或复位时所有DSP子核都将自行启动自身独立的BootLoader程序,实现用户程序的上电自举。

所以,多核DSP的BootLoader程序的实现方法与单核DSP的BootLoader程序的实现方法有较大的差异。为此,本文立足于实践,以双核DSP- TMS320VC5421的16位并行EPROM的BootLoader程序的工作方式为例,详细阐述了多核DSP的BootLoader程序的实现方法。

1 BootLoader程序简介

1.1 BootLoader程序的四种工作方式

一般的DSP都采用常见的BootLoader程序工作方式来实现用户程序的上电自举:

处理器通信口(主端口)HPI方式--通过DSP芯片与PC机或DSP芯片与其它DSP芯片之间的主机通信端口实现上电自举;

8位或16位并行EPROM方式--通过DSP内核的DMA通道实现上电自举;

8位或16位并行I/O方式--通过DSP芯片的片外并行I/O接口实现上电自举;

8位或16位串行口方式--通过DSP芯片的串行端口实现上电自举。

在以上四种工作方式中,最常用的是16位并行EPROM方式。即在DSP芯片上电或复位时,通过DMA通道将存储在核外EPROM中的程序以16位形式存储到核内的程序空间中。

1.2 16位并行EPROM方式的Boot表

各种方式的BootLoader程序都有其固定格式的Boot表,用来实现用户程序的上电自举。16位并行EPROM方式的Boot表如表1所示。表中的第1表项存放BootLoader程序工作方式控制字,用于DSP芯片上电或复位时确认该Boot表是否为16位并行EPROM工作方式的Boot表。该表项内容为10AAH,表示DSP内核认为该Boot表是16位并行EPROM工作方式的BootLoader程序的Boot表;

否则DSP内核认为该Boot表不是16位并行EPROM的方式的Boot表;第2表项存放DSP特殊寄存器SWWSR在上电或复位时被赋予的初始化数值;第3表项存放DSP特殊寄存器BSCR在上电或复位时被赋予的初始化数值;第4表项存放用户程序将要被存放在DSP核内程序空间的页地址;第5表项存放用户程序将要被存放到DSP核内程序空间的页内偏移地址;

从第6表项开始依次存放用户程序第m段代码的长度N。用户程序第m段代码将要被存放到DSP核内程序空间的页地址,用户程序第m段代码将要被存放到DSP核内程序空间的页内偏移地址,用户程序第m段代码的第1个字,第2个字,……,第N个字;

Boot表的最后表项存放Boot表结束字0000H,表示Boot表到此结束。因此DSP内核要实现BootLoader程序,在上电复位后首先要申请到片外数据、地址总线的控制权,然后再根据Boot表完成用户程序上电自举过程。

1.3 16位并行EPROM工作方式Boot表的生成

所有BootLoader程序所需的Boot表的数据结构都是通过执行包含-v548参数的链接命令和Hex500转换命令的程序形成的。在链接过程中确定用户程序和数据的存放地址,在Hex500转换过程中定义BootLoader程序的工作方式和用户程序执行的入口地址等。

为了生成16位并行EPROM方式的Boot表首先,在链接程序时必须设置-v548选项;然后使用TI公司DSP开发工具自带的HEX500.EXE文件,根据用户的COFF格式的代码生成Boot表中的相应内容。

HEX500.EXE可执行文件一般使用以下几种参数

(1)*.out :用户的COFF格式的程序;

(2)-e :确定用户程序的入口点;

(3)-a :以ASCII形式,根据用户的。out文件输出对应的HEX文件;

(4) -Boot实现用户程序的装载;

(5) -bootorg :确定生成哪种形式的Boot表;

(6) -memwidth:确定引导方式的位数;

(7) -O *.hex:输出的HEX文件的名称。

例如:

hex500 ti.out /根据ti.out文件生成Boot表/

-e 0x4000 /用户程序的入口点为0x4000/-a /以ASCII形式输出HEX文件/-Boot / 装载用户的程序ti.out/

-Bootorg PARALLEL/生成并行EPROM方式的Boot表/-memwidth 16 /生成16位的Boot表/

-o ti.hex /生成的HEX文件名为ti.hex/

执行完该HEX500.EXE命令后,系统会创建一个文件名为ti.hex的ASCII文件,然后用户根据ti.hex文件内容对EPROM进行编程就能产生上述的16位并行EPROM工作方式的Boot表。

2 多核DSP的BootLoader程序的实现

目前TI公司已经不再局限于生产单核DSP。为了提高用户程序运行的效率,TI公司又推出了2核、4核等多核DSP。在实现多核DSP上电自举时,每一个子核都需要申请片外总线的控制权。对于单核DSP而言,只有一个DSP内核,对应一个BootLoader程序,DSP核可以永远拥有片外总线的控制权。

但对于多核DSP而言,由于只有一套片外总线,所以片外总线的控制权不允许也不可能永远被其中的某一个DSP子核所拥有。因此,多核DSP需要片外总线仲裁机制,以避免片外总线冲突。

下面以双核DSP-TMS320VC5421的16位并行EPROM方式的BootLoader程序实现过程为例,详细阐述多核DSP的BootLoader程序的实现。

2.1 TMS320VC5421结构简介

TMS320VC5421 16位定点双核DSP,它集中了早期TMS320C54X系列DSP的优点,并提供了许多新的功能。其内部结构与TMS320C54X系列的其它款式DSP有很大的不同,其简单结构框图如图1所示。

由于每个DSP子核的工作频率是100MHz,所以它的工作速率可达到200MIPS,且它的每一个DSP子核都具备单核DSP(如TMS320VC5402)的所有特性。2.2 TMS320VC5421的16位并行EPROM工作方式的BootLoader程序的选择

TMS320VC5421的两个DSP子核在DSP芯片上电或复位时,能否启动各自的BootLoader程序以完成上电自举功能,是由每个子核自身的XIO和GPIO0/ROMEN两个管脚决定的。在DSP芯片上电或复位时,每个DSP子核自动检测自身的XIO和GPIO0/ROMEN两个管脚,如果对应的XIO和GPIO0/ROMEN两个管脚都为高电平则启动自身的BootLoader程序完成用户程序的上电自举。

每个DSP子核启动BootLoader程序后,采用哪一种BootLoader程序的工作方式是由各自的GPIO1管脚的状态和各自以DMA方式从核外数据空间0000H地址单元读入的数据决定的:检测GPIO1管脚,如果GPIO1管脚为高电平,则采用串行口EEPROM的BootLoader工作方式,否则采用并行EPROM的BootLoader工作方式。

若DSP子核的DMA通道读入核外数据空间0000H单元中的数据为10AAH,则采用16位并行EPROM的BootLoader工作方式;若读入的数据为xx08H或xxAAH则采用8位并行EPROM的BootLoader工作方式。否则将重新判断GPIO1管脚的电平,进入死循环。2.3 TMS320VC5421的BootLoader程序片外总线冲突的解决

DSP核的BootLoader程序总是在DSP核上电或复位时启动,且一启动BootLoader程序,对应的DSP核就要申请核外的总线控制权。因此为了避免多核DSP的各个DSP子核启动BootLoader程序时引起的片外总线冲突,可通过控制每个DSP子核的复位过程,使每个DSP子核在不同的时间内启动自身的BootLoader程序来解决片外总线冲突的问题。

为了实现两个DSP子核复位过程的分离,应采用如图2所示的DSP子核复位过程控制方法。

由于TMS320VC5421中A核拥有倍频的锁相环电路,所以首先复位A核,启动A核的BootLoader程序,实现A核的用户程序上电自举。然后再由A核的用户程序控制B核的复位过程,启动B核的BootLoader程序,实现B核的用户程序上电自举。

在A核的BootLoader程序执行完后,A核就会执行自身的用户程序代码。A核的用户程序代码释放片外总线的控制权,并且控制B核的复位管脚,促使B核启动自身的BootLoader程序。如果此时A核中的用户代码又申请片外总线控制权或正在使用片外总线,就会造成片外总线冲突。解决此冲突的办法有如下两个:

粗略估计B核的BootLoader程序执行时间,在A核的有效程序代码前加一个延迟程序。

在A核的有效程序代码前加入一个死循环程序,当B核BootLoader程序执行完后,B核通知A核,A核就跳出这个死循环程序,开始执行自己的有效代码。

2.4 TMS320VC5421的16位并行EPROM工作方式的BootLoader程序的编程实现

首先设计一个简单的电路图,在DSP的A_XF和B_XF两个管脚分别连接一个发光二极管,A核以2Hz的频率点亮发光二极管,B核以10Hz的频率点亮发光二极管。将128K的FLASH?SST39VF400A?分成两页,每页为64K。FLASH的页的选择由TMS320VC5421的A_BDXO管脚控制。当A_BDX0为低电平,即FLASH的A16地址线为低电平时,选中FLASH的第一页,由FLASH的A0~A15地址线选择页内地址,用于存放A核的16位并行EPROM工作方式的Boot表。当A_BDX0为高电平,即FLASH的A16地址线为高电平时,选中FLASH的第二页,由FLASH的A0~A15地址线选择页内地址,用于存放B核的16位并行EPROM工作方式的Boot表。

1片外总线冲突的解决

估算B核执行BootLoader程序所需的时间后,在A核的用户有效程序之前,加一段延迟程序。

延迟的时间计算如下:

TMS320VC5421DSP的DMA通道从片外数据空间读取一个字到片内数据空间,需要7个指令周期时间。

统计用户程序大小?将对应Boot表中的所有段的大小相加?N1+N2+...=N。

延迟的时间为N×7=7N个指令周期。

由上面所述的方法可知,只需在开始执行A核的有效程序之前加一段延迟7N个指令周期的代码即可。

(2)生成Boot表

CPU_A来说,以A核程序流程图建立一个项目Ati.msk。产生Ati.out文件后,进入该目录的DOS环境,键入:

hex500 Ati.out-a-e 0x4000h-Boot-Bootorg PARALLEL-memwidth 16-romwidth 16-o Ati.hex

生成A核的16位并行EPROM工作方式的Boot表。

对CPU_B来说,同样以B核程序流程图建立一个项目Bti.msk。产生Bti.out文件后,进入该目录的DOS环境,键入:

hex500 Bti.out-a -e0x4000h-Boot-Bootorg PARALLEL-memwidth 16-romwidth 16-o Bti.hex

生成B核的16位并行EPROM工作方式的Boot表。

在实现双核DSP的上电自举后,A核和B核的用户程序将会被存放在核内程序空间的不同页面上。如从DMA的角度观看:A核的用户程序将被存放在A核的程序空间的第0页上;B核的用户程序将被存放在B核的程序空间的第2页上。因此A核的Boot表不需要修改,而B核的Boot表中的所有存放页地址的表项中的内容要更改为2。

(3)FLASH编程实现

根据FLASH芯片的控制时序,编写一个简单的DSP程序,用于将A核的Boot表写入FLASH的低64K,将B核的Boot表写入FLASH的高64K。

3上电试验结果

将电路上电后,A核控制的发光二极管开始闪烁,B核控制的发光二极管也开始闪烁,且A核发光二极管闪烁频率要低于B核发光二极管闪烁频率。由此现象可得出?A核与B核的BootLoader实现成功,未产生片外总线冲突;A核以2Hz的频率点亮发光二极管,B核以10Hz的频率点亮发光二极管。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7687

    浏览量

    344388
  • 芯片
    +关注

    关注

    447

    文章

    47819

    浏览量

    409193
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162003
  • Boot
    +关注

    关注

    0

    文章

    142

    浏览量

    35256
收藏 人收藏

    评论

    相关推荐

    STM32案例:BootLoader是怎么跳到App

    BootLoader项目程序和App项目程序是分开的,所以需要分别搭建对应的项目工程文件,分开搭建文件是为了好配置,同时也是方便对项目进行管理。
    发表于 03-04 09:35 314次阅读
    STM32案例:<b class='flag-5'>BootLoader</b>是怎么跳到App

    请问IMC101T-038是否支持bootloader下载程序

    想请问一下,038这款MCU是否支持bootloader下载程序呢?现在用这款芯片作为内置的风机驱动板,但用户后期想升级程序,请问一下可以怎么实现呢?如果这个
    发表于 01-23 07:07

    数字化应用中的多核DSP(下)

    DSP是对数字信号进行高速实时处理的专用处理器。在当今的数字化的背景下,DSP以其高性能和软件可编程等特点,已经成为电子工业领域增长最迅速的产品之一,人们对其性能、功耗和成本也提出了越来越高的要求,迫使DSP厂商开始在单一矽片上
    的头像 发表于 10-31 17:06 374次阅读

    数字化应用中的多核DSP(上)

    DSP是对数字信号进行高速实时处理的专用处理器。在当今的数字化的背景下,DSP以其高性能和软件可编程等特点,已经成为电子工业领域增长最迅速的产品之一,人们对其性能、功耗和成本也提出了越来越高的要求,迫使DSP厂商开始在单一矽片上
    的头像 发表于 10-31 17:04 321次阅读

    mm32-2nd-bootloader技术白皮书(5)——编译可在QSPI Flash上运行的程序

    mm32-2nd-bootloader技术白皮书(5)——编译可在QSPI Flash上运行的程序
    的头像 发表于 10-24 16:14 232次阅读
    mm32-2nd-<b class='flag-5'>bootloader</b>技术白皮书(5)——编译可在QSPI Flash上运行的<b class='flag-5'>程序</b>

    STM32F09x不使用BOOT脚实现System Bootloader升级代码

    电子发烧友网站提供《STM32F09x不使用BOOT脚实现System Bootloader升级代码.pdf》资料免费下载
    发表于 09-25 15:08 1次下载
    STM32F09x不使用BOOT脚<b class='flag-5'>实现</b>System <b class='flag-5'>Bootloader</b>升级代码

    基于Tricore架构的RTThread多核实现

    在《基于Hightec+TC375TP的RT-Thread移植详解 》一文中,基于Tricore实现了单核RTThread的移植。最近,花了些时间完成遗留的任务:基于Tricore的多核移植。目前
    的头像 发表于 09-12 18:40 509次阅读

    常用的Bootloader安全机制的设计

    image校验我们也常叫镜像校验,Bootloader程序可以对从外部存储器中读取的应用程序镜像进行校验,以确保其完整性和正确性,常见的镜像校验方式包括CRC、哈希值等。
    发表于 08-28 09:17 155次阅读

    在没有Linux操作系统的单片机中为什么还要用Bootloader

    Bootloader”俗称“引导加载程序”。在我们狭义上说的“Bootloader”是特指嵌入式设备中的引导程序,但是从广义的角度上来说,PC机中也存在“
    发表于 08-14 14:53 427次阅读
    在没有Linux操作系统的单片机中为什么还要用<b class='flag-5'>Bootloader</b>?

    单片机BootLoader与APP如何合并

    嵌入式固件一般分为BootLoader和App,BootLoader用于启动校验、App升级、App版本回滚等功能,BootLoader在cpu上电第一阶段中运行,之后跳转至App地址执行应用
    的头像 发表于 07-25 11:29 976次阅读
    单片机<b class='flag-5'>BootLoader</b>与APP如何合并

    想要自己实现一个bootloader,APROM中程序如何实现跳转,中断向量表如何设置?

    我要自己实现一个bootloaderbootloader在M487的APROM里面,APP也在APROM里面,如何实现bootloader
    发表于 06-27 08:39

    多核CPU的启动方式

    多核 CPU 的启动方式 嵌入式系统的启动的基本流程是先运行 bootloader ,然后由 bootloader 引导启动 kernel,这里无论启动的是 rt-thread 或者是 linux 原理都是一样的。 上电后所有
    的头像 发表于 06-22 10:04 1152次阅读

    聊聊一些常用的Bootloader安全机制的设计

    不管是玩单片机还是嵌入式linux,基本上都会接触到bootloader,所以bootloader程序也是一个关键的组件,进行硬件初始化,应用程序的合法性、完成性检测、升级功能等等都与
    的头像 发表于 06-11 09:51 400次阅读

    mm32-2nd-bootloader技术进阶设计:实现Ymodem更新代码

    前文中实现了一款简单的 2nd Bootloader,能够跳转执行存储在 QSPI Flash 中的应用程序,但 2nd Bootloader 如果仅仅只是用于跳转执行
    的头像 发表于 06-09 09:28 877次阅读
    mm32-2nd-<b class='flag-5'>bootloader</b>技术进阶设计:<b class='flag-5'>实现</b>Ymodem更新代码

    STM32H7实现BootLoader内SDRAM的初始化注意事项

    Function Implementation:在 ArtPi 的环境下,实现一个简单的 BootLoader,该 BootLoader 实现了 QSPI 和 SDRAM 功能的初始化
    的头像 发表于 06-07 15:51 2234次阅读
    STM32H7<b class='flag-5'>实现</b><b class='flag-5'>BootLoader</b>内SDRAM的初始化注意事项