当前位置:首页 > 嵌入式 > 嵌入式硬件

  1 引言

  DSP芯片的Bootloader程序用于上电时将用户程序从外部非易失性、慢速存储器或外部控制器中装载到片内高速RAM中,保证用户程序在DSP内部高速运行,TI公司的C55x系列DSP芯片提供多种装载模式,主要包括HPI引导装载、串行E2ROM引导装载、并行引导装载、串行口引导装载、I2C总线E2ROM引导装载等,通常使用的是并行引导装载模式,该方式引导速度快实现简单,但是体积和功耗也较大,随着串行接口存储设备容量的提高,串行引导方式体积小、功耗低的优势便显现出来了,所以使用ARM的串行接口对DSP进行引导装载,不仅能省去存储芯片,而且利用ARM的ISP功能,可以根据需要改变用户程序,有利于系统的维护和升级。

  本文以TMS320VC5509A芯片引导装载为例,详细介绍了利用ARM通过I2C串行引导方式来实现程序的引导装载,其他引导过程可参考相关技术资料[1]。

  TMS320VC5509A是TI公司一款16位定点低功耗DSP芯片,其指令周期最快为5ns,片内拥有128×16k高速RAM,性价比很高,被广泛用于嵌入式手持设备、通信、数据采集等领域。

  T

I公司的DSP芯片出厂时,在片内ROM中固化有引导装载程序(Bootloader),其主要功能就是将外部的程序装载到片内RAM中运行,以提高系统的运行速度,C55x系列DSP其Bootloader程序位于片内ROM空间的0xFF0000-0xFF8000处,进入Bootloader程序后,程序先对DSP进行初始化,配置DSP的堆栈寄存器、中断寄存器和DSP状态寄存器,保证在引导装载用户程序时不会被中断,从而引导程序加载失败。

  由于DSP可以通过自举表对寄存器进行修改,需要注意在Bootloader程序运行时,尽量不要修改Bootloader程序配置过的中断控制寄存器,否则会导致不可预料的后果。

  2.1 I2C引导模式硬件连接

  为了通过I2C总线来实现对DSP引导装载,通常情况是选择具有I2C总线接口的E2ROM,电路框图如图1所示,其中GPIO0-GPIO3是用来选择Bootloader引导模式,当DSP复位后对这4个管脚电平采样,根据不同的组合进入到对应的Bootloader程序,表1列出了GPIO0-GPIO3的管脚不同状态的组合以及对应的Bootloader引导方式。SDL和SDA分别为I2C的时钟和数据线,其上拉电阻的大小取决于所连接I2C设备的多少[2]。

  

  

  如果通过I2C总线对DSP实现引导装载,对存储数据的I2C设备有如果几点要求:

  (1)该设备首先必须兼容Philips的I2C总线规范V2.1,工作在从设备模式,并且其从设备地址为0x50。

  (2)设备内部使用两个字节寻址,即在接收到主机写命令后,其后接收到的数据是16位的地址数据。

  (3)对设备读取时,相关设备必须支持自动寻址增量,即每读一次,其内部地址指针自增1,保证程序按顺序读出。

  常用的I2C接口E2ROM有ST公司的M24系列及Philips的PCF85系列的E2ROM,根据程序大小选择相应的芯片,需要注意的是I2C引导模式最多支持64kB的数据。

  在I2C引导模式运行时,DSP作为主设备来控制I2C总线的时钟,对于DSP来说,SCL必须满足根据方程(1)所得到的速率,而I2C引导模式支持的最高时钟速率为400kHz,所以如果想利用I2C引导模式,DSP上电时输入时钟就不能大于12MHz。

  SCL(高)=SCL(低)=15×(DSP输入时钟周期) (1)

  2.2 I2C引导模式数据存储方式

  为了能正确地将数据从外部存储器搬移至DSP内部,用户程序需要将数据按照一定格式存储在E2ROM中,按照这些格式存储的数据便是自举表(Boot table),自举表是Bootloader程序能正常运行的保证,只有将数据按照自举表的要求存储,用户程序才能被搬移到DSP内部正常运行,在自举表中除了用户数据外还需要一些Bootloader控制数据,如程序入口地址(entry point address)、寄存器配置(register configurations)和可编程延迟(programmable delay)等,自举表的结构如图2所示。

  

  其中程序入口地址在将用户程序搬移至DSP内部后,用户程序从该地址处开始运行,通常情况是中断向量表的reset处,在Bootloader搬移数据之前,如果需要可以改变某些寄存器的值,如DSP的clock配置寄存器、EMIF配置等,通过自举表配置这些寄存器后,需要一定时间才能正常工作,否则会导致引导程序失败。延迟计数器是让Bootloader推迟相应的CPU周期再进行数据搬移,确保引导程序正常工作,由于DSP是采用分段格式来组织数据的,如代码段、数据段和用户自定义数据段等,所以生成的自举表也是按照对应格式来建立的分段存储,这样有利于程序维护,实现模块化设计。

  在自举表的最后,是连续的4个字节的全零数据,其目的是为了告诉DSP程序引导完成,可以传至程序入口执行,同时DSP也发出指示给外部存储设备告知引导结束,在I2C模式中,作为主机接收设备的DSP信号将会在接收到结束标志后在数据总线上给出停止标志,用来结束数据传输。

  要建立自举表,可以利用TI提供的HEX转换程序(HEX55.exe),将生成的连接文件转换成用于存储器的数据格式[1]。首先,需要建立一个CMD(链接命令文件linker command file)文件,输入需要的链接选项,HEX55利用该文件提供的各种选项来转换文件,下面是一个为I2C引导方式建立的CMD文件和其选项以及具体含义:



