隨著(zhù)市場(chǎng)對嵌入式設備功能需求的提高,市面上出現了集成嵌入式處理器和單片機的主控方案,以兼顧性能和效率。 在實(shí)際應用中,嵌入式處理器和單片機之間需要進(jìn)行大量且頻繁的數據交換,如果采用低速串行接口,則數據傳輸效率低,這將嚴重影響產(chǎn)品的性能;而如果采用高速并口,則占用管腳多,硬件成本將會(huì )增加。
![]()
為解決這一痛點(diǎn),各大芯片公司陸續推出了兼具A核和M核的多核異構處理器,如NXP的i.MX8系列、瑞薩的RZ/G2L系列以及TI的AM62x系列等等。雖然這些處理器的品牌及性能有所不同,但多核通信原理基本一致,都是基于寄存器和中斷傳遞消息,基于共享內存傳輸數據。 以配電終端產(chǎn)品為例,A核負責通訊和顯示等人機交互任務(wù),M核負責采樣和保護等對實(shí)時(shí)性要求較高的任務(wù),雙核間交互模擬量、開(kāi)關(guān)量和錄波文件等多種信息,A核+M核的方案既滿(mǎn)足了傳統采樣保護功能,又支持多種接口通信及新增容器等功能,符合國家電網(wǎng)現行配電標準。
![]()
通信過(guò)程整體架構說(shuō)明 一、 硬件層通信實(shí)現機制 通過(guò)物理內存DDR分配,將硬件層分為了兩部分:TXVring Buffer(發(fā)送虛擬環(huán)狀緩沖區)和RXVring Buffer(接收虛擬環(huán)狀緩沖區);其中M核從TXVring區發(fā)送數據,從RXVring區讀取接收數據,A核反之。 處理器支持消息傳遞單元(MessagingUnit,簡(jiǎn)稱(chēng)MU)功能模塊,通過(guò)MU傳遞消息進(jìn)行通信和協(xié)調,芯片內的M7控制核和A53處理核通過(guò)通過(guò)寄存器中斷的方式傳遞命令,最多支持4組MU雙向傳遞消息,既可通過(guò)中斷告知對方數據傳遞的狀態(tài),也可發(fā)送最多4字節數據,還可在低功耗模式下喚醒對方,是保證雙核通信實(shí)時(shí)性的重要手段。
![]()
寄存器輸入輸出通信模型 (1)CoreA寫(xiě)入數據; (2)MU將Tx 空位清0,Rx滿(mǎn)位置1; (3)產(chǎn)生接收中斷請求,通知CoreB接收狀態(tài)寄存器中的接收器滿(mǎn),可以讀取數據; (4)CoreB響應中斷,讀取數據; (5)CoreB讀完數據后,MU將Rx滿(mǎn)位清0,Tx空位置1; (6)狀態(tài)寄存器向CoreA生成發(fā)送中斷請求,告知CoreB讀完數據,發(fā)送寄存器空。
通過(guò)以上步驟,就完成了1次從CoreA向CoreB 傳遞消息的過(guò)程,反之亦然。 二、驅動(dòng)層Virtio下RPMsg通信實(shí)現 Virtio是通用的IO虛擬化模型,位于設備之上的抽象層,負責前后端之間的通知機制和控制流程,為異構多核間數據通信提供了層的實(shí)現。 RPMsg消息框架是Linux系統基于Virtio緩存隊列實(shí)現的主處理核和協(xié)處理核間進(jìn)行消息通信的框架,當客戶(hù)端驅動(dòng)需要發(fā)送消息時(shí),RPMsg會(huì )把消息封裝成Virtio緩存并添加到緩存隊列中以完成消息的發(fā)送,當消息總線(xiàn)接收到協(xié)處理器送到的消息時(shí)也會(huì )合理地派送給客戶(hù)驅動(dòng)程序進(jìn)行處理。 在驅動(dòng)層,對A核,Linux采用RPMsg框架+Virtio驅動(dòng)模型,將RPMsg封裝為了tty文件供應用層調用;在M核,將Virtio移植,并使用簡(jiǎn)化版的RPMsg,因為涉及到互斥鎖和信號量,最終使用FreeRTOS完成過(guò)程的封裝,流程框圖如下方所示。
![]()
編輯切換為居中 添加圖片注釋?zhuān)怀^(guò) 140 字(可選)
主處理核與協(xié)處理核數據傳遞流程圖 (1)Core0向Core1發(fā)送數據,通過(guò)rpmsg_send函數將數據打包至Virtioavail鏈表區; (2)在avail鏈表尋找共享內存中空閑緩存,將數據置于共享內存中; (3)通過(guò)中斷通知Core1數據到來(lái),共享內存由avail鏈表區變至used區; (4)Core1收到中斷,觸發(fā)rpmsg的接收回調函數,從used區獲取數據所在的共享內存的物理地址,完成數據接收; (5)通過(guò)中斷通知Core0數據接收完成,共享內存緩存由used區變?yōu)閍vail區,供下次傳輸使用。
三、應用層雙核通信實(shí)現方式 在應用層,對A核可使用open、write和read函數對 /dev下設備文件進(jìn)行調用;對M核,可使用rpmsg_lite_remote_init、rpmsg_lite_send和rpmsg_queue_recv函數進(jìn)行調用,不做重點(diǎn)闡述。 四、實(shí)際使用效果 通過(guò)程序實(shí)測,M核和A核可以批量傳輸大數據。同樣以配電產(chǎn)品為例——128點(diǎn)采樣的錄波文件大約為43K,若通過(guò)傳統的串行總線(xiàn)傳輸方式,需要數秒才可完成傳輸。 而使用i.MX8MP的雙核異構通信方案,只需要不到0.5秒即可傳輸完成,數據傳輸效率提升數十倍!同時(shí)還避免了串行總線(xiàn)易受EMC干擾的問(wèn)題,提高了數據傳輸穩定性,簡(jiǎn)化了應用編程,可滿(mǎn)足用戶(hù)快速開(kāi)發(fā)的需求。 以上就是關(guān)于多核異構處理器中A核與M核通信過(guò)程的解析,飛凌www.forlinx.com多核異構平臺有NXP的i.MX8系列、瑞薩的RZ/G2L系列以及TI的AM62x系列等等,您可關(guān)注了解。
|