曹坤澤,楊朝陽,周 奎,彭 強
基于PCIe總線的車載高速網絡設計與實現
曹坤澤1,楊朝陽1,周 奎2,彭 強3
(1.湖北汽車工業學院 汽車工程學院,湖北 十堰 442000;2.湖北汽車工業學院 汽車工程師學院,湖北 十堰 442000;3.湖北汽車工業學院 電氣與信息工程學院,湖北 十堰 442000)
為了滿足自動駕駛汽車在行駛過程中對攝像頭數據傳輸高速可靠等要求,設計了一種基于PCI-Express的高速實時視頻傳輸系統。硬件上選用兩塊NXP的SBC-S32V234開發板作為PCIe的節點,端點(End Point, EP)通過MAX9286解串器連接路攝像頭進行視頻采集,完成攝像頭串行接口2(Camera Serial Interface-2, CSI-2)與PCIe的協議轉換;根聯合體(Root Complex, RC)一端作為數據接收端,接收EP端發送過來的視頻;EP與RC之間通過兩塊透傳芯片連接,兩塊芯片之間進行透明傳輸。軟件上對嵌入式Linux系統進行了構建與部署,并設計了攝像頭驅動程序與PCIe發送的應用程序。測試結果表明,PCIe傳輸速率最高達到1.5 Gb/s,實現了視頻數據高效、穩定、低延時傳輸,為車載視頻傳輸提供一個新的解決方案。
Linux系統;PCIe通信;攝像頭驅動;視頻傳輸;車載高速網絡
隨著自動駕駛汽車的不斷發展,對攝像頭視頻采集幀率和分辨率的要求不斷提高[1],進一步增加了車載攝像頭的數據帶寬,這對攝像頭傳輸性能提出了更高的要求。某自動駕駛企業提出要求實現車載八路高清攝像頭的低延時、高畫質視頻傳輸。
傳統車載網絡主要包括局部連接網絡(Local Interconnect Network, LIN)、控制器局域網絡(Controller Area Network, CAN)、FlexRay[2],其優點是實時性高,但帶寬普遍較低,FlexRay的帶寬(2×10 Mbit/s)相較于CAN(1 Mbit/s)、LIN(19.2 Kbit/s)總線的最大帶寬有了較大提高,但也無法滿足高帶寬的攝像頭數據傳輸。近年來,以太網逐漸成為汽車網絡主干,視頻傳輸也大都基于以太網進行傳輸,相關視頻實時傳輸延時在200 ms~500 ms不等。馮云婷等[3]采用百兆以太網基于用戶數據報協議(User Datagram Protocol, UDP)實現了視頻傳輸,但視頻傳輸實際帶寬只達到54 Mbps,視頻幀率只有10 fps~12 fps。吳勝兵[4]、李昌遠[5]采用H.264編碼的方式來降低車載以太網視頻傳輸的帶寬,但在網絡環境差的情況下,攝像頭視頻傳輸過程中因壓縮碼率而導致視頻質量差。
基于以上研究,傳統車載網絡、百兆以太網均無法滿足企業要求的八路高清攝像頭的帶寬需求及性能要求。PCIe總線使用了高速差分總線,能夠使用更少的信號線就可以達到需要許多單端并行數據信號才能達到的總線帶寬,具有更高的傳輸速率和穩定性[6-7]。因此本文提出采用PCIe總線的車載高速視頻傳輸方案。
本文以PCIe車載高速網絡為研究對象,采用NXP的SBC-S32V234開發板作為控制器,實現攝像頭驅動設計、攝像頭采集、PCIe高速傳輸通道的開發,實現攝像頭采集的圖像數據以PCIe1.0 Gen1模式的傳輸速率穩定傳輸,并通過連接兩塊透傳芯片,解決了PCIe傳輸距離過短的問題,可實現遠距離傳輸。
PCIe高速視頻傳輸系統硬件主要由兩塊SBC-S32V234開發板、兩塊MAX9286解串器、8路AR0143攝像頭以及兩塊透傳芯片組成。系統的硬件架構如圖1所示。

圖1 整體硬件架構圖
協議轉換芯片選用NXP的SBC-S32V234作為主控芯片,并作為PCIe鏈路的EP端點,八路攝像頭采用兩片吉比特多媒體串行鏈路(Gigabit Multimedia Serial Link, GMSL)四通道解串器MAX9286作為視頻解串器,將視頻數據匯總后由兩路CSI-2總線發送給主控芯片上進行數據協議轉換,將轉換后的視頻數據通過兩塊透傳芯片之間的HDBASE-T接口透明傳輸發送至另一塊SBC-S32V234上(RC端),并將視頻顯示到顯示屏上。
本文所設計的PCIe高速視頻傳輸系統以NXP的S32V234芯片作為平臺完成嵌入式Linux系統的構建與部署,并在嵌入式Linux系統下完成底層攝像頭驅動開發、上層視頻應用程序設計。軟件架構如圖2所示,由應用程序、鏈接庫、驅動程序等部分組成。鏈接庫主要用到了C庫、多線程庫、傳感器設備接口(Sensor Device Interface, SDI)庫以及攝像頭驅動開發所用到的攝像頭用戶庫和特定傳感器庫。驅動主要包括I2C驅動、攝像頭驅動、CSI驅動以及PCIe驅動。

