当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:提出了一种基于ADI公司的ADSP-BF533和网络芯片LAN91C111的网络音频监控系统的设计与实现方案。介绍了VDK的组成与工作原理、TCP/IP堆栈移植、基于VDK的SOCKET编程、BF533和LAN91C111的电路连接,最后给出了基于VDK的网络通信程序的实现方法。

引言

近年来,数字音频监控系统在我国发展迅猛,尤其是在广播领域,该系统担当着越来越重要的角色,另外,在保证音频信息准确度和实时性的条件下,实现音频数据的网络传输也成为一项十分重要的技术。

本系统以BF533为核心处理芯片,以软件工具VDSP++的自带VDK内核为基础,移植了LWIP作为网络主要结构,实现了TCP/IP在ADSP-BF533上的移植。同时在VDK的基础上,通过开发Socket服务器程序,实现了嵌入式网络终端与上位机电脑直接的数据传输。

1  VDK的组成原理

VDK实际上是一种带API函数库的实时操作系统内核.这是一款规模很小但却十分健壮的内核,它是VisualDSP产品的一部分,VDK也一样会随VisualDSP进行相应的升级或改版。使用VDK从产品维护的角度来看,是十分方便的。使用VDK也不会带来附加成本。它具有任务调度和任务管理功能,一共可支持32个任务。VDK是整个软件的基础,所有其他的程序都运行在该Kernel±0VDK的组成部分主要包括线程、调度、信号、中断服务程序、设备驱动、API等。

VDK的工作原理是首先引入多任务并且为每个任务都分配自己的堆栈空间,然后由任务调度器来决定哪个任务获得内核时间。任务调度主要涉及三种方式:

第一是合作调度方式。该方式是最简单的调度方式,系统中所有线程被赋予相同优先级的调度权,系统中线程在运行态占用处理器资源,在阻塞态时被排列在等待队列的最后,也可以自己调用yield函数,以使线程退出运行态而进入等待队列。另外,任何系统调用都会引起当前正在运行的线程阻塞。

第二是时间片轮转调度方式。时间片调度方式给予每一个优先权相同的线程固定的执行时间间隔。VDK中时间间隔是通过设定tick参数确定的。

第三是抢先式调度方式。如果等待队列中有比正在运行的线程优先级更高的线程,则正在运行的线程阻塞后进入等待队列,等待队列中优先级最高的线程获得执行权。该方式提供了比其他两种方式更有效、而且更灵活的调度方式。对嵌入式编程者来讲,最熟悉的调度方式就是“时间片轮转”的方式,在这种方式下,每个应用程序只占用很短的CPU时间,用户几乎无法察觉它们在进行轮换。操作系统或VDK会自动地将操作系统的控制权以轮转调度或时间片的方式在所有线程之间进行传递。每个线程所得到的处理器控制时间的长度由程序员定义。该方式的优先级可以被静态地分配,也可以被动态地分配。静态分配意味着应用程序在创建时就已经被指定好了优先级。动态分配则意味着程序的优先级在其运行时仍能被改变,也就是说,在线程实体化或运行时,其优先级都能被改变。

2  TCP/IP堆栈移植

关于TCP/IP堆栈移植,ADI提供有快速解决方案,即一个轻便型堆栈Lwip。Lwip(Light-weightInternetProtocol)是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等人开发出来的一套用于嵌入式系统的开放源代码TCP/IP协议栈。Lwip的主要优点是可在保持TCP/IP协议主要功能的基础上,减少其对RAM的占用。一般情况下,它只要几十KB的RAM和40KB左右的ROM就可以运行,这使得Lwip协议非常适合在嵌入式系中使用。

Lwip堆栈的调用基于ADI的驱动模型以及SystemServicesLibraries(即系统服务函数库)。Lwip堆栈支持IP、ARP、ICMP、TCP、UDP等基本协议,同时支持一套标准的BSDSocket接口函数。

