CPS1432交換芯片的串行RapidIO互連技術(shù)
本系統(tǒng)中的P2020和CPS1432分別處在兩塊板卡上,采用了ERNI公司的ZD高速連接器進(jìn)行板間互連。由于走線經(jīng)過(guò)背板傳輸,長(zhǎng)度較長(zhǎng),芯片的發(fā)送端信號(hào)需滿足協(xié)議中規(guī)定的長(zhǎng)距離傳輸(Long Run)指標(biāo)。考慮到信號(hào)由芯片傳輸至連接器或通過(guò)背板傳輸引起的衰減,實(shí)際使用中需采用傳輸預(yù)加重和接收器均衡的技術(shù),具體參數(shù)都可通過(guò)芯片寄存器來(lái)設(shè)置和調(diào)整。
本文引用地址:http://cafeforensic.com/article/201609/304015.htm3 軟件方案設(shè)計(jì)
本方案中的SRIO邏輯層業(yè)務(wù)采用消息傳遞方式,借助Linux中RIO子系統(tǒng)將SRIO端口虛擬為一個(gè)以太網(wǎng)口,采用類似于以太網(wǎng)的傳輸方式,這種方式不要求主設(shè)備知道被訪問(wèn)設(shè)備的存儲(chǔ)器狀況。
3.1 Linux下RIO系統(tǒng)
本系統(tǒng)中的嵌入式unux版本為3.0.48,內(nèi)核中RIO子系統(tǒng)已經(jīng)完成RapidIO協(xié)議的解析、封裝、枚舉和規(guī)范實(shí)現(xiàn)等工作,子系統(tǒng)總體設(shè)計(jì)是按照設(shè)備驅(qū)動(dòng)模型的方式提供的,核心思想是一個(gè)三角關(guān)系:總線、設(shè)備和驅(qū)動(dòng)。其中總線riobus在文件rio_driver.c中實(shí)現(xiàn),在配置內(nèi)核時(shí)如果選中該總線,系統(tǒng)運(yùn)行后該總線即會(huì)存在,總線屏蔽了大量RapidIO技術(shù)細(xì)節(jié)。
基于類似網(wǎng)口的RapidIO驅(qū)動(dòng)是在rionet.c文件中提供的,該驅(qū)動(dòng)在總線rio_bus上注冊(cè)成功后,使用rio_register_driver函數(shù)注冊(cè)到內(nèi)核中,而一旦有設(shè)備與該驅(qū)動(dòng)匹配成功,該驅(qū)動(dòng)會(huì)使用register_netde向Linux系統(tǒng)中注冊(cè)一個(gè)網(wǎng)口設(shè)備。
RIO系統(tǒng)中關(guān)于設(shè)備的文件是rio.c、rio_scan.c,其中rio.c完成RapidIO控制器的注冊(cè),rio_scan.c完成枚舉算法、拓?fù)鋻呙韬徒粨Q器件信息處理等工作,并最終調(diào)用rio_add_device函數(shù)向RIO總線注冊(cè)一個(gè)設(shè)備。RIO總線中設(shè)備和驅(qū)動(dòng)的匹配規(guī)則是ID匹配,即所注冊(cè)的RapidIO控制器ID與系統(tǒng)中RapdidIO驅(qū)動(dòng)支持的ID一致,則RIO系統(tǒng)會(huì)自動(dòng)虛擬生成一個(gè)網(wǎng)口設(shè)備。
3.2 端點(diǎn)軟件
RIO子系統(tǒng)是Linux內(nèi)核提供的,RapidIO控制器的設(shè)備描述與CPU硬件資源相關(guān),包括中斷、郵箱、門鈴、端口號(hào)、名稱等資源信息。端點(diǎn)控制器初始化由內(nèi)核中飛思卡爾提供的fsl_rio.c文件實(shí)現(xiàn),主要完成端口和寄存器配置,以及維護(hù)事務(wù)窗口、讀寫事務(wù)呼入/呼出窗口和呼出門鈴窗口的配置,然后填充一個(gè)mport數(shù)據(jù)結(jié)構(gòu),并最終將其注冊(cè)為一個(gè)控制器RIO設(shè)備。
3.3 交換器件
在枚舉過(guò)程中采用深度探測(cè)算法,即先讀取CPS1432總端口數(shù)M,然后依次從0開(kāi)始(除去自身連接到CPS1432的端口)進(jìn)行連接狀態(tài)的讀取,一旦發(fā)現(xiàn)有設(shè)備連接,即先為設(shè)備分配一個(gè)非0的ID,并設(shè)置該設(shè)備與CPS1432相連的端口路由表,主要是寫入CPS1432的全局查找表,該表用于描述ID與端口的對(duì)應(yīng)關(guān)系。系統(tǒng)運(yùn)行后,對(duì)于包含有該設(shè)備ID號(hào)的數(shù)據(jù)包,CPS1432即可將其轉(zhuǎn)發(fā)到對(duì)應(yīng)的端口。
3. 4 系統(tǒng)使用
在uboot中設(shè)定傳入內(nèi)核的參數(shù)riohdid,對(duì)主設(shè)備將其值設(shè)定為0,對(duì)從設(shè)備設(shè)定為0xFF。系統(tǒng)完成枚舉過(guò)程后,即可在各端點(diǎn)看到一個(gè)SRIO網(wǎng)口設(shè)備,設(shè)置同一網(wǎng)段的IP地址,各端點(diǎn)之間可以互相ping通,也可以相互發(fā)送網(wǎng)絡(luò)包,從而實(shí)現(xiàn)互連互通。
結(jié)語(yǔ)
本方案實(shí)際使用中可以將每個(gè)端點(diǎn)和交換芯片都各自獨(dú)立成一個(gè)板卡,最后插到一個(gè)嵌入式機(jī)框中實(shí)現(xiàn)板到板高速互連通信。該方案在某通信設(shè)備上得到實(shí)現(xiàn),運(yùn)行良好,平均無(wú)故障時(shí)間達(dá)到預(yù)期要求,驗(yàn)證了設(shè)計(jì)的正確性。
評(píng)論