1 通讯协议的拟定
协议是用来办理通讯的法规,是网络体系功用完结的根底。因为DSP可以完结对网卡的直接操作,对应于OSI网络模型,网卡包括了物理层和数据链路层的全部内容,因而,规则了数据链路层上数据帧封装格局,就可以为依据DSP的局域网络中恣意站点之间的通讯供给详细规范。因为以太网是当今最受欢迎的局域网之一,在以太网中,网卡用于完结802.3规程,其典型代表是Novell公司的NE2000和3COM公司的3C503等网卡,所以研讨作业中的详细实验渠道是以DSP为中心构成的以太局域网,首要用于语音的实时通讯,所运用的网卡为Novell公司的NE2000网卡。NE2000网卡的根本组成请见参阅文献[2],其中心器材是网络接口操控器(NIC)DP8390.该器材有三部分功用:第一是IEEE802.3MAC(媒体访问操控)子层协议逻辑,完结数据帧的封装和解封,CSMA/CA(带磕碰检测功用的载波侦听多址接入)协议以及CRC校验等功用;第二是寄存器堆,用户对NE2000网卡通讯进程的操控首要经过对这些寄存器堆中各种指令寄存器编程完结;第三是对网卡上缓冲RAM的读写操控逻辑。DP8390发送和接纳选用规范的 IEEE802.3帧格局。IEEE802.3参阅了以太网的协议和技能规范,但对数据包的根本结构进行了修正,首要是类型字段变成了长度字段。所以,以 DSP为中心的局域网内通讯数据包根本格局如图1所示。
DSP读出数据包和打包从意图地址开端。意图地址用来指明一个数据帧在网络中被传送的意图节点地址。NE2000支撑3种意图地址:单地址、组地址及播送地址。单地址表明只要1个节点可以接纳该帧信息;组地址表明最多可以有64个字节接纳同一帧信息;而播送地址则表明它可以被同一网络中的一切节接纳。源地址是发送帧节点的物理地址,它只能是单地址。意图地址和源地址指网卡的硬件地址,又称物理地址。 在源地址之后的2个字节表明该帧的数据长度,只表明数据部分的长度,由用户自己填入。数据字段由46~1500字节组成。大于1500字节的数据应分为多个帧来发送;小于46字节时,有必要填充至46字节。原因有两个:一是确保从意图地址字段到帧校验字段长度为64字节的最短帧长,以便区别信道中的有用帧和无用信息;二是为了避免一个站发送短帧时,在第一个比特没有抵达总线的最远端时就完结帧发送,因而在或许产生磕碰时检测不到抵触信号。NE2000对接纳到的从意图地址字段后小于64字节的帧均以为是“碎片”,并予以删去。在数据字段,依据体系的详细功用要求,用户可以预留出若干个字节以规则相应的协议,以便通讯两边依据这些字节中包括的信息完结不同的功用。
2 依据DSP的网络通讯程序规划
假如依据网络操作体系,用户可以使用一些软件对网络操作体系的支撑,很容易地编写出优异的网络通讯程序,但这些程序有必要依附于网络操作体系。而在DSP环境下,有必要深化了解网络接口操控器(NIC)的作业原理[2],经过对网络直接编程,完结局域网内恣意站点之间的通讯而彻底抛开网络操作体系。 DSP对网卡的通讯进程操控便是DSP对DP8390中各种寄存器进行编程操控,完结数据分组的正确发送和接纳。DP8390的一切内部寄存器都是8位,映像到4个页面。每个页面有16个可供读写的寄存器地址(RA=00H~0fH)。页面的挑选由指令寄存器CA操控。第0页寄存器用于收发进程,第1页寄存器首要用于DP8390的初始化,第2页寄存器则用于环路确诊。DSP对寄存器的操作是将寄存器作为DSP的端口设备,其实践物理端口地址(PPA)为网卡根本I/O端口地址(BIOA)与寄存器地址(RA)之和(即PPA=BIOA+RA)。应留意的是,PPA与寄存器间并不存在一一对应联系,对 PPA的读操作与写操作并不一定是对同一寄存器进行的,这种状况在第0页特别显着。用户数据分组在DSP和网卡交互是经过网卡的数据端口完结的,既可以用 DMA方法也可以用PIO方法读入数据分组或将数据分组送至网卡RAM缓冲区。在本体系中,DSP选用DMA方法对网卡进行数据读写。网卡的数据端口地址(NDPA)为网卡根本I/O地址(BIOA)加偏移地址10H(即NDPA=BIOA+10H)。 网卡通讯进程操控可分为网卡初始化、接纳操控和发送操控。下面别离予以评论。
2.1 网卡初始化
网卡初始化的首要任务是设置所需的寄存器状况,确认发送和接纳条件,并对网卡缓冲区RAM进行区分,树立接纳和发送缓冲环。详细进程请参阅参阅文献 [2].需求阐明的是,每一块网卡被赋予一个物理地址,以便通讯站点的标识。这个物理地址存在网卡的PROM(存储地址为0000~0005H)六个单元中,在网卡初始化时,经过长途DMA读入DSP内存中,并送入网卡物理地址寄存器。在一步的意义在于:一方面,假如能正确读出网卡的物理地址,则阐明网卡硬件根本没有问题,网卡的上电复位和DSP对网卡的初始化顺畅经过;另一方面,这个物理地址可以用于DSP网络体系中的点名、包的过滤丢掉等服务,也便是说,在链路层依据数据帧带着的源地址和意图地址确认数据报从哪里来,是否接纳或丢掉。网卡初始化时另一个重要的作业便是接纳缓冲环的设置,为了有用使用缓冲区,NIC将接纳缓冲区RAM构成环形缓冲结构,如图2所示。
接纳缓冲区RAM分红多个256字节的缓冲区,N个(N最大为256)这样的缓冲区经过指针操控链接成一条逻辑上的缓冲环。缓冲环的开端页面地址存入 PSTART寄存器,环页面完毕地址存入PSTOP寄存器。PSTART和PSTOP确认了接纳缓冲环的巨细和鸿沟。为便于缓冲环读写操作,还需求2个指针:当时页面指针CURR和鸿沟指针BNRY.CURR确认下一包放在何处,起着缓冲环写页面指针效果;BNRY指向未经DSP取走处理最早抵达的数据包开始页面,新接纳的数据包不行将其掩盖,起着缓冲环读页面指针的效果。也便是说,CURR可以告知用户网卡接纳的数据分组当时放到了什么方位,而BNRY 则用于确认DSP读缓冲环到了什么地方。因为接纳缓冲区为环形结构,BNRY和CURR持平时,环缓冲区或许满也或许空。为了使NIC能区分这两种状况,规则当BNRY等于CURR时,才以为环缓冲区满;当缓冲区空时,CURR比BNRY指针值大1.因而,初始化时设置:BNRY=PSTART,CURR=PSTART+1.这时读写指针不一致,为了确保正确的读写操作,引进一软件指针NEXTPK指示下一包开始页面。明显,初始化时NEXTPK=CURR.这时,缓冲环的读指针对NEXTPK,而BNRY仅仅存储分组缓冲区的开始页面鸿沟指示,其值为 NEXTPK-1.
2.2 接纳操控进程
DSP完结对DP8390的初始化后,网卡就处于接纳状况,一旦收到分组,就主动履行本地DMA,将NIC中FIFO数据送入接纳缓冲环,然后向主机请求 “数据分组接纳到”中止请求。DSP假如呼应中止,则发动网卡长途DMA读,将网卡缓冲区中的数据分组读入学生机存储区,然后对接纳缓冲环CURR、 NEXTPK、BNRY指针内容进行修正,以便网卡能从网上正确接纳后续分组。DSP呼应网卡接纳中止后,接纳操控进程如下: ①设置长途DMA的开始地址;RSAR0=00H,RSAR1=Nextpk. ②设置长途DMA操作的字节数,这个长度在46~1500字节范围内依据详细要求自己确认。 ③0AH送指令寄存器CR,发动长途DMA读。 ④从网卡数据端口依序读入数据分组,留意,最早读入的4字节非数据分组内容,第1字节为接纳状况,第2字节为下一包页地址指针,3与4字节为接纳字节数。第2字节内容应该送入Nextpk,其它字节依据用户要求处理。 ⑤修正鸿沟指针BNRY=Nextpk-1. ⑥铲除长途DMA字节数寄存器RBCR0和RBCR1.
2.3 发送操控进程
DSP先履行长途DMA写操作,将内存中的数据分组传至网卡发送缓冲区,然后发动发送指令进行数据分组发送。发送操控进程如下: ①设置长途DMA的开始地址为网卡发送缓冲区开始地址; ②设置长途DMA操作的字节数; ③12H送指令寄存器CR,发动长途DMA写; ④依序送出数据分组至网卡发送缓冲区; ⑤铲除长途DMA字节数寄存器; ⑥设置发送字节数寄存器TBCR0和TBCR1; ⑦12H送指令寄存器CR,发动数据分组发送。
3 发送方发送频率的操控
发送方发送频率的正确操控首要维护两点:一是有一个最小发送时刻距离,否则会因为接纳方不能及时接纳而导致体系瘫痪;二是发送频率可以足详细的功用完结要求。譬如在语音的实时通讯中,发送频率就取决于声卡的采样频率。在8kHz采样频率时,声卡每秒钟采样8000字节,选用1024字节需用时128ms,假如通讯协议规则发送1次传送1024字节有用数据,则有必要每128ms发送一次才干确保缓冲区有新数据待发送,也才干确保接纳方有新数据播映。 128ms是一个理论核算数值,在实践的操作中采样速度和发送频率之间总是不能彻底匹配,而寄存数据的缓冲区巨细是有限的,假如没有杰出的操控技巧来完结正确发送,就会形成声响颤动和延时。处理的方法是双缓冲技能和双指针操控,而且依据采样速度和发送频率之间的匹配状况送入不同的发送通讯进行处理后发送。正确发送的意义有两方面,一是每次发送的都是新数据,二是能满意接纳方总在播映新数据的需求。
4 接纳方避免数据包的丢掉
因为DSP经过中止请求判别是否有数据分组到来,假如中止繁忙而两个数据包到来时刻相差十分短,DSP有或许只呼应一次中止,然后导致丢包的产生。剖析网卡接纳数据进程,当网卡收到数据分组时,首要履行本地DMA,将N%&&&&&%中FIFO数据送入接纳缓冲环,并将本地DMA操作的开始地址寄存在当时页寄存器(CURR)和当时本地DMA寄存器(CLDA0、CLDA1)中,DSP从网卡接纳缓冲环读出数据到存储器则称长途DMA操作,用软件指针Nextpk 来指示长途DMA的开始页面。因而经过比较网卡本地DMA和长途DMA的当时地址,即在中止服务子程序中比较CURR和Nextpk指针,或比较 CLDA0、CLDA1和Nextpk指针,就可以确保当时数据分组放到了哪里就读出到哪里,然后避免丢包的产生。
5 定论
DSP芯片是专门为完结各种数字信号处理算法而规划的、具有特别结构的微处理器,其杰出的功用、不断上升的性价比、日渐完善的开发方法使它的使用越来越广泛。将核算机网络技能引进以DSP为中心的嵌入式体系,使其成为数字化、网络化相结合,集通讯、核算机和视听功用于一体的电子产品,有必要大大提高DSP体系的使用价值和市场前景。将DSP技能与网络技能相结合,有必要处理两个关键问题:一是完结DSP与网卡的硬件接口技能,二是依据DSP的网络通讯程序规划。