AliOS Things网络适配框架 - SAL
摘要: 很多物聯網應用場景中,都需要使用主控MCU外接連接芯片(如WiFi、NB-IoT)的解決方案。為方便這類場景的開發,AliOS Things提供了Socket Adapter Layer(SAL)框架和組件方案
AliOS Things中提供了豐富的SAL開發組件,來加速MCU+通信連接芯片的應用場景開發和部署。在此類應用場景中,主控MCU芯片通過UART或SPI總線與WiFi、NB-IoT等通信芯片相連,AliOS Things操作系統和用戶APP運行在主控MCU中,需要網絡數據訪問時,通過外接的通信芯片進行網絡負載的接收和發射。主控MCU和外接通信芯片之間的通信,可以是AT Command通道,也可以是廠商私有協議通道。
AliOS Things SAL方案概述
目前,AliOS Things提供了atparser、at_adapter、SAL等開發組件。借助這些組件,用戶可以方便地進行應用開發,同時這些組件也方便廠商在現有MCU產品基礎上通過外接通信芯片方式擴展網絡訪問能力。下圖展示了AliOS Things提供的SAL組件和方案架構:
其中,atparser組件提供了基礎的AT Command訪問接口和異步收發機制。用戶可以直接訪問atparser組件提供的接口進行應用開發。上層應用直接通過atparser訪問網絡是,需要自行處理AT命令細節。
基于atparser的基礎上,AliOS Things進一步提供了Socket Adapter Layer(SAL)組件(即上圖中的方案一)。SAL組件提供AT通道或廠商私有協議通道(如高通通信模組的WMI)到Socket套接字(如socket、getaddrinfo、send、recvfrom等)接口的對接。通過SAL組件,應用層不需要關注通信芯片底層操作的細節,只需要通過標準的Socket接口來達到訪問網絡的目的。SAL組件支持大多數常用的Socket接口。SAL組件可以很大程度上提高應用層開發的效率,顯著降低應用層開發的難度。
此外,AliOS Things還提供了另外一種基于AT Command的網絡訪問方案 - SAL LwIP模式(即上圖中的方案三)。SAL LwIP模式基于at_adapter組件工具。at_adapter組件提供AT底層到LwIP的對接,即AT通道作為LwIP的一個網絡接口(netif)。使用該方案時,應用層通過標準的Socket接口訪問網絡,不需要關注底層AT細節。該方案無縫對接LwIP協議棧,應用層可以使用所有LwIP提供的接口和服務。但該方案需要連接芯片固件支持IP包收發模式,目前慶科的moc108已經支持該模式。
atparser組件
atparser組件是AliOS Things SAL框架的基礎組件之一,它提供統一和規范的AT命令訪問接口(如at.send、recv、write、read、oob等)和異步收發機制(at_worker)。目前atparser組件僅支持了UART連接方式。
atparser有兩種工作模式,即NORMAL模式和ASYN模式。工作模式的選擇在atparser組件的初始化時進行。
NORMAL模式下,僅支持上層應用以單進程/線程方式訪問AT(同一時刻只有一個進程訪問AT)。由于AT底層通過串行方式(UART或其他)發送和接收數據,在多進程情況下,多個AT讀寫可能會產生數據交叉,從而造成AT訪問的混亂及錯誤。下面是在NORMAL模式下,使用AT接口的示例(連接WiFi AP):
if (at.send("AT+WJAP=test_AP,test_passwd") == false) {printf("at.send failed.\r\n");return -1; } // Read AT cmd response right after a cmd is sent if (at.recv("OK") == false) {printf("Connecting AP failed.\r\n");return -1 }在ASYN模式下,支持AT命令的多進程訪問以及收據的異步接收。系統中只有一個線程(at_worker)負責讀取AT數據,發送線程發送完AT命令后,等待at_worker線程喚醒;at_worker線程接收到對應AT命令的結果數據后,將結果傳遞給發送線程,并喚醒發送線程繼續執行。發送線程確保一個AT命令發送是原子操作。在ASYN模式下,可以支持多個進程對AT的訪問。
AT事件的處理(例如網絡數據到達),通過注冊的oob回調函數處理。at_worker線程負責識別AT事件并通過調用oob回調函數處理AT事件和數據。
Socket Adapter Layer (SAL)
SAL模塊提供基于AT Command或廠商私有協議方案實現的標準Socket接口訪問。下圖是SAL(方案一)的架構圖。
SAL對上(應用層)提供標準Socket接口訪問。目前SAL支持多數常用的Socket接口,后續還將持續演進。以下是SAL目前支持的Socket接口:
SAL層對下抽象了通信模組/芯片訪問控制層接口(如下),不同廠家的連接模組/芯片,可以通過對接底層控制訪問層接口來對接和支持SAL。
typedef struct sal_op_s {char *version;int (*init)(void);int (*start)(at_conn_t *c);int (*send)(int fd, uint8_t *data, uint32_t len,char remote_ip[IP_LEN], int32_t remote_port);int (*domain_to_ip)(char *domain, char ip[IP_LEN]);int (*close)(int fd, int32_t remote_port);int (*deinit)(void);int (*register_netconn_evt_cb)(netconn_evt_cb_t cb); } sal_op_t;SAL LwIP模式
AliOS Things還提供了SAL LwIP模式(方案二)。該方案區別于方案一的地方在于,主控MCU上運行完整的LwIP協議棧,LwIP協議棧底層通過AT方式訪問網絡;方案一中主控MCU側不運行協議棧。
該方案的運行方式類似于MCU行業常用的SLIP(Serial Line Internet Protocol)方案,區別在于底層使用廠商模組/芯片的AT Command命令和服務,廠商模組/芯片不需要額外再支持SLIP通信。
at_adapter組件提供AT底層到LwIP網絡接口(netif)的對接。通過netif的對接,AT通道可以無縫對接上LwIP。該模式下,SAL對上層應用提供完整的TCP/IP協議棧接口和服務。該方案的缺點是需要AT通信模塊固件支持IP包傳輸,目前moc108已經支持該模式。
總結
綜上所述,AliOS Things提供了豐富的SAL組件和方案。AliOS Things提供的SAL框架和組件,具有以下優勢:
為主控MCU外接連接芯片場景提供完整解決方案;
可以降低上層應用開發基于外接連接芯片場景的應用的難度,提高開發效率,加速產品部署;
方便模組和設備廠商在現有成熟的MCU產品和方案上,通過外接通信芯片方式擴展網絡連接能力,而不需要將先有的MCU芯片切換成WiFi或其他具有網絡通信能力的平臺。
總結
以上是生活随笔為你收集整理的AliOS Things网络适配框架 - SAL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探索PCIe 3.0峰值性能,长江存储推
- 下一篇: 技术案例分享:WIPTEC采用Aruba