基于TM1300 DSP系统的以太网通信接口的设计与实现
2009-08-10
作者:梅启斌
摘 要: TM1300 DSP的特点,详细介绍了通过TM1300的PCI接口驱动以太网芯片实现以太网通信接口的软件和硬件设计要点,给出了模拟数据和实际视频压缩码流的传送实验结果。
关键词: PCI总线 TM1300 以太网通信接口 pSOS内核
TM1300是Philips公司推出的新一代高性能多媒体数字信号处理器芯片。基于TM1300的DSP应用系统适合于实时的声音、图像处理,可广泛应用于会议电视、可视电话、数字电视等,具有广阔的应用前景。TM1300具有强大的处理能力和非常友好的音频和视频以及SSI、PCI等I/O接口,可以根据需要灵活地构造各种视频通信系统。鉴于目前计算机网络的普及和网上视频业务的发展,很有必要为TM1300视频编码系统开发一个以太网接口。开发以太网接口可以利用TM1300集成的PCI接口驱动专用的以太网接口芯片。目前多数以太网接口芯片(如Realtek8029、Realtek8139等)都是PCI接口的,可以用PCI总线将数据从TM1300传输到这些专用的以太网接口芯片,然后由接口芯片发送数据。由于TM1300可以运行嵌入式操作系统pSOS,且pSOS带有TCP/IP协议栈,因此可以方便地完成编码码流的TCP/IP封装。
下面将从硬件和软件二方面对设计要点进行详细介绍。
1 TM1300及PCI总线接口
基于TM1300 DSP系统的以太网通信接口的硬件系统结构如图1所示。
在该系统中硬件设计的重点是PCI总线接口。PCI总线的数据位宽度有32位和64位二种,64位的数据线对32位是兼容的。PC中常见的是32位PCI总线,它的有用引脚总数是110个,可以分成3组。第1组是基本功能信号线,包括32位共享数据地址线AD[00..31]、接口控制线、仲裁线、时钟线、系统复位线、中断线;第2组是附加功能信号线,包括错误报告线、Cache功能支持线、JTAG边界扫描线;第3组是电源线,包括设备耗电量标示线、3.3V电源线(12根)、5V电源线(13根)和地线(22根)。
由于8029不具备PCI附加功能信号线支持的Cache功能和JTAG边界扫描功能,且Realtek8029的奇偶校验错误报告功能引脚可以悬空不用,因此只需要考虑第1组功能信号线的连接。
PCI接口的设计要点如下。
(1)PCI总线仲裁
PCI总线是多设备共享的,由于PC中有多个PCI设备,所以需要使用仲裁器。PCI设备有主设备和从设备之分,主设备可以发起PCI数据的传送,从设备只能被动地响应主设备发出的读操作和写操作命令。PCI的仲裁引脚是请求线REQ#和授权线GNT#,只有PCI主设备有这2个引脚。REQ#和GNT#成对地连到仲裁器。各设备之间的REQ#和GNT#互不相连。
PCI总线的仲裁过程:PCI主设备把REQ#电平拉低,表示向仲裁器请求占用总线。经仲裁获准后,仲裁器把该设备的GNT#电平拉低,表示请求获准,该设备就可以使用总线了。当它不再使用总线时,使REQ#信号变为高电平,仲裁器就不再给它分配总线资源。在本系统中,TM1300是PCI主设备,Realtek8029是从设备,不存在共享总线的问题,所以不需要仲裁器,可以简单地把REQ#和GNT#短接,相当于TM1300自己给自己授权。
(2)PCI_IDSEL信号线
PCI有一种特殊的读写周期,称为配置读写,它是指在系统引导时,还没有给设备配置I/O或内存地址,软件只能通过配置读写访问设备。配置读写有2种:0型和1型,采用哪一种取决于总线的硬件连接。当配置读写操作不经过PCI桥时,使用0型;当要经过PCI桥时使用1型。0型直接读写总线上的地址,而1型读写的地址则要经过PCI桥的译码才能成为总线地址。本设计中,TM1300和Realtek8029是用PCI总线直连的,所以使用了0型配置读写。
AD[00..31]是PCI总线的共享地址和数据线。PCI的每次传送都分为地址周期和数据周期。在地址周期,0型读写的内容如下:AD[00]和AD[01]总为“00”,因为配置读写是以双字为单位的;AD[02]~AD[07]是要读写的PCI配置空间的寄存器号;AD[08]~AD[10]是设备的功能号,用于区分1块PCI卡上的多个功能设备,当Realtek8029是单功能设备时,这几位全为0;AD[11]~AD[31]是设备选择位,其中必须有且仅有一位为“1”,物理上表现为总线的某一根为高电平。如果输出高电平的这根线与某块PCI卡的PCI_IDSEL引脚相连,则该卡会被激活,在随后的数据周期,它就会将其PCI配置空间相应寄存器的内容放到总线上供读取。
(3)PCI的引脚处理
PCI_FRAME#、PCI_DEVSEL#、PCI_IRDY#、PCI_TRDY#这4个引脚均是低电平有效,需要接上拉电阻,保证在设备未驱动该引脚时处于稳定的无效状态。上拉电阻的阻值为1kΩ~10kΩ,阻值越小则芯片将该信号驱动为有效的时间越短。但是阻值太小会导致电流过大,因此需要权衡考虑。本设计选用4.7kΩ。
上述3点对脱机情况下PCI设备的互连具有较普遍的参考意义。此外,本系统的设计还有以下特点:
①TM1300的PCI_INTA#引脚配置为输入,以接收Realtek8029的中断。
②PCI时钟由TM1300提供。
③Realtek8029的复位信号也就是TM1300的复位信号,由外部电路提供。
④TM1300的PCI_STOP#、PCI_SERR#引脚悬空,因为Realtek8029不具备相应的附加功能。
⑤TM1300的PCI_INTB#、PCI_INTC#、PCI_INTD#引脚可以用作用户中断。
2 软件设计
软件的结构框图如图2所示。其中,TM1300运行pSOS。pSOS是一个简单的实时多任务嵌入式操作系统,带有pNA网络组件。pNA相当于TCP/IP协议栈的扩展,向上为应用程序提供Socket接口,向下定义了与网络接口层交互的接口,包括8个函数,分别是:ni_init(接口芯片初始化)、ni_broad-cast(发送广播分组)、ni_send(发送普通分组)、ni_getpkb(申请发送缓冲区)、ni_retpkb(归还接收缓冲区)、ni_ioctl(I/O控制操作)、ni_pool(统计量查询)、Announce(网络接口驱动调用它,把接收到的数据包提交给pSOS)。网络接口层在本应用中就是Realtek8029的驱动程序,它通过硬件抽象层来驱动Realtek8029。硬件抽象层是PCI总线的配置读写和I/O读写指令集的总称。
软件执行的流程是:系统首先启动pSOS,由pSOS加载网络接口驱动程序,然后调用驱动程序的ni_init函数,初始化Realtek8029的PCI配置空间并设置其工作参数,启动用户任务。在这里,用户任务是H.263编码进程。它对Vi口读入的源图像进行压缩编码后,调用Socket的接口函数sendto(UDP套接口专用的发送函数)把码流发送给pSOS。pSOS根据UDP协议进行封装后,调用函数ni_send。ni_send完成数据包从系统主内存到Realtek8029片上RAM的拷贝,并启动8029发送数据。在接收情况下,8029收到完整的数据包后,用中断通知CPU。CPU则执行中断服务程序,将数据包从8029片上RAM中拷贝到系统的主内存,然后调用函数Announce,把数据块的指针、数据长度和其他信息提交给pSOS。pSOS将数据包沿协议栈一层层上传,作出相应处理。
PCI配置空间有64B,其片内都集成了寄存器,用于存储该芯片的厂商号、设备号、设备类型等重要代码。此外,还包括控制其总线行为的命令寄存器、基地址寄存器等。
对8029PCI空间的配置需要3个步骤:
(1)扫描总线,以找到8029的配置地址,即PCI_IDSEL引脚和哪根AD线相连。扫描总线时,要对AD[11]~AD[31]每根线进行扫描。如果这根AD线连接了1个PCI设备的PCI_IDSEL引脚,则用配置读函数读取PCI配置空间的0号寄存器时,将返回该设备的设备号和厂商代码。如果这根线实际未连接设备,则返回值是0。
(2)用配置写函数使能I/O读写,即在Command寄存器写入“0x1”。
(3)用配置写函数配置I/O地址,即在I/OBaseAdddress寄存器写入分配给该设备的I/O地址,例如“0xe400”。
3 调试结果
在TM1300视频编码硬件系统上加入PCI接口后对pSOS下8029的驱动程序进行数据传送测试。为进行发送速率测试,先向网络上的1台PC发送UDP数据包(数据包是变长的)。该PC接收并对丢包数进行统计。实验表明,在用网线直连的各种测试速率情况下都没有出错,当接入局域网后在发送速率为4.5Mbps时有突发的少量错误。由于UDP是不可靠的传输方式,因此这种错误是正常的。测试中UDP发送的最高速率可达5Mbps,这与硬件的最高速率(10Mbps)相比还有一定差距,主要原因是数据从系统主内存到8029片上RAM的拷贝过程未采用DMA方式,这是需要改进的地方。
在进行了发送速率测试后,可以进行编码和传送的联合测试。编码任务执行H.263数据压缩,把码流从以太网接口发出。网络上的另一台PC接收该码流并进行解码播放。通过调整编码器的量化步长可以控制编码的输出码率。在实验环境下发现,在量化步长≥5、码率在700Kbps以下时,基本不会丢包,解码得到的图像比较稳定;当量化步长进一步减小、码率接近1Mbps时,出现丢包现象,解码的图像出现彩色方块。出现这种现象是因为H.263编码器对CPU资源的消耗很大,而且数据在主内存和8029片上RAM之间的复制采用的是I/O读写方式,也需要一定的CPU资源。当量化步长<5时,处理复杂度超过了CPU的能力,从而产生了一定的误码。解决问题的途径一方面是改进数据的传送方式(采用DMA),另一方面需要对编码任务进行优化。
参考文献
1 Philips Semiconductors Inc.TM1300 Preliminary Data Book,1999
2 Integrated Systems Inc pSOSystem Programmer′s Reference,1997
3 李鹏.计算机通信技术及其程序设计.西安:西安电子科技大学出版社,1998