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

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,性价比很高,被广泛用于嵌入式手持设备、通信、数据采集等领域。

    TI公司的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 结语

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

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