曹坤澤,楊朝陽,周 奎,彭 強
基于PCIe總線的車載高速網(wǎng)絡(luò)設(shè)計與實現(xiàn)
曹坤澤1,楊朝陽1,周 奎2,彭 強3
(1.湖北汽車工業(yè)學(xué)院 汽車工程學(xué)院,湖北 十堰 442000;2.湖北汽車工業(yè)學(xué)院 汽車工程師學(xué)院,湖北 十堰 442000;3.湖北汽車工業(yè)學(xué)院 電氣與信息工程學(xué)院,湖北 十堰 442000)
為了滿足自動駕駛汽車在行駛過程中對攝像頭數(shù)據(jù)傳輸高速可靠等要求,設(shè)計了一種基于PCI-Express的高速實時視頻傳輸系統(tǒng)。硬件上選用兩塊NXP的SBC-S32V234開發(fā)板作為PCIe的節(jié)點,端點(End Point, EP)通過MAX9286解串器連接路攝像頭進(jìn)行視頻采集,完成攝像頭串行接口2(Camera Serial Interface-2, CSI-2)與PCIe的協(xié)議轉(zhuǎn)換;根聯(lián)合體(Root Complex, RC)一端作為數(shù)據(jù)接收端,接收EP端發(fā)送過來的視頻;EP與RC之間通過兩塊透傳芯片連接,兩塊芯片之間進(jìn)行透明傳輸。軟件上對嵌入式Linux系統(tǒng)進(jìn)行了構(gòu)建與部署,并設(shè)計了攝像頭驅(qū)動程序與PCIe發(fā)送的應(yīng)用程序。測試結(jié)果表明,PCIe傳輸速率最高達(dá)到1.5 Gb/s,實現(xiàn)了視頻數(shù)據(jù)高效、穩(wěn)定、低延時傳輸,為車載視頻傳輸提供一個新的解決方案。
Linux系統(tǒng);PCIe通信;攝像頭驅(qū)動;視頻傳輸;車載高速網(wǎng)絡(luò)
隨著自動駕駛汽車的不斷發(fā)展,對攝像頭視頻采集幀率和分辨率的要求不斷提高[1],進(jìn)一步增加了車載攝像頭的數(shù)據(jù)帶寬,這對攝像頭傳輸性能提出了更高的要求。某自動駕駛企業(yè)提出要求實現(xiàn)車載八路高清攝像頭的低延時、高畫質(zhì)視頻傳輸。
傳統(tǒng)車載網(wǎng)絡(luò)主要包括局部連接網(wǎng)絡(luò)(Local Interconnect Network, LIN)、控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)、FlexRay[2],其優(yōu)點是實時性高,但帶寬普遍較低,F(xiàn)lexRay的帶寬(2×10 Mbit/s)相較于CAN(1 Mbit/s)、LIN(19.2 Kbit/s)總線的最大帶寬有了較大提高,但也無法滿足高帶寬的攝像頭數(shù)據(jù)傳輸。近年來,以太網(wǎng)逐漸成為汽車網(wǎng)絡(luò)主干,視頻傳輸也大都基于以太網(wǎng)進(jìn)行傳輸,相關(guān)視頻實時傳輸延時在200 ms~500 ms不等。馮云婷等[3]采用百兆以太網(wǎng)基于用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol, UDP)實現(xiàn)了視頻傳輸,但視頻傳輸實際帶寬只達(dá)到54 Mbps,視頻幀率只有10 fps~12 fps。吳勝兵[4]、李昌遠(yuǎn)[5]采用H.264編碼的方式來降低車載以太網(wǎng)視頻傳輸?shù)膸?,但在網(wǎng)絡(luò)環(huán)境差的情況下,攝像頭視頻傳輸過程中因壓縮碼率而導(dǎo)致視頻質(zhì)量差。
基于以上研究,傳統(tǒng)車載網(wǎng)絡(luò)、百兆以太網(wǎng)均無法滿足企業(yè)要求的八路高清攝像頭的帶寬需求及性能要求。PCIe總線使用了高速差分總線,能夠使用更少的信號線就可以達(dá)到需要許多單端并行數(shù)據(jù)信號才能達(dá)到的總線帶寬,具有更高的傳輸速率和穩(wěn)定性[6-7]。因此本文提出采用PCIe總線的車載高速視頻傳輸方案。
本文以PCIe車載高速網(wǎng)絡(luò)為研究對象,采用NXP的SBC-S32V234開發(fā)板作為控制器,實現(xiàn)攝像頭驅(qū)動設(shè)計、攝像頭采集、PCIe高速傳輸通道的開發(fā),實現(xiàn)攝像頭采集的圖像數(shù)據(jù)以PCIe1.0 Gen1模式的傳輸速率穩(wěn)定傳輸,并通過連接兩塊透傳芯片,解決了PCIe傳輸距離過短的問題,可實現(xiàn)遠(yuǎn)距離傳輸。
PCIe高速視頻傳輸系統(tǒng)硬件主要由兩塊SBC-S32V234開發(fā)板、兩塊MAX9286解串器、8路AR0143攝像頭以及兩塊透傳芯片組成。系統(tǒng)的硬件架構(gòu)如圖1所示。
圖1 整體硬件架構(gòu)圖
協(xié)議轉(zhuǎn)換芯片選用NXP的SBC-S32V234作為主控芯片,并作為PCIe鏈路的EP端點,八路攝像頭采用兩片吉比特多媒體串行鏈路(Gigabit Multimedia Serial Link, GMSL)四通道解串器MAX9286作為視頻解串器,將視頻數(shù)據(jù)匯總后由兩路CSI-2總線發(fā)送給主控芯片上進(jìn)行數(shù)據(jù)協(xié)議轉(zhuǎn)換,將轉(zhuǎn)換后的視頻數(shù)據(jù)通過兩塊透傳芯片之間的HDBASE-T接口透明傳輸發(fā)送至另一塊SBC-S32V234上(RC端),并將視頻顯示到顯示屏上。
本文所設(shè)計的PCIe高速視頻傳輸系統(tǒng)以NXP的S32V234芯片作為平臺完成嵌入式Linux系統(tǒng)的構(gòu)建與部署,并在嵌入式Linux系統(tǒng)下完成底層攝像頭驅(qū)動開發(fā)、上層視頻應(yīng)用程序設(shè)計。軟件架構(gòu)如圖2所示,由應(yīng)用程序、鏈接庫、驅(qū)動程序等部分組成。鏈接庫主要用到了C庫、多線程庫、傳感器設(shè)備接口(Sensor Device Interface, SDI)庫以及攝像頭驅(qū)動開發(fā)所用到的攝像頭用戶庫和特定傳感器庫。驅(qū)動主要包括I2C驅(qū)動、攝像頭驅(qū)動、CSI驅(qū)動以及PCIe驅(qū)動。
圖2 軟件架構(gòu)圖
電源供給系統(tǒng)輸入電壓為12 V,輸出電壓 12 V/5 A為解串器MAX9286供電,12 V/8 A為S32V234開發(fā)板供電。設(shè)計15 V防涌浪、防反接以及共模電感濾波(330 μH)對電源進(jìn)行防護(hù)。系統(tǒng)電源供給電路如圖3所示。
圖3 電源供給電路圖
八路攝像頭采用兩塊解串器MAX9286與S32V234開發(fā)板相連。MAX9286為四通道GMSL解串器,基于LVDS傳輸,同時支持四路攝像頭數(shù)據(jù)傳入。攝像頭與解串器采用信號同軸線纜連接,接口部分采用公頭的FAKRA連接。
MAX9286數(shù)據(jù)采用CSI-2輸出,每通道的傳輸速率為80 Mbps~1 200 Mbps,帶時鐘展寬用于系統(tǒng)上電和驗證的外設(shè)功能,內(nèi)置PRBS檢測器,用于串行鏈路的BER測試以及2個專用GPIO端口,嚴(yán)格滿足汽車工業(yè)要求。
S32V234開發(fā)板提供兩路與MAX9286數(shù)據(jù)板對接的MIPI-CSI接口,可直接對接MAX9286,并對MAX9286數(shù)據(jù)板及攝像頭提供工作電源與時鐘。
S32V234開發(fā)板提供標(biāo)準(zhǔn)的M.2接口形式的MINI-PCIE(PCI EXP 52)。但透傳芯片擴展接口板提供的是Finger形式的PCIE x4和Slot形式的PCIE x8無法直接相連,需要外接MINI-PCIE轉(zhuǎn)PCIe轉(zhuǎn)接卡。連接方案如圖4所示。
圖4 連接方案
驅(qū)動程序分為內(nèi)核空間和用戶空間,控制器內(nèi)核版本為Linux4.14。以注冊I2C設(shè)備為例,在內(nèi)核空間下,要注冊一個新的I2C設(shè)備,必須調(diào)用CAM_ClientAdd()函數(shù),在CamI2cCfg_t結(jié)構(gòu)體指針中提供傳感器細(xì)節(jié),如果沒有返回0,則注冊成功。攝像頭結(jié)構(gòu)存儲在驅(qū)動程序內(nèi)核空間的一個雙鏈表中。這些句柄用作攝像頭設(shè)備的通用標(biāo)識,并傳遞給用戶空間。攝像頭驅(qū)動主要用到的內(nèi)核級應(yīng)用程序編程接口(Application Program- ming Interface, API)如表1所示。
攝像頭驅(qū)動程序包含一個用戶空間庫,用于用戶在應(yīng)用程序中抽象內(nèi)核空間API訪問。用戶庫也是特定于設(shè)備的代碼,它為特定傳感器實現(xiàn)用戶空間驅(qū)動程序。攝像頭驅(qū)動程序用戶級API的定義如表2所示。
表1 內(nèi)核級API
表2 用戶級API
將上述函數(shù)編譯并打包成ko驅(qū)動,在Linux內(nèi)核中加載驅(qū)動,應(yīng)用程序通過訪問用戶空間的API來嵌入到內(nèi)核空間,實現(xiàn)攝像頭的調(diào)用。
EP設(shè)備與RC設(shè)備之間的數(shù)據(jù)傳輸采用內(nèi)存映射的方法,即把PCIe設(shè)備空間映射到存儲地址空間,圖5為一個完整的RC與EP空間映射模型。圖中outbound表示存儲器域訪問PCI域,發(fā)起訪問的一側(cè)需要進(jìn)行outbound去訪問對端;inbound表示PCI域訪問存儲器域,被訪問的一側(cè)需要進(jìn)行inbound,使得對端能夠訪問。RC端要通過PCIe鏈路讀取EP端攝像頭數(shù)據(jù),RC端需要配置outbound(在內(nèi)核中已配好),EP端需要配置inbound,從存儲器域地址0xc1000000 inbound到PCIe的基地址寄存器BAR2(0x72000000),這樣就建立了RC端0xc2000000到EP端0xc1000000的映射。EP端將攝像頭數(shù)據(jù)寫入到物理地址0xc1000000中,RC端即可通過訪問物理地址0xc2000000來獲取EP端的攝像頭數(shù)據(jù)。
圖5 EP與RC相互訪問
PCIe控制器提供直接存儲器訪問(Direct Memory Access, DMA)功能[8],為了提高PCIe總線數(shù)據(jù)傳輸?shù)乃俾剩x用DMA的數(shù)據(jù)傳輸方式來批量地異步數(shù)據(jù)傳輸。配置設(shè)備的DMA寄存器,EP端分配的DMA緩沖區(qū)的地址通過inbound 映射到設(shè)備的PCI域中,實現(xiàn)了PCIe的DMA傳輸。DMA數(shù)據(jù)傳輸不需要CPU介入,大大減輕了CPU的負(fù)擔(dān),實現(xiàn)更高效率的傳輸,有效提升了系統(tǒng)的傳輸性能。
EP端應(yīng)用程序設(shè)計用到了數(shù)字分量串行接口(Serial Digital Interface, SDI)庫、C庫和多線程庫。SDI庫是由NXP 官方用于攝像頭程序開發(fā)的VSDK1.5中提供的控制圖像數(shù)據(jù)輸入的庫。為了控制攝像頭硬件,SDI使用驅(qū)動程序中提供的API。為了方便圖像數(shù)據(jù)的存儲和管理,SDI庫提供了Opencv庫中cv::UMat 1:1克隆的SUMat圖像數(shù)據(jù)容器來對幀緩沖區(qū)進(jìn)行操作。EP端應(yīng)用程序采用多線程的方式進(jìn)行圖像抓取與PCIe發(fā)送。圖像抓取在主線程里完成,PCIe發(fā)送在發(fā)送線程里完成。EP端與RC端握手成功后,將獲取的圖像數(shù)據(jù)發(fā)送至RC端,通過按鍵來控制發(fā)送第幾個攝像頭的圖像數(shù)據(jù)。EP端應(yīng)用程序流程圖如圖6所示。
圖6 EP端應(yīng)用程序流程圖
RC端應(yīng)用程序同樣用到了SDI庫、C庫和多線程庫。RC端與EP端握手成功后,將EP端發(fā)送過來的一幀視頻數(shù)據(jù)保存到SUMat圖像容器中,并顯示到顯示屏上。RC端應(yīng)用程序流程圖如圖7所示。
圖7 RC端應(yīng)用程序流程圖
系統(tǒng)實物圖如圖8所示。
圖8 系統(tǒng)實物圖
兩塊開發(fā)板用PCIe線與透傳芯片連接好后, u-boot對PCIe設(shè)備進(jìn)行掃描,啟動Linux內(nèi)核,加載PCIe驅(qū)動,完成連接PCIE鏈路、設(shè)置中斷節(jié)點、PCIE主橋的掛接后, Linux內(nèi)核開始進(jìn)行總線掃描。通過串口終端可以查看內(nèi)核打印信息,RC端打印信息出現(xiàn)PCIe link up則表示兩個設(shè)備之間PCIe鏈路正常連接。如圖9所示,EP與RC設(shè)備鏈路正常連接,PCIe模式為Gen1模式(對應(yīng)PCIe1.0 x1寬度的PCIe鏈路),理論上最大傳輸速率為2.5 GT/s,可用帶寬為2.0 Gb/s(250 MB/s)。
圖9 RC端內(nèi)核打印信息
EP設(shè)備連接8個攝像頭,將采集到的攝像頭數(shù)據(jù)存放在攝像頭buffer中,通過DMA方式傳輸?shù)絇CIe數(shù)據(jù)域中并發(fā)送給RC設(shè)備。RC設(shè)備通過PCIe接口接收到攝像頭數(shù)據(jù)后,把攝像頭數(shù)據(jù)從PCIe數(shù)據(jù)域讀出然后再顯示。
對于PCIe實際傳輸速率采用以下計算方式:
Rate=(Picture_Size/Period_sec)×1.25×109/1 0242
Rate表示實際傳輸速率,單位為MB/s;Picture_Size為一幀720 p兩通道圖像的大小,單位為byte;Period_sec為一幀圖像傳輸?shù)臅r間開銷,單位為納秒;PCIe1.0采用 8b/10b編碼方案,每傳輸8個bit,需要發(fā)送10個bit,因此要乘以1.25。經(jīng)測試得到PCIe實際傳輸速率穩(wěn)定在 180 MB/s(1.4 Gb/s)以上,最高達(dá)到1.5 Gb/s。
圖10為RC端顯示的一路攝像頭視頻,并對視頻延時進(jìn)行了簡單測試。圖中測試照片顯示,視頻延時時間穩(wěn)定在130 ms,相較于以太網(wǎng)傳輸?shù)囊曨l延時有了較大的提高。由于PCIe的高帶寬,視頻采集的原始數(shù)據(jù),直接通過內(nèi)存映射到視頻接收端,不像H.264編碼傳輸技術(shù)受到碼率、網(wǎng)絡(luò)環(huán)境的影響造成視頻出現(xiàn)馬賽克、卡頓等現(xiàn)象,因此視頻質(zhì)量更高。
圖10 視頻顯示與延時測試
本文所設(shè)計的PCIe車載高速實時視頻傳輸系統(tǒng),軟硬件設(shè)計具有很強的通用性,應(yīng)用場景廣泛,且通過長時間運行測試,具有穩(wěn)定的視頻傳輸效果。視頻延時時間降低到了130 ms,相比于百兆局域網(wǎng)的延時200 ms~500 ms,具有很大提升。EP設(shè)備與RC設(shè)備之間通過中繼芯片連接,中繼之間采用最長可達(dá)十五米的雙絞線連接,解決了PCIe線過短,無法遠(yuǎn)距離傳輸?shù)膯栴},拓寬了系統(tǒng)的應(yīng)用場景,且中繼芯片不需要程序編寫,上電即可使用,簡化了開發(fā)過程,具有很強的通用性。PCIe傳輸速率最高達(dá)到了1.5 Gb/s。由于八路攝像頭占據(jù)了一定的系統(tǒng)總帶寬,沒有達(dá)到PCIe Gen1模式理論能夠達(dá)到的250 MB/s的可用帶寬,但完全可以滿足自動駕駛汽車在行駛過程中對攝像頭數(shù)據(jù)傳輸高速可靠等要求,且控制器采用PCIe DMA的傳輸方式,大大減輕CPU的負(fù)擔(dān),提高了系統(tǒng)的傳輸性能,為今后車載信息傳輸提供了一個高效可行的方案。
[1] 李上峰.基于PowerPC的高速傳輸技術(shù)研究[D].西安:西安電子科技大學(xué),2017.
[2] 吳晨曉.汽車網(wǎng)絡(luò)通信總線現(xiàn)狀及發(fā)展[J].汽車實用技術(shù),2019,44(2):203-204.
[3] 馮云婷,張軍,毛紫荊.實時以太網(wǎng)視頻傳輸系統(tǒng)的設(shè)計[J].天津職業(yè)技術(shù)師范大學(xué)學(xué)報,2021,31(4):40-44, 51.
[4] 吳勝兵.基于海思Hi3521A芯片H264編解碼視頻傳輸[D].成都:電子科技大學(xué),2020.
[5] 李昌遠(yuǎn).基于車載以太網(wǎng)的多媒體系統(tǒng)應(yīng)用研究[D].長春:吉林大學(xué),2017.
[6] 徐健,張建泉,張健.基于PCIE非透明橋的嵌入式異構(gòu)平臺設(shè)計[J].微電子學(xué)與計算機,2018,35(1):26- 30.
[7] 孫銘.嵌入式平臺中的PCI Express總線技術(shù)研究[D].西安:西安電子科技大學(xué),2015.
[8] 曹科庭.基于PCIE的DMA高速數(shù)據(jù)傳輸控制器的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2015.
Design and Implementation of High-speed Network Based on PCIe Bus
CAO Kunze1, YANG Zhaoyang1, ZHOU Kui2, PENG Qiang3
( 1.School of Automotive Engineering, Hubei University of Automotive Technology, Shiyan 442000, China;2.Institute of Automotive Engineers, Hubei University of Automotive Technology, Shiyan 442000, China;3.School of Electrical & Information Engineering, Hubei University of Automotive Technology, Shiyan 442000, China )
In order to meet the requirements of high speed and reliable camera data transmission during the driving process of autonomous driving vehicles, a PCI-Express high speed transmission system based on embedded Linux development platform was designed. On the hardware, two SBC-S32V234 development boards of NXP are selected as the nodes of PCIe, and the End Point(EP) is connected to an 8-channel camera through the MAX9286 serial decoder for video acquisition, thus completing the protocol conversion between Camera Serial Interface 2(CSI-2) and PCIe. The Root Complex(RC) end acts as the data receiver and receives the video sent from the EP end. The EP and RC are connected by two transparent transmission chips, and transparent transmission is carried out between the two chips. On the software, the embedded Linux system is constructed and deployed, and the camera driver and PCIe sending application program are designed. The test results show that the PCIe transmission rate is up to 1.5Gb/s, which achieves efficient, stable and low delay transmission of video data, providing a new solution for vehicle video transmission.
Linux system; PCIe communication; Camera driver;Video transmission;Vehicle high speed network
U469.72
A
1671-7988(2022)24-52-07
U469.72
A
1671-7988(2022)24-52-07
10.16638/j.cnki.1671-7988.2022.024.009
曹坤澤(1996—),男,碩士研究生,研究方向為汽車電子與智能駕駛,E-mail:1143775299@qq.com。