嵌入式系统的实时数据接口扩展研究

嵌入式系统目前已广泛应用于信息家电、网络通信和工业控制等各个领域。典型的嵌入式系统主要由嵌入式硬件和软件构成,其中硬件部分的核心为嵌入式处理器。
arm系列内核是目前嵌入式处理器中广泛使用的内核。采用arm内核的处理器具有体积小、功耗低、成本低和性能高的特点。在全球有众多生产arm内核处理器的厂商。
linux是一种很受欢迎的开放源码操作系统,原先被设计应用于桌面系统,后被广泛应用于服务器。由于其开放源码和内核可裁减等特性,linux逐渐被修改用于嵌入式领域。目前已有多个嵌入式应用的版本,μclinux 是其中的一个分支,最早被设计应用于微控制领域。其最大特征就是没有mmu(内存管理单元),很适合于许多低端的、没有mmu的嵌入式处理器。
本文设计了一种嵌入式系统用于多媒体实时数据的网络传输。arm内核处理器与嵌入式 linux 是目前嵌入式应用中的一种典型组合,选用了 samsung 公司的16/32位arm7tdmi 内核的网络处理器 s3c4510b 为嵌入式硬件核心,μclinux 为操作系统。该系统支持完整的tcp/ip协议以及许多其它的网络协议,同时它具有很低的成本。
1 嵌入式系统的构成
1.1 硬件系统
嵌入式硬件系统主要由 cpu、flash rom、sdram、以太网物理层、fifo以及cpld等芯片构成,如图1所示。
(1) cpu
本系统采用了 arm7tdmi 内核的 risc 处理器s3c4510b。该芯片具有如下一些主要特点:
8/16/32位的外部总线支持 rom、ram、flash 存储器、dram 和外部i/o;
8k 字节的 cache;
一个i2c 接口;
一个带 mii 接口的100mbps/10mbps 以太网控制器;
两个 uart 通道;
两个通用 dma 通道;
两个 hdlc 通道;
18个通用i/0通道;
两个32位定时器;
共有21个中断源,其中4个用于外部中断;
一个内部 pll 用于提供高频率的系统时钟,最高系统时钟可达50mhz。
由此可见,s3c4510b 很适用于低端的网络设备,如集线器、交换机、家庭网关等。
(2)flash rom 和 sdram
flash rom 和 sdram 构成了系统的存储空间。其中flash rom 作为程序存储器,用于存放操作系统、应用程序等;sdram为系统内存。
(3)以太网物理层和串行接口芯片
cpu 内部的以太网控制器只提供了mac(媒体接入控制器),需在外部接一个物理层芯片完成编解码和时钟恢复等功能。串行接口芯片主要完成串行线路接口的电平转换。
(4)cpld 和 fifo
为了能使系统支持实时数据通信,需要在外设和嵌入式系统的外部总线之间加上 fifo 和cpld。fifo 用于数据缓冲,cpld 用于产生 fifo控制逻辑和外部总线控制逻辑。
1.2 操作系统
arm7tdmi 内核已被众多的嵌入式操作系统所支持,如 vxworks、psos 及 nucleus 等。这些商业化操作系统在网络和用户图形界面等方面都有很好的支持,并且在稳定性和实时性方面都有相应的保证,但其价格也相当高。这里选用了开放源码的嵌入式 linux,它一般免费或花较少的费用就可得到,同时它在网络和图形界面方面也有很好的支持。另外,嵌入式 linux 的高度模块化使它可以根据实际应用需要灵活配置,能有效精简内核代码。嵌入式 linux 具有很高的稳定性。在实时性方面,尽管 linux 本身未作过多关注,但可通过打实时 linux(rtlinux)补丁解决。
针对所采用的 cpu 没有 mmu,选用了目前在嵌入式系统中被广泛使用的μclinux。μclinux 是从标准的linux 2.0 内核发展而来的,但其源代码针对典型的嵌入式应用已经作了许多精简和修改,使得其内核比标准的 linux 内核要小很多,不过它仍然保留了标准 linux的主要特色。
目前最新的μclinux 版本已经支持 s3c4510b 及典型开发板,如果所采用的 cpu及开发板没有被支持,应根据实际情况移植。此外,由于在外部总线接了 cpld和 fifo,为了使应用程序能访问它,需要在μclinux 下开发相应的驱动程序。
2 实时数据接口的扩展
 2.1 应用要求
