CPS1432交换芯片的串行RapidIO互连技术
需要弯折的地方,采用圆弧转折;
④使用中间层走线,避免顶层和底层,且走线外围做包地处理;
⑤尽量不要超过3个过孔(不包括BGA发送端的扇出过孔),信号换层时,要在换层的过孔两侧添加用于回流的地孔。
图5是本系统中的CPS1432芯片外围的局部走线图。
本系统中的P2020和CPS1432分别处在两块板卡上,采用了ERNI公司的ZD高速连接器进行板间互连。由于走线经过背板传输,长度较长,芯片的发送端信号需满足协议中规定的长距离传输(Long Run)指标。考虑到信号由芯片传输至连接器或通过背板传输引起的衰减,实际使用中需采用传输预加重和接收器均衡的技术,具体参数都可通过芯片寄存器来设置和调整。
3 软件方案设计
本方案中的SRIO逻辑层业务采用消息传递方式,借助Linux中RIO子系统将SRIO端口虚拟为一个以太网口,采用类似于以太网的传输方式,这种方式不要求主设备知道被访问设备的存储器状况。
3.1 Linux下RIO系统
本系统中的嵌入式unux版本为3.0.48,内核中RIO子系统已经完成RapidIO协议的解析、封装、枚举和规范实现等工作,子系统总体设计是按照设备驱动模型的方式提供的,核心思想是一个三角关系:总线、设备和驱动。其中总线riobus在文件rio_driver.c中实现,在配置内核时如果选中该总线,系统运行后该总线即会存在,总线屏蔽了大量RapidIO技术细节。
基于类似网口的RapidIO驱动是在rionet.c文件中提供的,该驱动在总线rio_bus上注册成功后,使用rio_register_driver函数注册到内核中,而一旦有设备与该驱动匹配成功,该驱动会使用register_netde向Linux系统中注册一个网口设备。
RIO系统中关于设备的文件是rio.c、rio_scan.c,其中rio.c完成RapidIO控制器的注册,rio_scan.c完成枚举算法、拓扑扫描和交换器件信息处理等工作,并最终调用rio_add_device函数向RIO总线注册一个设备。RIO总线中设备和驱动的匹配规则是ID匹配,即所注册的RapidIO控制器ID与系统中RapdidIO驱动支持的ID一致,则RIO系统会自动虚拟生成一个网口设备。
3.2 端点软件
RIO子系统是Linux内核提供的,RapidIO控制器的设备描述与CPU硬件资源相关,包括中断、邮箱、门铃、端口号、名称等资源信息。端点控制器初始化由内核中飞思卡尔提供的fsl_rio.c文件实现,主要完成端口和寄存器配置,以及维护事务窗口、读写事务呼入/呼出窗口和呼出门铃窗口的配置,然后填充一个mport数据结构,并最终将其注册为一个控制器RIO设备。
3.3 交换器件
在枚举过程中采用深度探测算法,即先读取CPS1432总端口数M,然后依次从0开始(除去自身连接到CPS1432的端口)进行连接状态的读取,一旦发现有设备连接,即先为设备分配一个非0的ID,并设置该设备与CPS1432相连的端口路由表,主要是写入CPS1432的全局查找表,该表用于描述ID与端口的对应关系。系统运行后,对于包含有该设备ID号的数据包,CPS1432即可将其转发到对应的端口。
3. 4 系统使用
在uboot中设定传入内核的参数riohdid,对主设备将其值设定为0,对从设备设定为0xFF。系统完成枚举过程后,即可在各端点看到一个SRIO网口设备,设置同一网段的IP地址,各端点之间可以互相ping通,也可以相互发送网络包,从而实现互连互通。
结语
本方案实际使用中可以将每个端点和交换芯片都各自独立成一个板卡,最后插到一个嵌入式机框中实现板到板高速互连通信。该方案在某通信设备上得到实现,运行良好,平均无故障时间达到预期要求,验证了设计的正确性。
- 串行RapidIO连接功能增强DSP协处理能力(04-30)
- 采用串行RapidIO连接功能增强DSP协处理能力(10-09)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)