張銳
為了使ARM架構(gòu)的CPU能通過PCIE總線連接到RapidIO系統(tǒng)中,利用NXP公司的IMX6Q處理器PCIE接口和RapidIO橋芯片Tsi721的硬件特性,在Linux操作系統(tǒng)下開發(fā)該芯片的驅(qū)動程序,實現(xiàn)了PCIE總線網(wǎng)絡(luò)和RapidIO總線網(wǎng)絡(luò)的無縫對接。通過實際測試,驗證了工作的正確性。
RapidIO總線是當前廣泛應(yīng)用的一種嵌入式系統(tǒng)內(nèi)部互聯(lián)架構(gòu),具有高帶寬、低延遲,支持多處理器等特征,比千兆以太網(wǎng)提供更高的傳輸速率,比PCIE更適合組建平行通信網(wǎng)絡(luò)。本設(shè)計采用了FREESCALE公司的i.MX6Q芯片作為核心CPU,它是基于ARMCortex-A9架構(gòu),40nm工藝制程,最高運行頻率可達1.2GHz,具備PCIE2.0接口,可以進行功能擴展,憑借IMX6Q的此功能,選擇美國IDT公司生產(chǎn)的PCIE轉(zhuǎn)RapidIO橋接芯片Tsi721與之無縫對接,來實現(xiàn)RapidIO總線功能。為將SerialRapidIO總線更好地應(yīng)用到ARM處理器系統(tǒng)中,本文提出了一種基于IMX6Q+TSI721的解決方案。
RapidIO協(xié)議架構(gòu)
RapidIO是一個開放的標準,宗旨是為嵌入式系統(tǒng)開發(fā)可靠的、高性能、基于包交換的互連技術(shù)。主要用于系統(tǒng)內(nèi)部互連,支持芯片到芯片、板到板間的通信。為了滿足靈活性和可擴展性的要求,RapidIO分為3個層次:邏輯層、傳輸層及物理層。如圖1所示。
CPU硬件設(shè)計
ARM嵌入式Rapidio通信平臺硬件由IMX6Q+TSI721芯片組成,IMX6Q集成1路PCIE接口,外接TSI721橋接芯片,擴展Rapidio總線接口,外接DDR3存儲器。其中FLASH用于存儲Bootloader、操作系統(tǒng)內(nèi)核、文件系統(tǒng),在IMX6Q內(nèi)運行Linux操作系統(tǒng),Linux操作系統(tǒng)集成協(xié)議棧,通過BSP與硬件進行通信,圖2是硬件平臺架構(gòu)示意圖。
IMX6Q電源設(shè)計
此次設(shè)計辦卡的功率大概在5W左右,為了留出充足的余量,使用5V2A的適配器。CPU的供電電壓分為核電壓和IO電壓,并且要求核心電壓的上電時間要早于IO電壓,綜合考慮到CPU的用電量和用電余量,采用RT8074GSP和MP2143DJ兩種DCDC芯片原理如圖3和圖4所示。
當核心電壓上電完成后,控制電壓VDDHIGH_CAP打開P溝道MOS管AO3415A實現(xiàn)IO的供電從而滿足上電順序的要求。
TSI721硬件設(shè)計
Tsi721可提供8個直接內(nèi)存存取DMA和4個信息引擎/通道,每個通道都可實現(xiàn)16Gbps速度的數(shù)據(jù)傳輸,從而在多核多線程系統(tǒng)中實現(xiàn)對單個內(nèi)核中多引擎任務(wù)的分配,最大程度簡化了系統(tǒng)級軟件的開發(fā)。TSI721的電路設(shè)計主要包括基本配置電路設(shè)計、時鐘電路設(shè)計、SRIO接口設(shè)計、PCIE接口設(shè)計與電源設(shè)計。Tsi721的基本配置電路主要包括JTAG接口、I2C接口、復(fù)位信號與GPIO狀態(tài)配置。JTAG信號引腳均懸空。Tsi721的GPIO除了具有普通GPIO的功能之外,還要用于初始化配置。GPIO[12:0]信號在復(fù)位信號使能后的4000個時鐘周期內(nèi),是作為初始化配置使用的,在初始化完成之后這些GPIO引腳可以用于普通GPIO功能。表1是Tsi721的初始化配置引腳電平。
TSI721時鐘設(shè)計
Tsi721有2種時鐘模式,一種是PCIECommonClock模式(CLKMOD=1),即PCI-E端口與SRIO端口的參考時鐘頻率可以不相同,另一種模式是PCIENon-commonClock(CLKMOD=0),這種模式下PCCLK與REFCLK要使用相同的時鐘頻率。設(shè)計中采用PCIECommonClock模式,這時Tsi721的兩路時鐘采用不同的時鐘頻率,PCI-E參考時鐘PCCLK使用PCIe的UPStram端口提供的100MHz時鐘信號。另一個是SRIO參考時鐘REFCLK,時鐘頻率為156.25MHz,通過本地LVDS晶振提供,時鐘信號采用交流耦合輸入,如圖6所示。
Linux設(shè)備驅(qū)動實現(xiàn)
Linux源碼編譯
Linux內(nèi)核集成的RapidIO子系統(tǒng)驅(qū)動包括全局層、總線層和設(shè)備層共3層數(shù)據(jù)結(jié)構(gòu),用于維護管理RapidIO網(wǎng)絡(luò)中各節(jié)點的枚舉、地址分配、路由表建立、節(jié)點動態(tài)入網(wǎng)出網(wǎng)等。內(nèi)核把Tsi721芯片虛擬為一個以太網(wǎng)設(shè)備,驅(qū)動通過RapidIO的message機制通信。將Tsi721芯片實現(xiàn)的RapidIO節(jié)點設(shè)計成為一個字符設(shè)備,對應(yīng)用層提供字符設(shè)備的讀寫訪問方式,驅(qū)動采用全局共享存儲器的方式實現(xiàn)Nwrite命令和Nread命令。Tsi721橋芯片驅(qū)動由PCIE設(shè)備驅(qū)動Tsi721及RapidIO子系統(tǒng)配置及字符設(shè)備驅(qū)動部分組成,驅(qū)動源碼修改之后,接下來的工作就是編譯工作,大概分三大部分:
(1)編譯bootloader
先將u-boot源碼拷貝到PC的ubuntu系統(tǒng)的根目錄(實際操作可以拷貝到任意目錄下)下,然后使用命令解壓命令。解壓之后配置u-boot,編譯u-boot。編譯結(jié)束后,會生成一個u-boot.bin的鏡像。這個文件可以通過USBOTG下載到板卡上。
(2)編譯linux內(nèi)核
先將修改過的linux內(nèi)核源碼拷貝到PC的ubuntu系統(tǒng)的根目錄(實際操作可以拷貝到任意目錄下)下,然后使用命令解壓命令。解壓之后配置,編譯。編譯結(jié)束后,錄下會得到一個名字uImage的鏡像,這個文件可以通過USBOTG下載到板卡上。
(3)Linux文件系統(tǒng)制作
按照不同的文件系統(tǒng)格式,再Linux系統(tǒng)下進行開發(fā),制作成自己需要的文件系統(tǒng),通過USBOTG下載到板卡上。
Tsi721的設(shè)備驅(qū)動實現(xiàn)
PCIE總線是一種即插即用的總線,在Linux內(nèi)核的支持下,當探測到設(shè)備以后能夠確定其總線號設(shè)備號和功能號,然后自動地為設(shè)備分配所需要的IO端口內(nèi)存資源和中斷號如圖3所示,驅(qū)動作為模塊加載以后,tsi721_probe函數(shù)先根據(jù)Tsi721芯片的設(shè)備標識DeviceID(0x80A)和供應(yīng)商標識VendorID(0x111D)遍歷內(nèi)核中PCIE設(shè)備鏈表,一一進行匹配匹配之后,從pci_device結(jié)構(gòu)中獲取內(nèi)核分配給Tsi721芯片設(shè)備的資源然后,調(diào)用函數(shù)pci_enable_device把Tsi721配置空間的Command域的bit0和bit1置成1,從而達到開啟該PCIE設(shè)備的目的,再調(diào)用函數(shù)pci_request_regions通知內(nèi)核該設(shè)備對應(yīng)的IO端口和內(nèi)存資源已經(jīng)使用其他的PCIE設(shè)備不能再使用這個區(qū)域調(diào)用pci_ioremap_bar把剛剛申請到得物理內(nèi)存映射成為虛擬內(nèi)存以供驅(qū)動訪問再根據(jù)分配的中斷號調(diào)用函數(shù)reques_irq掛載中斷服務(wù)程序,中斷服務(wù)程序處理BDMA中斷doorbell中斷和message中斷等課題主要是在IMX6Q硬件平臺基礎(chǔ)上,基于Linux系統(tǒng)開發(fā)的Tsi721橋芯片驅(qū)動程序?qū)崿F(xiàn)了IO通信的主要功能。IMX6Q模塊通過PCI-Express轉(zhuǎn)SRIO橋連接至SRIO交換芯片上,使得CPU模塊成為系統(tǒng)內(nèi)部的一個SRIO通信節(jié)點,可以直接實現(xiàn)底層軟件的監(jiān)控與系統(tǒng)管理與動態(tài)配置功能,系統(tǒng)具有完善的底層監(jiān)控與系統(tǒng)管理功能,以及動態(tài)重構(gòu)的計算資源與網(wǎng)絡(luò)架構(gòu),可以滿足多種應(yīng)用領(lǐng)域與應(yīng)用場景的需求。