通常情况下还需定义采用某种方式如-Serial8、-parallel16等选项,表示采用何种Boot方式从而生成对应的存储格式,由于采用了I2C模式来引导,所以这些选项可以不使用,另外还可以使用-reg_config和-delay选项,分别来设置需要改变的寄存器值以及需要延迟的CPU周期数,最后需要注意的是HEX55程序要使用v2.1及后续版本,早期版本生成的自举表不能正确引导程序。

  3 ARM端设计

  上面介绍了利用I2C接口的E2ROM来实现引导装载的硬件连接和需要的数据存储形式,实际利用ARM自身的I2C控制器,将自举表存储在ARM的FLASH中,并且让ARM按照I2C引导模式中E2ROM的时序向DSP发送对应的数据,实现对DSP的引导装载,所选用的ARM是Philips的LPC2138。LPC2813是基于32b ARM7的内核,内部拥有多达512k的高速FLash和32k的静态RAM,其工作频率可达60MHz,其I2C总线控制器支持I2C所有工作模式,这些在用于引导DSP时就不用使用端口来模拟I2C时序,使用十分方便,引导DSP时,只要ARM按照对应的顺序来发送数据,就能实现DSP的程序引导,使用ARM引导时,只需将图1中的SCL和SDA分别与ARM的SCL和SDA连接即可。

  Bootloader使用I2C读取数据时其时序如图2所示。引导开始后,DSP首先会使用随机读取指令(random read command)从0x0000地址处读取数据,该读取指令由一个虚假的写指令和当前地址读取指令(current address read command)组成,ARM正确响应该指令后,DSP便继续采用当前地址读取指令读取剩余数据。

  在LPC2138中,I2C总线有专门的控制器,并且每次接收到数据后对应的I2C状态寄存器会以不同的代码来表示当前I2C总线状态,用户可以根据不同的状态来进行下一步的操作[3],整个引导过程就是ARM根据不同的总线状态来发送或接收相应的数据,使用ARM引导DSP程序加载时,ARM作为从设备工作,在两种工作模式之间切换,分别为从设备接收(slave receiver和从设备传输(slave transmitter)。

  下面介绍ARM端程序的运行状况,程序中首先通过I2C地址寄存器(I2ADDR)将ARM的从设备地址置为0x50,再利用I2C置位控制寄存器(I2CONSET)将其中的I2EN和AA置1,这样ARM就工作在从设备模式,一旦I2C总线接收到有效数据,程序就进入到中断服务程序中运行,用户程序根据I2C状态寄存器(I2STAT)的值判断当前状态从而进入下一步操作,图3为中断服务程序工作流程。

  图3中State代表接收到数据后,I2C状态寄存器中的值,不同的值代表总线上可能出现的各种状态。0xA0代表程序收到的是start或是stop标志,返回主程序继续等待中断,0x60代表接收到自己的从设备地址和写命令,并返回ACK信号,Count1代表收到的写命令次数,由于整个引导过程中只能接收到一次写命令,所以只要Count大于1则接收出错,需要重新启动引导程序,利用ARM控制DSP的复位信号重新开始引导过程,直至成功引导,0x80表示ARM进入了从设备接收数据状态,并且前边已经收到了本机的设备地址,此次接收到了数据并返回ACK信号,I2DAT在从设备接收模式时存储接收到的数据,发送模式时存储待传输的数据,引导开始后,连续两次接收的数据应该为0,若并不为0,表示引导程序出错,需要复位DSP重新开始接收。

  

Count为连续两次接收数据0的计数器,一旦满足条件,将发送缓冲区的首地址取出存储在Trans_addr中,0xA8代表接收到当前地址读取命令,一旦接收到此命令,将待发送数据取出送入发送数据寄存器I2DAT,以便下一次传输时将数据送出,0xC0表示数据发送成功,而且没有收到ACK信号,意味着当前地址读取命令结束,此时将发送缓冲区地址加1,取出下一次待发送数据地址,这样便完成了1个字节数据的发送,整个引导过程一直到DSP收到自举表结束标志后停止,需要注意的是,I2C中断标志位需要通过软件清除,每次中断返回时都必须用I2C清零控制寄存器(I2CONCLR)手动清除I2C控制寄存器中的中断标志。

  按照上述方法就完成了I2C引导装载模式,用户可以在程序中加入测试程序,通过控制GPIO高低变化生成脉冲,利用示波器观察从而判断程序引导是否成功。

  4 结语

  本文提出的引导方式已经成功地应用于一款低功耗、小型户数传设备当中,免去了对外部存储器的编程,特别有利于设备的升级和维护。

  

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在下述的内容中,小编将基于用FIFO实现超声测厚系统A/D与ARM接口设计。如果这是您想要了解的内容之一,不妨和小编共同阅读这篇文章哦。

关键字: FIFO 超声测厚系统 ARM

从ChatGPT到AI手机、AI PC,AI正在各种不同型态的设备上落地。而作为几百亿台移动设备和嵌入式设备的计算核心的供应商,Arm也敏锐捕捉到了这一新的重大机遇,持续在全线的新产品中增加AI的功能和特性,助力实现设备...

关键字: ARM Cortex-X925 Immortalis G925 终端计算子系统 CSS for Client

业内消息,近日Arm公司官宣推出全新的基于Arm v9架构的CPU、GPU IP,以及设计软件工具,以帮助智能手机更好地处理人工智能(AI)任务,并加速AI应用。

关键字: ARM 芯片IP 黑鹰 超大核 Cortex-A725

最新消息,昨天北京开源芯片研究院官宣 ,2024 年 5 月 21 日开芯院通过线上会议的方式,向会员单位正式发布了全球首个开源大规模片上互联网络(Network on Chip,NoC)IP—— 研发代号“温榆河”。这...

关键字: ARM 垄断 开源 片上互联网络 温榆河

在现代汽车电子系统中,CAN(Controller Area Network)总线技术因其高可靠性、高速率及灵活性而得到广泛应用。CAN总线采用差分信号传输方式,确保信号在传输过程中的抗干扰能力。然而,在某些特殊应用场合...

关键字: CAN 总线 差分输出

据《日经新闻》报道,软银旗下英国芯片制造商Arm计划到2025年销售AI芯片。该公司专门成立一个AI芯片部门,并将在2025年春季之前制造出原型产品,并于秋季开始大规模生产。

关键字: 软银 AGI ARM AI芯片

业内消息,近日日本软件银行集团(SoftBank Group)旗下安谋国际科技公司(Arm)计划研发人工智能(AI)芯片,先成立一个AI芯片部门,目标是明年春季建立AI芯片原型产品,然后将量产工作交由代工厂制造,预估20...

关键字: ARM AI芯片

Arm CPU正在从根本上推动AI变革,并造福地球。Arm架构是未来AI计算的基石。​

关键字: ARM AI

近日,Arm推出了Arm® Ethos™-U85神经网络处理器(NPU)和Arm Corstone™-320物联网参考设计平台,旨在满足海量的数据处理和大规模计算,加速推进边缘AI的发展进程。

关键字: ARM

为了赶超云计算市场上的竞争对手,谷歌正试图通过定制的Arm服务器芯片降低云计算服务成本。

关键字: 谷歌 ARM 定制芯片
关闭
关闭