基于IMX6Q+TSI721的RapidIO硬件设计与实现

2021-08-14 05:28张锐
计算机与网络 2021年13期
关键词:内核总线时钟

张锐

为了使ARM架构的CPU能通过PCIE总线连接到RapidIO系统中,利用NXP公司的IMX6Q处理器PCIE接口和RapidIO桥芯片Tsi721的硬件特性,在Linux操作系统下开发该芯片的驱动程序,实现了PCIE总线网络和RapidIO总线网络的无缝对接。通过实际测试,验证了工作的正确性。

RapidIO总线是当前广泛应用的一种嵌入式系统内部互联架构,具有高带宽、低延迟,支持多处理器等特征,比千兆以太网提供更高的传输速率,比PCIE更适合组建平行通信网络。本设计采用了FREESCALE公司的i.MX6Q芯片作为核心CPU,它是基于ARMCortex-A9架构,40nm工艺制程,最高运行频率可达1.2GHz,具备PCIE2.0接口,可以进行功能扩展,凭借IMX6Q的此功能,选择美国IDT公司生产的PCIE转RapidIO桥接芯片Tsi721与之无缝对接,来实现RapidIO总线功能。为将SerialRapidIO总线更好地应用到ARM处理器系统中,本文提出了一种基于IMX6Q+TSI721的解决方案。

RapidIO协议架构

RapidIO是一个开放的标准,宗旨是为嵌入式系统开发可靠的、高性能、基于包交换的互连技术。主要用于系统内部互连,支持芯片到芯片、板到板间的通信。为了满足灵活性和可扩展性的要求,RapidIO分为3个层次:逻辑层、传输层及物理层。如图1所示。

CPU硬件设计

ARM嵌入式Rapidio通信平台硬件由IMX6Q+TSI721芯片组成,IMX6Q集成1路PCIE接口,外接TSI721桥接芯片,扩展Rapidio总线接口,外接DDR3存储器。其中FLASH用于存储Bootloader、操作系统内核、文件系统,在IMX6Q内运行Linux操作系统,Linux操作系统集成协议栈,通过BSP与硬件进行通信,图2是硬件平台架构示意图。

IMX6Q电源设计

此次设计办卡的功率大概在5W左右,为了留出充足的余量,使用5V2A的适配器。CPU的供电电压分为核电压和IO电压,并且要求核心电压的上电时间要早于IO电压,综合考虑到CPU的用电量和用电余量,采用RT8074GSP和MP2143DJ两种DCDC芯片原理如图3和图4所示。

当核心电压上电完成后,控制电压VDDHIGH_CAP打开P沟道MOS管AO3415A实现IO的供电从而满足上电顺序的要求。

TSI721硬件设计

Tsi721可提供8个直接内存存取DMA和4个信息引擎/通道,每个通道都可实现16Gbps速度的数据传输,从而在多核多线程系统中实现对单个内核中多引擎任务的分配,最大程度简化了系统级软件的开发。TSI721的电路设计主要包括基本配置电路设计、时钟电路设计、SRIO接口设计、PCIE接口设计与电源设计。Tsi721的基本配置电路主要包括JTAG接口、I2C接口、复位信号与GPIO状态配置。JTAG信号引脚均悬空。Tsi721的GPIO除了具有普通GPIO的功能之外,还要用于初始化配置。GPIO[12:0]信号在复位信号使能后的4000个时钟周期内,是作为初始化配置使用的,在初始化完成之后这些GPIO引脚可以用于普通GPIO功能。表1是Tsi721的初始化配置引脚电平。

TSI721时钟设计

Tsi721有2种时钟模式,一种是PCIECommonClock模式(CLKMOD=1),即PCI-E端口与SRIO端口的参考时钟频率可以不相同,另一种模式是PCIENon-commonClock(CLKMOD=0),这种模式下PCCLK与REFCLK要使用相同的时钟频率。设计中采用PCIECommonClock模式,这时Tsi721的两路时钟采用不同的时钟频率,PCI-E参考时钟PCCLK使用PCIe的UPStram端口提供的100MHz时钟信号。另一个是SRIO参考时钟REFCLK,时钟频率为156.25MHz,通过本地LVDS晶振提供,时钟信号采用交流耦合输入,如图6所示。