圖2 軟件架構圖
電源供給系統輸入電壓為12 V,輸出電壓 12 V/5 A為解串器MAX9286供電,12 V/8 A為S32V234開發板供電。設計15 V防涌浪、防反接以及共模電感濾波(330 μH)對電源進行防護。系統電源供給電路如圖3所示。

圖3 電源供給電路圖
八路攝像頭采用兩塊解串器MAX9286與S32V234開發板相連。MAX9286為四通道GMSL解串器,基于LVDS傳輸,同時支持四路攝像頭數據傳入。攝像頭與解串器采用信號同軸線纜連接,接口部分采用公頭的FAKRA連接。
MAX9286數據采用CSI-2輸出,每通道的傳輸速率為80 Mbps~1 200 Mbps,帶時鐘展寬用于系統上電和驗證的外設功能,內置PRBS檢測器,用于串行鏈路的BER測試以及2個專用GPIO端口,嚴格滿足汽車工業要求。
S32V234開發板提供兩路與MAX9286數據板對接的MIPI-CSI接口,可直接對接MAX9286,并對MAX9286數據板及攝像頭提供工作電源與時鐘。
S32V234開發板提供標準的M.2接口形式的MINI-PCIE(PCI EXP 52)。但透傳芯片擴展接口板提供的是Finger形式的PCIE x4和Slot形式的PCIE x8無法直接相連,需要外接MINI-PCIE轉PCIe轉接卡。連接方案如圖4所示。

圖4 連接方案
驅動程序分為內核空間和用戶空間,控制器內核版本為Linux4.14。以注冊I2C設備為例,在內核空間下,要注冊一個新的I2C設備,必須調用CAM_ClientAdd()函數,在CamI2cCfg_t結構體指針中提供傳感器細節,如果沒有返回0,則注冊成功。攝像頭結構存儲在驅動程序內核空間的一個雙鏈表中。這些句柄用作攝像頭設備的通用標識,并傳遞給用戶空間。攝像頭驅動主要用到的內核級應用程序編程接口(Application Program- ming Interface, API)如表1所示。
攝像頭驅動程序包含一個用戶空間庫,用于用戶在應用程序中抽象內核空間API訪問。用戶庫也是特定于設備的代碼,它為特定傳感器實現用戶空間驅動程序。攝像頭驅動程序用戶級API的定義如表2所示。

表1 內核級API

表2 用戶級API
將上述函數編譯并打包成ko驅動,在Linux內核中加載驅動,應用程序通過訪問用戶空間的API來嵌入到內核空間,實現攝像頭的調用。
EP設備與RC設備之間的數據傳輸采用內存映射的方法,即把PCIe設備空間映射到存儲地址空間,圖5為一個完整的RC與EP空間映射模型。圖中outbound表示存儲器域訪問PCI域,發起訪問的一側需要進行outbound去訪問對端;inbound表示PCI域訪問存儲器域,被訪問的一側需要進行inbound,使得對端能夠訪問。RC端要通過PCIe鏈路讀取EP端攝像頭數據,RC端需要配置outbound(在內核中已配好),EP端需要配置inbound,從存儲器域地址0xc1000000 inbound到PCIe的基地址寄存器BAR2(0x72000000),這樣就建立了RC端0xc2000000到EP端0xc1000000的映射。EP端將攝像頭數據寫入到物理地址0xc1000000中,RC端即可通過訪問物理地址0xc2000000來獲取EP端的攝像頭數據。

圖5 EP與RC相互訪問
PCIe控制器提供直接存儲器訪問(Direct Memory Access, DMA)功能[8],為了提高PCIe總線數據傳輸的速率,選用DMA的數據傳輸方式來批量地異步數據傳輸。配置設備的DMA寄存器,EP端分配的DMA緩沖區的地址通過inbound 映射到設備的PCI域中,實現了PCIe的DMA傳輸。DMA數據傳輸不需要CPU介入,大大減輕了CPU的負擔,實現更高效率的傳輸,有效提升了系統的傳輸性能。
EP端應用程序設計用到了數字分量串行接口(Serial Digital Interface, SDI)庫、C庫和多線程庫。SDI庫是由NXP 官方用于攝像頭程序開發的VSDK1.5中提供的控制圖像數據輸入的庫。為了控制攝像頭硬件,SDI使用驅動程序中提供的API。為了方便圖像數據的存儲和管理,SDI庫提供了Opencv庫中cv::UMat 1:1克隆的SUMat圖像數據容器來對幀緩沖區進行操作。EP端應用程序采用多線程的方式進行圖像抓取與PCIe發送。圖像抓取在主線程里完成,PCIe發送在發送線程里完成。EP端與RC端握手成功后,將獲取的圖像數據發送至RC端,通過按鍵來控制發送第幾個攝像頭的圖像數據。EP端應用程序流程圖如圖6所示。