3  基于VDK的SOCKET编程

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口,以区分不同应用程序进程间的网络通信和连接。生成套接字主要有3个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。Socket的原意是“插座”。通过将这3个参数结合起来,与一个“插座"Socket的绑定,应用层就可以和传输层通过套接字进行接口,以区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket;另—运行于服务器端,称之为ServerSocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤,即服务器监听、客户端请求和连接确认。

4  硬件电路设计

4.1  ADSP-BF533简介

ADSP-BF533处理器是Blackfin系列产品中的一员。其最大工作频率可达600MHzoBlackfin处理器内核包含有2个16位乘法器、2个40位累加器、2个40位ALU、4个视频ALU和1个40位移位器,可处理来自寄存器组的8位、16位或32位数据。

4.2  LAN91C111简介

ADSP-BF533通过以太网接口可将DSP采集的数据信息传送到远程服务器。LAN91C111是SMSC公司生产的专门用于嵌入式产品的10/100M快速以太网控制器,该器件具有可编程、CRC校验、同步或异步工作方式,并具有低功耗CMOS设计和小尺寸等特点。

4.3  ADSP-BF533与LAN91C111的硬件连接

ADSP-BF533与LAN91C111之间的信号传输连接图如图1所示。

图1  信号传输连接图

该硬件系统由四大部分组成:其中主控芯片选用ADSP-BF533,以太网控制芯片选用LAN91C111,网络隔离芯片选用TG110-E050N5,而网口存储器则选用AT93C46。

由于LAN91C111是专为嵌入式系统设计的,因此其外围电路相对比较简单。只要将地址总线A1-A15与系统对应相连即可。其A0没有被LAN91C1U使用而悬空;数据总线D0-D15用于16位数据传输。LAN91C111端的D16-D32悬空;LAN91C111的片选信号AEN由DSP提供。字节选择引脚BE0和BE1分别接DSP的ABEO和ABE1,而BE2和BE3直接接高3.3V电压,即选定的是16位操作模式。AEN作为片选信号,接DSP的AMS3引脚。DSP芯片利用I/O引脚和中断引脚可实现对以太网控制器LAN91C111芯片的控制和数据传输。以太网控制器LAN91C1U芯片通过网络隔离芯片TG11O-E050N5并经RJ45与外面的上位机相连接,以实现数据传输。TG11O-EO5ON5是双绞线驱动/接收器,内部有2个耦合变压器可用来传输信号,同时抑制来自介质的共模噪声/干扰。AT93C46是一片串行数据存储器,该芯片不论写入或读取数据,皆釆用串行传输的模式动作,串行方式虽然没有并行传输来得快速,但是其传递远距离的数据,却可以大量减少使用传输线的需求,也缩小了系统整体的占有面积。因此,非常适合用于微控制器或是微处理器。

5  基于VDK的应用程序设计

本系统中的网络通信模块主要完成的任务是网络芯片初始化及接收应急信号,接收上位机指令帧并对其进行解析,同时将选择板卡返回指令帧发送给上位机。

分析上述任务,可将应用程序分为三个线程:其中一个BootThread:lwip_sysboot_threadtype的作用是上电后对系统进行初始化并创建各个线程,然后激活Echo_Server_Threadlype线程,完成与上位机的客户端建立Socket连接;其次,初始化线程级别最高;连接成功后,由Echo_Server_Threadlype线程激活Echo_Worker_ThreadType线程,Echo_Worker_ThreadType线程的任务为通过recv()函数接收上位机指令帧并对其进行功能解析,然后根据帧功能码判断应该发送给上位机的帧,准备好上传数据,再通过send。函数将上报帧上传给上位机并显示最终处理结果。

图2所示是基于VDK的系统线程软件工作流程。系统上电或复位后,DSP自启动后,VDK启动线程lwip_sysboot_threadtype开始运行。在线程lwip_sys-boot_threadtype中进行板级初始化和Lwip协议栈和网口初始化,接下来再创建所需要线程。图3所示是VDK线程的通信工作流程图。

图2  VDK线程启动流程

芯片初始化模块主要完成以下几项工作:

系统时钟速率配置:包括初始化PLL,由PLL_LOCKCNT设置稳定时间,PLL_CTL控制寄存器设置VCO与CLKIN之间的倍数14,通过设置PLL_DIV决定SCLK及CCLK的时钟,使能PLL中断;

