Blackfin处理器是ADI公司与Intel公司于2003年4月联合推出的一系列DSP产品,主要面向嵌入式音频、视频和通信等领域,除了具有强大的信号处理性能和理想的电源效率,还集成了32位的RISC精简指令集。ADSP-BF533是目前Blackfin系列数字信号处理器中性能最高的一款,具有600MHz的主频,双16位的MAC(乘加器)和两个40位的ALU(算术逻辑单元),4个8位的视频处理单元,8个算术寄存器,10个地址寻址单元。DSP集成了148K字节的片内RAM,并具有丰富的外部接口,如SDRAM、通用并行数据口、SPI、PPI、同步和异步串口等。
MSP430F149是工业级闪存型16位RISC MCU,具有功耗极低、片上资源丰富等特点,同样非常适合掌上设备使用。
本系统为软件无线电掌上设备平台,采用了BF533+MSP430F149的双处理器模式:B F533主要完成宽带扩频信号的快速捕获跟踪和解码功能;MSP430完成的功能包括USB控制器接口、射频控制和DSP引导、监控等,如图1所示。
图1 系统结构简图
MSP430通过USB控制器同PC机建立通信,整个系统作为一个USB设备被PC机访问。天线接收射频信号进行直接下变频,经AD转换后进入BF533。DSP程序存放在MSP430F149片内FLASH ROM中。
MSP430F149和BF533通过SPI总线连接,在解决DSP程序引导问题的同时,也实现了DSP的实时监控。
Blackfin 应用程序引导过程
开发Blackfin 应用程序的一般过程如图2所示。
图2 Blackfin 引导文件生成过程
DSP应用程序编写和调试通常在ADI公司的集成开发环境VisualDSP++下完成。在软件设计阶段,可使用硬件仿真器Summit ICE通过JTAG(边界扫描测试接口)同目标处理器连接进行调试开发。VisualDSP++会将用户应用程序代码编译生成DSP可执行文件(.DXE),并通过JTAG口装入目标处理器的内存。
在设计独立的目标系统时,必须考虑用户程序的引导方式和相应的外部存储器,通过VisualDSP++产生与存储器类型相应的引导文件(.LDR),将引导文件烧录到外部存储器中。最后,通过某种引导模式将引导文件装载到DSP内存并执行。
BF533内部有一段固化的引导程序(Boot ROM),见图3。硬件复位后进入引导进程,执行存放在Boot ROM中的引导程序。首先,通过对两个专用引导模式选择引脚BMODE[1:0]的采样,决定BF533将以何种方式装载用户应用程序代码/数据。然后,按照用户选择的格式引导应用程序并执行。
图3 Blackfin应用程序引导过程
BF533共有4种程序引导模式,表1显示了引脚BMODE[1:0]的值和引导模式的关系。
对任何一种模式,引导程序会根据模式引脚选择的外部程序存储器的类型,先读出一个10个字节的文件头(Header)。文件头由4个字节的目的地址、4个字节的传输数据数量(字节数)和2个字节的控制标志组成。如果用户程序或数据需要放在DSP内存的不同地址块,可以采用分块引导的方式来进行数据加载,每个块(Block)用不同的文件头描述。一旦所有的块装载完毕,处理器将结束引导进程,并从L1指令存储器的起始地址(0xFFA00000)开始执行放在这里的用户代码。文件头中控制标志描述了块的一些属性。图4是引导时的数据流和文件头格式。
图4 BF533的引导数据流和文件头格式
SPI引导时序
SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。将各个设备的串行时钟引脚接在一起,主设备的数据输出接从设备的数据输入MOSI(Master Out Slave In),从设备的数据输入接主设备的数据输出MISO(Master In Slave Out)。
由于MSP430和BF533的SPI口均可软件配置为主或从设备,因此通过同样的连接方法既可使BF533为主机,又可使MSP430为主机。
程序引导时,BF533是主机,串行时钟由BF533提供,监控过程中MSP430是主机,通过SPI口控制BF533,与引导时相比,硬件连接没有改变,只是MSP430和BF533各提
供一个通用IO引脚用作握手信号,用来避免MSP430在DSP忙时中断DSP。
在本系统中,BF533引导模式设为从16位串行SPI存储器引导。BF533上电或硬件复位后,SPI接口默认为主模式,并提供频率为500KHz的串行时钟。引导时序最初的几个周期是:从第一个SPI时钟周期开始,BF533在MOSI引脚上产生读SPI的串行EEPROM命令字节,其值为0x03。这个值对于SPI串行EEPROM而言,是读存储器命令。存储器应从下一个时钟节拍开始将存储器内数据串行送到BF533的MISO引脚上。由图4可知,首先送出的应该是块1的目的地址信息0xFFA00000。读出这个值之后,DSP内部会对该值进行判断,如果目的地址不是DSP内存区域内的有效地址,BF533将重复发送读SPI EEPROM命令字节并判断地址有效性这一过程。如果读入的地址有效,将会启动读存储器时序,再发送一个读SPI 串行EEPROM命令字节:先读入文件头,再读入引导内容。
设计中应特别考虑MSP430软件以确保由MSP430F149的SPI接口产生的引导时序和从EEPROM引导时的时序相同。根据笔者开发经验,BF53x系列正式版本具有相同的SPI引导时序,但测试版本芯片的SPI时序与正式版有所差异。
DSP实时监控与程序在线升级
在DSP程序运行的过程中,通常我们需要知道它的运行状况。因此需要建立一种机制用来实现对DSP内存区域的实时读写操作,即完成程序的实时监控。
在BF533应用程序设计中,设置BF533的SPI口为从模式。在引导完成之后,设置MSP430的SPI口为主模式,而引导进去的BF533用户应用程序开始执行,从而在MSP430和BF533之间建立了主从的SPI通信。
此外,MSP430通过USB接口器件PDIUSBD12连接到PC机。监控命令由PC机或键盘操作发起,MSP430响应PC机通过USB总线下发的命令或键盘命令,再根据命令类型进行操作。监控命令分为两类:
(1)PC机或键盘对MSP430的控制命令。命令通过USB总线或键盘传到MSP430,MSP430响应命令并执行相应操作。此类命令包括:升级DSP程序、下载数据到FLASH、外围控制等。
(2)PC机或键盘对DSP的控制命令。这类命令可由PC机通过USB总线或键盘操作下达到MSP430,也可由MSP430直接发起,命令接受方是DSP。此类命令主要有两个:读DSP内存区域和写DSP内存区域。命令由命令包和数据包组成,读命令包主要包括命令代码、目的地址、读出长度以及校验字。在发出读命令包后,如果收到DSP正确的响应,就发出跟读出长度相应的数据包,每发一个数据包就将收到DSP返回的一包数据。写命令包主要包括命令代码、目的地址、写入长度以及校验字。在发出写命令包后,如果收到DSP的正确响应,就将欲写的数据打包送出,如果写入成功,就会收到DSP的正确响应。
MSP430具有60K字节的片上FLASH程序存储器,除了自身程序占用的程序空间,还可空出约48K字节的空间。本系统中,这部分空闲空间用来存放待引导的DSP程序。MSP430的FLASH存储器具有分段擦除和编程功能,最小擦除单位是512(0x200)字节。其FLASH ROM除了可以用专门的开发工具进行编程操作外,还可以自编程实现DSP程序的在线升级。
结语
通过MSP430F149直接对ADSP-BF533进行程序引导和实时监控,与通常使用串行EEPROM引导相比,避免了烧写EEPROM这一中间过程,减少了电路复杂度。在同样的电路连接上既实现了引导功能,又实现了监控功能。此外,通过MSP430灵活的软件编程,还使系统具有引导时机可灵活掌握、DSP程序可在线升级等特点。