Linux设备驱动实现

Linux源码编译

Linux内核集成的RapidIO子系统驱动包括全局层、总线层和设备层共3层数据结构,用于维护管理RapidIO网络中各节点的枚举、地址分配、路由表建立、节点动态入网出网等。内核把Tsi721芯片虚拟为一个以太网设备,驱动通过RapidIO的message机制通信。将Tsi721芯片实现的RapidIO节点设计成为一个字符设备,对应用层提供字符设备的读写访问方式,驱动采用全局共享存储器的方式实现Nwrite命令和Nread命令。Tsi721桥芯片驱动由PCIE设备驱动Tsi721及RapidIO子系统配置及字符设备驱动部分组成,驱动源码修改之后,接下来的工作就是编译工作,大概分三大部分:

(1)编译bootloader

先将u-boot源码拷贝到PC的ubuntu系统的根目录(实际操作可以拷贝到任意目录下)下,然后使用命令解压命令。解压之后配置u-boot,编译u-boot。编译结束后,会生成一个u-boot.bin的镜像。这个文件可以通过USBOTG下载到板卡上。

(2)编译linux内核

先将修改过的linux内核源码拷贝到PC的ubuntu系统的根目录(实际操作可以拷贝到任意目录下)下,然后使用命令解压命令。解压之后配置,編译。编译结束后,录下会得到一个名字uImage的镜像,这个文件可以通过USBOTG下载到板卡上。

(3)Linux文件系统制作

按照不同的文件系统格式,再Linux系统下进行开发,制作成自己需要的文件系统,通过USBOTG下载到板卡上。

Tsi721的设备驱动实现

PCIE总线是一种即插即用的总线,在Linux内核的支持下,当探测到设备以后能够确定其总线号设备号和功能号,然后自动地为设备分配所需要的IO端口内存资源和中断号如图3所示,驱动作为模块加载以后,tsi721_probe函数先根据Tsi721芯片的设备标识DeviceID(0x80A)和供应商标识VendorID(0x111D)遍历内核中PCIE设备链表,一一进行匹配匹配之后,从pci_device结构中获取内核分配给Tsi721芯片设备的资源然后,调用函数pci_enable_device把Tsi721配置空间的Command域的bit0和bit1置成1,从而达到开启该PCIE设备的目的,再调用函数pci_request_regions通知内核该设备对应的IO端口和内存资源已经使用其他的PCIE设备不能再使用这个区域调用pci_ioremap_bar把刚刚申请到得物理内存映射成为虚拟内存以供驱动访问再根据分配的中断号调用函数reques_irq挂载中断服务程序,中断服务程序处理BDMA中断doorbell中断和message中断等课题主要是在IMX6Q硬件平台基础上,基于Linux系统开发的Tsi721桥芯片驱动程序实现了IO通信的主要功能。IMX6Q模块通过PCI-Express转SRIO桥连接至SRIO交换芯片上,使得CPU模块成为系统内部的一个SRIO通信节点,可以直接实现底层软件的监控与系统管理与动态配置功能,系统具有完善的底层监控与系统管理功能,以及动态重构的计算资源与网络架构,可以满足多种应用领域与应用场景的需求。

猜你喜欢
内核总线时钟
人民情怀:柳青为文为人的内核(评论)
关于CAN总线的地铁屏蔽门控制思路论述
初春
微软发布新Edge浏览器预览版下载换装Chrome内核
这个时钟一根针
有趣的时钟
时钟会开“花”
Q&A热线
PCI9030及其PCI总线接口电路设计
具备DV解码功能的DVD编码器——数字视频刻录应用的理想选择