同步串口(SPI)配置:如果SPI是作为主启用,SPI使用SPI标志寄存器(SPI_FLG)使多达7个通用可编程标志引脚用作从选择端。并设置为0X02,SPISELl使能。FIO_DIR中设置PF10为输入,其余均为输出;

CS8420初始化:即初始化CS8420,则SPI_CTL设置字长为16位,当发送数据写入发送数据缓冲器时,SPI使能。设置为主模式。SPI_BAUD为0x18,波特率大概为512b/s;

激活EchoServerThreadType线程;

由线程销毁模块完成对初始化线程的销毁。

图3  VDK线程通信工作流程图

连接成功后,再由Echo_Server_ThreadType线程激活EchoWorkerThreadType线程。Echo_Worker_ThreadType线程的任务是通过recvO函数接收上位机指令帧并对其进行功能解析,根据帧功能码判断应该发送给上位机的帧,准备好上传数据,再通过send()函数将上报帧上传给上位机并显示最终处理结果。

图4所示是系统控制板卡与上位机之间的通信结果。

图4  控制板卡与上位机的网络通信界面

6  结语

本文以BF533为核心处理器,提出了一种基于VDK的网络音频通信系统的设计方案,同时通过实际项目的操作对该方案的可行性进行了验证。经过测试证明,该系统可以提高传输效率,而且实时性好,性能稳定。

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

Socket通信系统是一种基于网络通信协议的应用程序接口,它提供了在网络上进行通信的接口,允许不同计算机之间建立连接并交换数据。

关键字: SOCKET通信 网络通信

各类网络通信技术给人类带来了许多便利和改变,人们可以通过互联网、手机等网络通信技术快速获取和传播各种信息,包括新闻、娱乐、教育、科技等方面的信息,这使得信息获取和传播变得更加便捷和高效。网络通信技术使得远程办公和在线学习...

关键字: 网络通信 Wi-Fi

(全球TMT2023年8月21日讯)近日,2023中国算力(基础设施)大会、第二届“西部数谷”算力产业大会在宁夏银川开幕,软通动力受邀出席本次大会。大会举办期间,软通动力与中国联合网络通信有限公司宁夏回族自治区分公司达...

关键字: 联通 网络通信 云服务 MT

市场竞争里有一条残酷法则,即“劣势决定优势,劣势决定生死”,这就是常说的“木桶效应”,该效应敦促企业领导要具备忧患意识,要迅速找出短板,要及时弥补不足,避免因明显的缺陷而面临毁灭性的损失。

关键字: 物联网 木桶效应 网络通信

用于写入密集型的工业和网络通信存储应用的全新 3D pSLC SSD

关键字: Swissbit 网络通信 SSD

以下内容中,小编将对路由器的相关内容进行着重介绍和阐述,希望本文能帮您增进对路由器的了解,和小编一起来看看吧。

关键字: 路由器 漏洞 网络通信

1969年,美国数字设备公司研制出了第一台可编程逻辑控制器--PDP14。并在美国通用汽车公司的生产线上试用成功,取代生产线上的继电器控制系统,开创了工业控制的新纪元。

关键字: 微处理器 网络通信

一.调整目录结构为了方便编译,现在我们将前面文章的代码结构做如下调整。root@ubuntu:/mnt/hgfs/code/chat# tree ..├── chat_client│   ├── include│   ├...

关键字: 数据库 Linux SOCKET SQLITE

在掌握了基于TCP的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于C语言进行面向过程的函数封装,然后再基于C进行面向对象的类封装。1.基于C语言的封装基于TCP的套接字...

关键字: 封装 通信 ADDR SOCKET

摘 要:机电通信系统是高速公路建设最为重要的部分之一,是现代网络通信技术在公路运行管理中实际应用的体现, 可有效提升高速公路运营管理效率。当前我国高速公路建设应更多地关注机电通信系统的重要作用。文中主要通过阐述高速公路通...

关键字: 高速公路 机电通信 新技术 网络通信
关闭
关闭