APP下载

基于NDK的DSP网络设计

2013-11-24周恒国

网络安全与数据管理 2013年2期
关键词:接收数据时钟函数

周恒国,黄 方

(电子科技大学 资源与环境学院,四川 成都611731)

由于网络的高速发展,嵌入式平台上的网络通信已经成为一个必要的通信模块。TI公司(Texas Instruments)的C6000系列DSP芯片有很多都在其片上集成了以太网接口,如TMS320C6747、TMS320C6748等。结合配套的TCP/IP协议栈,可使基于数字信号处理技术的因特网终端的网络连接成本降低50%以上。而此协议栈与NDK(Network Developer's Kit)结合在一起使用,可以缩短软件开发周期。

本文针对TMS320C6748芯片,对其网络硬件进行设计,并基于NDK进行网络软件设计。

1 网络模型

国际标准化组织(ISO)于20世纪70年代提出了开放式通信系统互联参考模型OSI(Open System Interconnection Reference Model),旨在使各种计算机在世界范围内互联的网络标准框架。它划分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层7个层次。物理层定义了所有电子及物理设备的规范,其中特别定义了设备与物理媒介之间的关系,包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器(在SAN中使用的主机适配器)以及其他设备的设计定义;数据链路层的功能在于管理物理层的比特数据,并且将正确的数据传送到没有传输错误的路线中;网络层为数据传送的目的地寻址,再选择出传送数据的最佳路线;传输层用于控制数据流量,并且进行调试及错误处理,以确保通信顺利。而传送端的传输层会为分组加上序号,方便接收端把分组重组为有用的数据或文件;会话层用于为通信双方制定通信方式,并创建、注销会话(双方通信);表示层能为不同的客户端提供数据和信息的语法转换内码,使系统能解读成正确的数据。同时,也能提供压缩解压、加密解密;应用层能与应用程序界面沟通,以达到展示给用户的目的,常见的协定有 HTTP、HTTPS、FTP、TELNET、SSH、SMTP 和POP3等。

OSI是一个定义良好的协议规范集,但过于庞大复杂。因此,DARPA(Defense Advanced Research Projects Agency)开发了TCP/IP模型,它采用更少的层(主要是把应用层、表示层、会话层合并为应用层),更适应现实的协议。OSI模型与TCP/IP模型对比如图1所示。

图1 OSI模型与TCP/IP模型

2 硬件设计

2.1 模块介绍

TMS320C6748的网络模块主要包括EMAC控制模块、EMAC模块和MDIO模块,其网络功能模块图如图2所示。

EMAC控制模块是设备处理器与EMAC、MDIO模块之间的主要接口,它控制网络设备的中断并采用8 KB的内部RAM来容纳EMAC缓冲区描述符(CPPIRAM)。

MDIO模块的全称是数据输入/输出管理模块(Management Data Input/Output Module),采用 802.3串行管理接口来查询和控制多达32个使用共享双总线的以太网PHY设备。主机软件通过MDIO模块配置每个基于EMAC模块的物理层自适应参数,检索自适应参数的值,并且配置使EMAC模块正常运作的参数。概括地说,MDIO模块负责管理与EMAC相连的所有PHY芯片,包括对PHY芯片进行枚举、配置和器件状态检测等。

EMAC模块的全称是以太网媒体访问控制模块(Ethernet Media Access Controller Module),它提供处理器与网络之间的高效接口,负责以太网数据的发送与接收。TMS320C6748上的 EMAC模块支持10 Mb/s和 100 Mb/s模式,工作在半双工或全双工模式下,同时具有硬件流控制及服务质量保证(QoS)支持。

2.2 通信接口硬件电路

TMS320C6748支持媒体独立接口MII(Media Independent Interface)与简化媒体独立接口RMII(Reduced Media Independent Interface)。以 MII为例,其接口电路设计如图3所示。

MII接口信号线定义为:

(1)MII_TXCLK:发送时钟信号。所发送的时钟是一个连续的信号,作为发送操作的定时基准,MII_TXD和MII_TXEN信号依赖于这个时钟信号。它由PHY产生,在10/100 Mb/s模式下启用,当系统工作在10 Mb/s时为2.5 MHz,工作在 100 Mb/s时为 25 MHz。

(2)MII_TXD[3-0]:发送数据线。包含 4条数据线,是4位数据的集合。其中MTDX0是最低有效位(LSB)。信号根据MII_TXCLK同步,并且只有当MII_TXEN使能时才有效。

(3)MII_TXEN:发送使能信号。发送使能信号表示MII_TXD生成半字节的数据可发送给PHY,由MII_TXCLK信号线驱动。

(4)MII_COL:网络冲突监测信号。在半双工模式下,当检测到网络上的冲突时该位被置位,它会一直保持直到冲突消除,并且该信号不一定与MII_TXCLK和MII_RXCLK同步。在全双工模式下,该位被用于硬件流量传输的控制。当该位有效时,停止数据的传输,如果数据包正在传输的过程中,将完成本次传输。如果该位被设置为低电平,将不启用硬件流量传输控制。

(5)MII_CRS:载波感应信号。在半双工模式下,如果PHY正在发送或者接收数据,该位会被置位。同样它与MII_TXCLK、MII_RXCLK不同步。在全双工模式下,MII_CRS应保持低电平。

(6)MII_RXCLK:接收时钟信号。接收时钟也是一个连续的信号,作为接收操作的定时基准,MII_RXD和MII_RXEN信号都依赖于这个时钟信号。它是由PHY产生,在10/100 Mb/s模式下启用,当系统工作在10 Mb/s时为 2.5 MHz,工作在 100 Mb/s时为 25 MHz。

(7)MII_RXD[3-0]:接收数据线。

(8)MII_RXDV:接收数据使能。

(9)MII_RXER:接收出错信号。

(10)MDIO_CLK:MDIO时钟。MDIO的数据源于系统模块MDIO。该时钟频率由MDIO控制寄存器的CLKDIV位来设置。

(11)MDIO_D:管理数据输入输出。

3 软件设计

3.1 NDK 结构介绍

网络开发者套件(NDK)是一个开发TI嵌入式处理器网络应用平台,但目前仅限于TMS320C6000 DSP系列和ARM处理器。NDK的设计目的是为开发者提供一个完整的TCP/IP功能环境,缩短开发周期,降低开发难度。NDK通过编程接口与本地操作系统(DSP/BIOS)和底层硬件相互隔离,如图4所示[1]。本地操作系统(DSP/BIOS)被抽象成一个操作系统适应层(OS Adaptation Layer),底层硬件被抽象成一个硬件抽象层(Hardware Abstraction Layer),两个抽象层的函数库分别为OS.LIB和HAL.LIB,它们是NDK与本地操作系统和底层硬件的接口[2]。图5为TCP/IP协议栈的结构[3]。

STACK库是主要的TCP/IP网络功能库,它包括了从底层链路层到上层套接口层的所有功能,该库基于DSP/BIOS操作系统。NETCTRL库在整个协议栈中起关键作用,协调操作系统和底层硬件驱动,管理所有网络事件。NETTOOL库提供配置网络的各种服务[4]。

3.2 NDK编程设计

在网络程序执行之前,需对开发平台进行板极初始化,并对网络寄存器进行配置,将其作为一个钩子函数,在DSP启动时加载。而TCP/IP协议栈需要设置成一个主线程,并设置较高的优先级等级(可设置成等级 5)。初始化及线程任务设置需要在DSP/BIOS中添加。要调用NDK库中函数,需要添加以下库:stack.lib、hal_timer_bios5.lib、hal_ser_stub.lib、hal_userled_stub.lib、os_bios5.lib、nettool.lib、netctrl.lib、miniPrintf.lib 以及板极驱动库[3]。

在主线程中,TCP/IP协议栈需要首先进行配置并初始化,具体步骤如下:

(1)分配一个网络参数配置,主要包括主机名、IP地址、网关、子网掩码、域名和DNS服务器地址等。

(2)调用NETCTRL库函数NC_SystemOpen(),并用Cfg-New()函数创建一个新的配置。

(3)调用一个配置入口函数,将第一步中分配的网络参数添加进去。如:

经过以上步骤,TCP/IP协议栈配置完成,然后调用NC_NetStart()函数启动网络程序。注意,它的返回值是一个关闭代码。通常该系统的关闭方式会决定协议栈是否重新启动(例如改变配置后需要自动重启),一般有以下代码:

如果返回值大于0就重新启动网络。其中NetworkOpen函数的功能是设置网络协议、连接端口号、连接数以及网络连接时的回调函数。可配置如下:

在工程设计中,如果需要多线程使用网络收发数据,需要在线程中共享网络文件描述符,这样在新线程中可以像在网络主线程中一样使用 recv()和send()函数来收发数据。一般来说可以使用如下代码:

另外,TI提供了 recvnc()和 recvncfrom()函数,不需要拷贝数据就能直接接收,使得网络接收数据速率大大提高,特别是网络吞吐量比较大的应用中效果尤为显著。如果对发送和接收缓存区有要求,需要在网络回调函数中调用setsockopt()函数进行设置[5]。

经过测试,基于NDK的DSP网络运行非常稳定、速度快、占用系统资源较少,对于需要在DSP上发送大量数据的场合非常方便。虽然采用NDK开发DSP网络有很多优点,但必定要占用一定的系统资源,并且优先级比较高,因此实时性要求非常高的项目中,应采用其他方案。

[1]Texas Instruments.Getting started with the C6000 network development kit.SPRAAX4[A].2008.

[2]刘钊江,郑红,吴兴华,等.基于 TIC6000系列 DSP的网络开发研究[J].仪器仪表用户,2010,30(3):60-62.

[3]Texas Instruments.TI network developer′s kit(NDK)v2.21 User′s Guide.SPRU523H[A].2012.

[4]梁迅.基于NDK的DSP网络编程[J].计算技术与自动化,2005,24(9):79-81.

[5]Texas Instruments.TI network developer′s kit(NDK)v2.21 API Reference Guide.SPRU524H[A].2012.

猜你喜欢

接收数据时钟函数
二次函数
别样的“时钟”
第3讲 “函数”复习精讲
二次函数
古代的时钟
函数备考精讲
低复杂度多输入多输出雷达目标角度估计方法
基于LoRa的低能耗物联网技术研究
有趣的时钟
单片机模拟串口数据接收程序的实现及优化