張銳



為了使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通信節點,可以直接實現底層軟件的監控與系統管理與動態配置功能,系統具有完善的底層監控與系統管理功能,以及動態重構的計算資源與網絡架構,可以滿足多種應用領域與應用場景的需求。