作为信号处理芯片的主要供应商之一,Analog Devices公司(ADI)一直致力发展高性价比的产品。Blackfin系列处理器是ADI公司的最新的基于微信号体系结构的嵌入式处理器,具有高性能和低功耗等特点。利用内核中的两个MAC运算单元,750MHz的BF533处理器每秒可完成1500M的MAC,而双核的BF561处理器每秒可完成3000M的MAC。同时这两款处理器集成了大量的外围设备和处理器接口,适用于各种音频、视频、通信领域,典型应用为汽车图像系统、宽带无线系统、多媒体消费电子产品、数字视频录像机、多声道VoIP、可视VoIP、安防和监控、机顶盒、视频会议等。
图1 BF533系统框图(略)
Blackfin系列处理器介绍
BF533系统框图
该处理器的核心为16位定点微处理内核、可以实现高达750MHz的频率工作。片内存有148K,其中指令存储器为80K字节、数据存储器为68K字节,系统包含动态电源管理PLL、看门狗、JTAG、实时时钟等。另外处理器提供了丰富的外围设备,有两个SPORT接口、1个SPI接口、1个UART接口、3个PWM时钟、16个GPIO、1个Video
I/O PPI接口。
BF561系统框图(图2)
图2 BF561系统框图(略)
同BF533不同的是:这款处理器使用两个高达750MHz的Blackfin内核。两内核共享告速的L2存储器,大大提高了处理性能。EBIU都改为32位,使得它能够达到更高的性能,同时增加了一个PPI接口,可以同时处理视频的输出和输入。
显著特征
Blackfin处理器的显著特征之一,就是采用了ADI和Intel联合开发的微信号结构(MSA),这种结构采用了一个综合的信号处理和控制指令级。这样处理器就不仅是带有增强指令集的DSP,也不仅是带有两个算术逻辑单元的MCU,而是为同时运行控制指令和算法而进行优化的处理器结构。从而集DSP和MCU功能于一身,消除了传统的多个不同处理器之间相联系的复杂性。
选择uCLinux的原因及其介绍
选择uCLinux的原因
现在Blackfin处理器可以支持的操作系统有:Embedded Linux、GHS Integrity、VDK from ADI
、Unicoi Fusion RTOS 、Nucleus PLUS 、ThreadX、CMX、Live Devices 、uITRON
(API) 等。
在所有主流的嵌入式系统中,嵌入式Linux无疑占据非常重要的地位。其原因主要有:1、超强的网络功能:在当今的网络互联的时代尤显重要,Linux从来就拥有极强的网络功能,嵌入式Linux也毫不逊色;2、开放的资源使之可任意裁减,适应小巧的嵌入式系统,其裁剪后一般内核小于512K字节,内核加根文件系统及基本工具小于900K字节;3、完全免费;4、拥有全球数以千万计的共同爱好者及开发者,拥有极其丰富的资源;5、通用的Linux
API,使得开发工作可以专注于很小一部分代码的编写。
uCLinux介绍
uCLinux是一种在嵌入式领域广泛应用的Linux系统,专门针对微控制系统设计。uCLinux面向没有MMU的系统,即uCLinux不能使用处理器的虚拟内存管理技术,而采用是实存储器管理策略,uCLinux对内存的访问是直接的,所有程序中访问的都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享运行空间。每个进程在执行前,系统必须为其开辟连续的地址空间,然后全部载入主存储器的连续空间。Linux系统中通常可执行文件的格式采用cof或elf,在uCLinux上只支持
flat可执行文件格式。gcc的编译程序不能直接形成这个格式,但是可以形成cof或elf格式的可执行文件,这两种格式的文件需要通过cof2flt或elf2flt工具进行格式转换,形成flat文件。uCLinux重写了应用程序库,相对于越来越大、越来越全的glib库,uClibc对库做了精简,
uCLinux对用户程序采用静态链接的形式,这种做法会使应用程序变大,但基于内存管理的问题,也不得不这样做,同时这种做法更接近嵌入式系统的做法。uCLinux被移植到几乎所有平台,比如Motorola
DragonBall及其它 68K系列、Motorola ColdFire、ARM7TDMI及 MC68EN302、 ETRAX、Intel
i960 、PRISMA、Atari68K 、 Blackfin等等。它本身没有实时性,靠RT补丁解决。
基于Blackfin的开发平台
HHBF533开发平台
由华恒科技公司推出的HHBF533开发平台,是一款基于BF533处理器的开发套件,该套件的特色是采用了核心板与底板分离的设计,方便用户做底板的定制,核心板的尺寸仅相当于名片大小,开发上可以充分发挥想象力,设计出小体积、高性能的嵌入式产品。
图3 HHBF533开发平台的配置(略)
HHBF561开发平台
HHBF561开发平台同HHBF531开发平台基本类似,只是处理器采用双内核设计,并设计为CORE A运行uCLinux操作系统,CORE
B进行视频编解码等算法工作。
华恒同时提供了基于HHBF533平台上的MPEG4编解码算法、uClinx的视频监控、IP机顶盒的Demo。
uCLinux开发环境介绍
大多数的Linux开发都是以"native"开发的方式进行的,native方式是本机开发、本机调试、本机运行的方式。这种方式通常不适合嵌入式系统的开发,因为对于嵌入式系统来说,不具备足够的硬件配置在开发板上运行测试和调试工具。通常嵌入式系统的软件开发采用交叉编译的模式。交叉编译环境建立在宿主机上,对应的开发板叫目标板,开发时使用宿主机上的编译程序,汇编和编译形成可执行的二进制代码,然后把可执行程序下载到目标板上运行。宿主机和目标板上的处理器一般都不相同,这里均假定宿主机上运行的runtime
Linux9.0以上的X86平台,而目标板上为HHBF561开发平台。
目标板上的终端通常被重定向到串口,在宿主机上输出。
目标板上的程序都是烧写在FLASH当中的,这包括在U-BOOT上边的引导代码、Linux内核、文件系统及其他数据。
在目标板上FLASH的起始地址和相应区域,分别烧写上引导代码(U-boot)和含根文件系统的Linux内核的二进制文件。
由于目标板的启动模式被设置成从FLASH启动,系统上电时直接执行FLASH最前端的U-BOOT引导代码,所以U-BOOT的引导代码一定要烧写到开发起始位置,系统启动时U-BOOT做好SDRAM的必要的系统初始化工作,设置堆栈后,就会将后面的代码复制到SDRAM中继续执行,然后跳转过去执行;
启动Linux内核之前仍然先将Linux代码复制到SDRAM中,然后跳转到内核代码处执行,如图4所示。
图4 (略)
HHBF561开发平台的应用
HHBF561开发板是一款适合客户进行二次开发的平台,客户还需要在上面编写、移植驱动程序和应用程序,以适合自己的需求。
由于Linux提供了良好的框架,大大简化了应用的开发。Linux下对外设的访问通过设备驱动程序完成(uCLinux下可以在应用程序里访问外设空间,但不能响应中断)。
HHBF561开发平台的驱动移植
设备驱动程序是内核的一部分,它完成以下的功能:
对设备初始化和释放;
把数据从内核传送到硬件核从硬件读取数据;
读取应用程序传送给设备文件的数据和回送应用程序请求的数据;
检测和处理设备出现的错误;
设备驱动程序的编写应遵循一定的原则:
不带策略,即只处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用;
支持同步和异步操作;
驱动程序能被多次打开,能够充分利用硬件的特性,以及不具备简化任务的功能或与策 略提供相关的软件操作层。
视频输出实例
BF561有两个并行外部接口-PPI接口,专门用于视频数据的传输,并支持ITU66格式。PPI接口可以和AD/DA转换器、视频编/解码器以及其它通用外设直接相连。HHBF561上将PPI0接到D/A芯片ADV7171,然后ADV7171的输出通过S-video和CVBS等接口将视频信号输到电视。
由于视频设备是只能顺序访问的通道,因此将驱动程序设计成字符型。
图(略)
linux的设备访问都可以看成是文件操作。因此驱动程序的主要部分是实现FILE结构中的函数open、write、ioctl等。
在open函数中,将硬件使能。包括:PPI、中断、DMA等;write函数则将用户设备中的数据刷新到RAM缓冲器中,DMA将自动把数据送到ADV7171。除了读写设备之外,设备驱动程序还需要提供各种各样的硬件控制能力。这些控制操作通过ioctl完成。另外在每次DMA同PPI接口进行传输完成之后会产生DMA中断,在中断处理函数中,可以将DMA原数据指针切换到新数据的入口。这样就完成了整个驱动程序的框架。
图5 网络驱动程序的体系结构(略)
以太网驱动实例
网络驱动程序负责发现网卡、监测网卡参数以及发送接收数据。
在Linux内核中存在着一张网络接口管理表dev_base,它是一条net_device的结构链表的表头,在系统初始化完成以后,系统检测到的网络设备将自动的保存在这张链表中。当要发送数据时,网络子系统将根据系统路由表选择相应的网络接口进行数据传输,而当接收到数据包时,通过驱动程序登记的中断服务程序进行数据的接收处理。
Linux网络驱动程序的体系结构(如图5)可以划分为四层。在设计网络驱动程序时,最主要的工作就是完成设备驱动功能层,以满足自己所需要的功能。
BF561没有集成网络控制芯片,因此这里选用以太网控制芯片DM9000,挂接在处理器的EBIU上。
HHBF561开发平 台的应用案例
网络监控
BF561的CORE A运行LINUX操作系统并执行图像采集和网络传输任务,CORE B运行视频编码算法。模拟摄像头通过一个A/D芯片接到BF561的PPI接口上。
CORE A运行一个进程,当采集到一帧数据后将其放到内存中,并通知CORE B取走该数据并进行编码,编好的数据放回内存中的另一处缓存中,并通知CORE
A取走,CORE A通过网络将视频码流送到远端以实行监控(图6)。
可视VoIP
这是BF561实现一个可视VoIP的案例,见图7。
图7 (略)
问:现在的基于Blackfin处理器的uClinux操作系统是否支持pthread,framebuffer,是否支持video4linux
标准的video in 和video out的设备。
答:都支持,而且我们已经有了成功应用
问:我们用Visual DSP++开发的视频CODEC的库文 件,是否可以在Linux下的gcc编译器直接使用?
答:除非你的库文件没有用到 Visual DSP++ 的非标 准库函数,否则不可以用gcc 编译使用。
问:Blackfin处理器是否可以通过外部设备提高其运 行速度?
答:Blackfin作为DSP处理器,其运行速度已经非常 高了。一般速度的瓶颈都是在硬件接口或外围 设备上。
问:用uClinux操作系统,Blackfin处理器能否处理较 高速率的实时数据?比如50-100MB/S,毕竟操作 统是多任务的。还有,uClinux操作系统用户容易
移植裁减吗 ?
答:50-100 MB/s 的实时数据对于我们的平台来说 是可以胜任的,虽然 OS 是多任务的,但是我们可 以通过 DMA 传输、优先中断等手段来提高实时
性。可裁减和可定制性是 uClinux 的特性。
问:如果我的系统放在16位的FLASH(速度一般在 70ns)中运行, 这样比我引导到Blackfin内部执行 要慢多少倍?
答:这样要根据您设置的主频和外设频率决定。从 理论上讲,一般要相差十几倍。
问:请问现在使用Blackfin运行uClinux的效率如何?
因为DSP与ARM等芯片相比,主要的优势在于 其强大的计算能力和计算速度,但是象uClinux这 样的操作系统所执行的指令大多是一般的逻辑
指令,不知此时Blackfin是否还能保持同样大的 速度优势呢?
答:从C 的编译器效率上看,Blackfin与ARM相差不 多,对于一般的逻辑指令,Blackfin可以很好的适 合。因为Blackfin有更高的MIPS,Blackfin
具有更 大的速度优势。
从目前的数据上看,uCLinux大约只占Blackfin的 50MIPS。
问:uClinux的内核加载方式如何进行?闪存加载和内 存加载那种较好?
答:我们的处理方式是将内核复制到SDRAM中然后 加载,这样的好处是运行会快一些。
问:用uClinux的编译器编译C语言程序时出现编译 错误(绝对不是程序代码问题),如果把C源文 件中的代码注释掉一部分后,再编译,该错误就
没有了,恢复被注释的部分再编译,错误也没有 再现,这是什么原因?如何避免?
答:一般来说,如果代码没有问题的话,编译器是不 会抱怨的。uClinux 使用的是 GNU 的 C 编译器, 它支持 100%
的标准 C (ANSI C)。建议在编译的 时候把警告打到最高,这样更能发现编码中的问题。
问:BF533没有I2C控制器,用PF口来模拟I2C是否 会影响Linux内核的实时性?
答:不会。一般来说I2C不用于实时信号处理。
问:uCLinux在实现多个进程时如何实现数据保护?
答:传统的 UNIX 进程间互斥和同步的机制,uClinux 都支持,它是符合 POSIX 标准的。比如:互斥量、 信号量,此外
uClinux 还有多种锁机制可以满足 各种情况的数据保护。
问:BSP部分如何配置? 又没有硬件抽象层概念? 如何开发基于板子和uCLinux的设备驱动?
答:关于bsp的配置我们都加到config中去了,您只 要使用make menuconfig选一下就行了;对于设 备驱动的开发,linux是有标准的接口的,而且可
以从网上找到大量的源代码,您只要用一个同 您所需要的相类似的驱动程序进行硬件相关部 分的改写就可以了。
问:在使用BF533板时,用BF533的PPI口输出显示 图像,采用uClinux和网络功能后,显示闪烁,请问 如何解决?
答:你的图像是不是放在片外?当总线阻塞时,PPI 不能正常取得数据,就会导致画面闪烁。一般要 使用两组dma来实现图象得稳定输出;MdMA把
数据从片外拷贝到片内line buffer,PPI则使用dma 交替输出片内line buffer 数据。
问:在uClinux下运行的C语言程序中printf()的语句 的多少和位置会影响程序运行的结果,如有时一 定要加入printf语句,程序才能正确执行,这是什
么原因?
答:printf()速度较慢,可以延迟后续指令得执行时间。 尤其是访问速度较慢得外设时,可能需要等待, 这时加入printf()就充当了这个功能。
问:请问运行uClinux的最小开销?
答:uClinux 的运行开销取决于应用。在我们的平台 上可以把内核裁减到 512 K, 加上文件系统小于 900 K。
问:动态电源管理的实现是用软件还是用硬件?效果 如何?
答:动态电源管理完全是由软件实时控制的,您可以 在运行时随时改变内核电源,以减低功耗,效果 非常明显。具体指标您可以访问www.analog.com,
下载相关的硬件手册。
问:在网络应用的时候,是否一定需要一个类似EPROM 一样的存储器来保存MAC地址?MAC地址是否 是定义在网络接口芯片中的,是否是全球唯一,
软件如何得到该地址?
答:不需要 EPROM 保存 MAC 地址。MAC 地址有全 球唯一的范围,也有局部应用的范围。软件上访 问物理层协议就可以得到网络接口的
MAC 地址, 比如在 uClinux 中用 ifconfig 就可以得到。
问:请问uClinux核心的栈5也就是sp或usp是在内 部SRAM还是外部SDRAM中。如果在外部SDRAM 中,对执行速度的影响是否很大。
答:堆栈是放在外部SDRAM中的,因为使用了Cache, 对执行速度基本没有影响。
问:uCLinux如何实现BF561的双Core控制与消息传 递等问题呢。
答:bf561有两种方法实现双核同步:
1、 通过sicb_sysr向另外一个核提交中断;
2 、通过shared memory中得信号量实现同步。
2005GEC.1
|