将上述嵌入式系统应用于实时多媒体数据的网络传输,如图2所示。这里的实时多媒体可以是 mpeg-4或 mpeg-2 等,其数据流一般是连续、恒定码率的。
2.2 硬件扩展
根据上述数据流的特点,需在嵌入式系统与外设(编、解码器)之间加入数据缓冲控制单元。对于发送端和接收端,数据缓冲控制单元的设计有所不同,下面以mpeg-2 为例说明。这里考虑系统的处理能力、网络的承受能力以及图像质量,mpeg-2 的输出为 4mbps 的cbr(固定比特率)ts流。
2.2.1 发送端
编码器送出连续、恒定速率的码流。如果将此码流直接送到 cpu 外部总线,将会导致操作系统频繁地处理中断,甚至会产生中断不能及时处理从而导致数据丢失。因此,有必要在编码器与外部总线之间加上 fifo,同时用 cpld 实现 fifo 的读写控制逻辑。编码器送出的数据流连续不断地以恒定速率写入fifo;当fifo中的数据积聚到一定值后,每写入若干个数据就向cpu发一个中断;cpu在收到中断后通过外部总线读入相当量的数据,并将其打包送入网络。正常情况下,每个中断读数据个数是一定的,在一段时间内fifo写入和读出将维持平衡,且不会产生“饥饿”状态;当操作系统因处理别的任务而没有及时响应中断时,fifo将暂时进入“饱和”状态,但只要fifo容量足够大就不会产生数据溢出现象。由于cpu从fifo读取单位数据的速度大大高于外设向fifo写单位数据的速度,“饱和”状态一般能消除。由此,可以解决前述问题。
2.2.2 接收端
在接收端,由于解码器的输入要求是一个连续、恒定速率的码流,同样要求在cpu外部总线与编码器之间加上fifo和cpld。同时,接收端的数据包由于经过了网络,不可避免地会引入延时,且数据包之间的延时是不确定的,甚至会产生数据包的丢失。这些都需要在接收端予以考虑,增加了接收端数据缓冲控制单元的复杂度。
为了解决数据包到达延时及抖动问题(数据包的丢失将间接导致延时的增加),可以简单地靠增大fifo容量解决。但增大fifo将意味着从编码器到解码器之间延时的增加,影响了实时性。因此,为了保证一定的实时性,同时考虑成本因素,不能单纯靠增大fifo解决。
由于fifo容量的限制,在出现大延时的情况下,fifo将可能出现“空”状态。这意味着送给解码器的数据流会有中断,从而可能导致解码器的不正常工作并可能不能恢复(在数据流恢复正常后)。为此,需要在fifo出现“空”状态之前,即处于“饥饿”状态时(可以设置一个阈值),由cpld停止向fifo读数据而向解码器发填充包。填充包中含有同步头,可以维持解码器的同步。短时间的插空包会使视频图像出现马赛克,如果时间过长,可能会出现黑屏。在实际试验中,接收端视频的质量与网络的负载情况有关。当网络负载较重时,图像会出现马赛克,黑屏现象一般极少发生。
2.3 驱动程序
为了使μclinux下的应用程序能通过外部总线访问fifo,需要编写相应的驱动程序。驱动程序主要包括三个基本部分,即cpu相关寄存器的初始化设置以及cpu对外部i/o口的读操作和写操作。其中,初始化设置主要包括中断号及其类型设置、外部i/o口数据位宽度和读写时序设置等。

【航天品质】aigo数码录音笔R3366专业录音让声音更清晰
java文档注释的作用
Top和Block实战经验以及DDR接口时序
引领智慧协同新趋势!MAXHUB全国新品品鉴会上海站完美收官
三大运营商5G集采展开,5G规模建设或将加速
嵌入式系统的实时数据接口扩展研究
《2023 汽车行业数字化转型报告》重磅发布
爆红智能AI如何看待DPU
如何用FPGA来实现机器学习的应用
使用垂直霍尔传感器技术实现维度测量
LoRa未来将如何影响国内物联网生态的发展前景
玻璃纤维布如何区分好坏
笔记本键盘个别按键失灵怎么办
透过等保2.0解读业务安全新趋势
如何帮助开发人员快速开展物联网应用
物联网技术在公用事业领域的潜力怎么样
华为打造自己芯片生产线!华为2021年上半年业绩下滑,利润率达到9.8%!
区块链应用场景需要满足什么维度
简述pn结的三种击穿机理
电缆材料PVC和PUR有什么区别