圖6 EP端應用程序流程圖
RC端應用程序同樣用到了SDI庫、C庫和多線程庫。RC端與EP端握手成功后,將EP端發送過來的一幀視頻數據保存到SUMat圖像容器中,并顯示到顯示屏上。RC端應用程序流程圖如圖7所示。

圖7 RC端應用程序流程圖
系統實物圖如圖8所示。

圖8 系統實物圖
兩塊開發板用PCIe線與透傳芯片連接好后, u-boot對PCIe設備進行掃描,啟動Linux內核,加載PCIe驅動,完成連接PCIE鏈路、設置中斷節點、PCIE主橋的掛接后, Linux內核開始進行總線掃描。通過串口終端可以查看內核打印信息,RC端打印信息出現PCIe link up則表示兩個設備之間PCIe鏈路正常連接。如圖9所示,EP與RC設備鏈路正常連接,PCIe模式為Gen1模式(對應PCIe1.0 x1寬度的PCIe鏈路),理論上最大傳輸速率為2.5 GT/s,可用帶寬為2.0 Gb/s(250 MB/s)。

圖9 RC端內核打印信息
EP設備連接8個攝像頭,將采集到的攝像頭數據存放在攝像頭buffer中,通過DMA方式傳輸到PCIe數據域中并發送給RC設備。RC設備通過PCIe接口接收到攝像頭數據后,把攝像頭數據從PCIe數據域讀出然后再顯示。
對于PCIe實際傳輸速率采用以下計算方式:
Rate=(Picture_Size/Period_sec)×1.25×109/1 0242
Rate表示實際傳輸速率,單位為MB/s;Picture_Size為一幀720 p兩通道圖像的大小,單位為byte;Period_sec為一幀圖像傳輸的時間開銷,單位為納秒;PCIe1.0采用 8b/10b編碼方案,每傳輸8個bit,需要發送10個bit,因此要乘以1.25。經測試得到PCIe實際傳輸速率穩定在 180 MB/s(1.4 Gb/s)以上,最高達到1.5 Gb/s。
圖10為RC端顯示的一路攝像頭視頻,并對視頻延時進行了簡單測試。圖中測試照片顯示,視頻延時時間穩定在130 ms,相較于以太網傳輸的視頻延時有了較大的提高。由于PCIe的高帶寬,視頻采集的原始數據,直接通過內存映射到視頻接收端,不像H.264編碼傳輸技術受到碼率、網絡環境的影響造成視頻出現馬賽克、卡頓等現象,因此視頻質量更高。

圖10 視頻顯示與延時測試
本文所設計的PCIe車載高速實時視頻傳輸系統,軟硬件設計具有很強的通用性,應用場景廣泛,且通過長時間運行測試,具有穩定的視頻傳輸效果。視頻延時時間降低到了130 ms,相比于百兆局域網的延時200 ms~500 ms,具有很大提升。EP設備與RC設備之間通過中繼芯片連接,中繼之間采用最長可達十五米的雙絞線連接,解決了PCIe線過短,無法遠距離傳輸的問題,拓寬了系統的應用場景,且中繼芯片不需要程序編寫,上電即可使用,簡化了開發過程,具有很強的通用性。PCIe傳輸速率最高達到了1.5 Gb/s。由于八路攝像頭占據了一定的系統總帶寬,沒有達到PCIe Gen1模式理論能夠達到的250 MB/s的可用帶寬,但完全可以滿足自動駕駛汽車在行駛過程中對攝像頭數據傳輸高速可靠等要求,且控制器采用PCIe DMA的傳輸方式,大大減輕CPU的負擔,提高了系統的傳輸性能,為今后車載信息傳輸提供了一個高效可行的方案。
[1] 李上峰.基于PowerPC的高速傳輸技術研究[D].西安:西安電子科技大學,2017.
[2] 吳晨曉.汽車網絡通信總線現狀及發展[J].汽車實用技術,2019,44(2):203-204.
[3] 馮云婷,張軍,毛紫荊.實時以太網視頻傳輸系統的設計[J].天津職業技術師范大學學報,2021,31(4):40-44, 51.
[4] 吳勝兵.基于海思Hi3521A芯片H264編解碼視頻傳輸[D].成都:電子科技大學,2020.
[5] 李昌遠.基于車載以太網的多媒體系統應用研究[D].長春:吉林大學,2017.
[6] 徐健,張建泉,張健.基于PCIE非透明橋的嵌入式異構平臺設計[J].微電子學與計算機,2018,35(1):26- 30.
[7] 孫銘.嵌入式平臺中的PCI Express總線技術研究[D].西安:西安電子科技大學,2015.
[8] 曹科庭.基于PCIE的DMA高速數據傳輸控制器的設計與實現[D].成都:電子科技大學,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。