老實說,很久以前就知道cortex-A 和cortex-M 構成的異構處理器芯片是個好東西,比如NXP ,TI早就有這樣的SOC出現了,但是總是怕怕的,覺得它們開發起來好麻煩,網路上的介紹也說得稀里糊涂,直到最近使用STM32MP157C 才發現,至少STM32MP157 用起來沒有想象的難,在做了一些基礎的實驗之后,我還自己設計了一個應用層協議IO-RPC (IO 遠程程序呼叫),為設計Linux 的嵌入設備做準備,這將加快我們向基于Linux 的應用轉移的步伐,相關內容和想法目前并不成熟,分享給大家探討,
remoteprc,rpmsgAPI和open AMP
STM32MP157C 是異構多處理器結構,它有兩個cortex-A7 核和一個cortex-M4 核構成,這是一種非對稱處理機架構(AMP Asymmetric Multi-processing),為了實作RTOS或者裸機程式能夠與Linux 上的程式相互通信,需要一個標準化的多核架構,,在Linux的內和中,包含了remoteproc和rpmsgAPI 組件,這個基礎架構最早是由Texas Instrument 開發的,在此基礎上mentor 公司 開發了OpenAMP框架,在這個框架下,主Linux 內核通過remoteproc API 來控制和管理remote 內核的生命周期(可以啟動,停止 其它內核運行),為remote processor 分配系統資源和創建虛擬IO virIO設備,而遠程內核中的程式通過openAMP 庫來注冊virIO 并通過virIO 與主Linux 上的應用程式通信,
簡單的虛擬IO就是串口(UART),下圖中,就是在主Linux和遠程處理器之間注冊了兩個虛擬UART,將復雜的多處理器通信轉化為兩個UART,是不是好神奇?當然,這樣的UART 的傳輸速度應該是遠遠高于物理的UART,因為他們是通過共享記憶體的方式實作的,在具體實作中,我們將虛擬virUART0作為IO-RPC 的通信通道,而將virUART1作為除錯串口來使用,

IO-RPC 協議
STM32MP157C的異構處理器架構中cortex-A7 與cortex-M 之間采用上述方式實作相互通信的,它提供了虛擬串口透明地傳輸資料,這還是不夠的,我們在此基礎上設計了IO-RPC 協議,使Linux 應用程式更加便捷地訪問cortex-M4 的IO資源和程式,
,通常由cortex-A 完成網路和資料處理事務(基于Linux OS),cortex-M 完成實時IO 介面控制(基于RTOS),于是,需要資料設計·一種相對通用的雙機通信協議來實作資料處理程式和IO控制程式之間的資料交換,有利于規范程式設計,提升程式的靈活性,可擴展性,
IO-RPC 使用了遠程程序呼叫的機制,通過呼叫M4 上的程序實作對cortex-M 上介面資源和程式的訪問和控制,為了提高效率,IO-RPC二進制編碼RPC形式,

圖-1 異構處理器之間的RPC 協議
與傳統RPC不同之處是,當硬體介面的信號或者狀態是隨機發生時,需要有一種類似中斷的通知機制,在協議中設定了通知(notification)幀,通知硬體發生的事件,
IO-RPC 的細節
物件程式設計的理念
IO-RPC 協議中引入了面向物件程式設計的理念,將各種IO 外設型別定義為物件,具體的IO 外設視作為物件的物體,
幀結構
RPC 呼叫(A7 –>M4)
物件型別,物件物體,方法,引數長度,引數
RPC 結果(M4 ->A7)
物件型別,物件物體, 結果 ,引數長度,引數
通知M4 ->A7)
物件型別,物件物體,通知,引數長度,引數
- 物件型別(Object Type ,1個位元組)
- 物件物體(object instance ,1個位元組)
- 方法,結果,通知(1 個位元組)
- 引數長度(2個位元組)
- 引數(n個位元組)
物件型別
理論上物件可以是任何型別的,在這里我們僅限于一臺基于STM32MP157C 的可編程控制器PAC為例,
PAC控制器提供了下列物件型別
- 數字輸入(8 路數字輸入)
- 數字輸出(8 路數字輸出)
- 模擬輸入(兩路模擬輸入)
- 模擬輸出(兩路模擬輸出)
- RS485(兩路UART)
- FD-CAN(一路FD CAN)
物件物體
物件的物體使用二進制編碼,
- 數字輸入 (0~7)
- 數字輸出 (0~7)
- 模擬輸入 (0~1)
- 模擬輸出(0~1)
方法
每一種介面物件中包含了若干方法,它們采用二進制順序編碼作為一個ID,比如:
- Read
- Write
- PWMOut
實作(略)
以后放出來,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224356.html
標籤:其他
上一篇:關于LPC824Lite開發板下載程式時提示"Invalid ROM Table"
下一篇:Verilog永無止境
