天天看點

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

1、概述

AliOS Things支援MCU與通信晶片間的多種連接配接方式,如UART、SPI、SDIO、USB。這些連接配接方式不僅拓展了基于AliOS Things開發的可選聯網方案,還滿足了不同應用場景對傳輸速率需求,如表1所示。其中,HAAS100通過USB外接LTE,可以實作相同廠商不同模組間無縫替換,例如EC20、EC200S。

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

表1 AliOS Things所支援外接方式以及應用場景

2、USB外接通信晶片的優點

USB本身具有使用友善、資料傳輸可靠、成本低、省電等優點。而使用USB做為外接通信晶片的通道,将保留這些優點,具體表現為:

2.1、使用友善

  • 一個接口可以用于多種裝置的連接配接,使用者可以友善地替換所要連接配接的通信晶片,無需針對不同通信晶片采用不同的連接配接器和線纜。
  • 自動配置,通信晶片接入後,MCU側可以自動對通信晶片進行識别,并加載對應的驅動程式。
  • 支援熱插拔,使用者可以随時接入或拔出通信晶片,而不會損害硬體裝置,也無需重新開機裝置。
  • 無需額外供電,USB接口提供了+5V電壓,500mA以下電流,一般情況下通信晶片無需額外電源。

2.2、資料傳輸可靠

  • 接收端和線纜硬體規範,保證資料傳輸在一個平靜的接口電器環境中,避免了導緻資料錯誤的大部分噪聲幹擾。
  • 差分傳輸模式,USB 1.1/2.0采用四線模式,其中D+/D-為資料傳輸通道,采用差分信号的傳輸方式,D+/D-需要同時滿足電平條件才能判定為0或1,降低了因幹擾産生比特跳變的可能性。
  • CRC校驗,USB硬體自帶CRC校驗,可檢測傳輸過程中發生的錯誤。
  • 協定确認重傳,USB在協定層面提供了确認(ACK/NACK)與重傳機制,可從傳輸錯誤中恢複。

2.3、成本低、省電

  • USB部件成本較低,無論是使用獨立的controller,還是使用內建IP的方案,成本都可以控制在合理範圍内。并且從可擴充性來看,USB可以支援更多種類的裝置連接配接,而無需硬體上的改動。
  • USB使用了省電電路與協定,配合通信晶片的休眠與喚醒功能,可實作整體上的低功耗。

3、實作基于USB通道外接通信晶片

為了實作基于USB通道外接通信晶片,除了要保證MCU具備USB連接配接硬體能力以外,MCU側還需要實作USB host協定棧,以完成

  • 裝置識别
  • 驅動加載
  • 資料傳輸
    AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

圖 1 MCU側USB Host協定棧結構,包括了Host controller層、Host Core層、Host Class層、USB Device Driver層

MCU側的USB host協定棧大緻分為四層:Host Controller層、Host Core層、Host Class層、USB Device Driver層。其中,Host Controlle是USB host協定棧最底層,負責直接與硬體互動,讀寫寄存器、中斷處理;Host Core是協定棧的核心層,對下負責管理Host controller、裝置、接口、端點,并負責裝置枚舉,對上負責host class的注冊、裝置的配置以及傳輸請求處理;Host Class層為各USB host類的實作層,例如HID、CDC、UVC等類。 最後,裝置驅動層用于實作與USB裝置應用互動邏輯,例如通過AT指令與EC20進行互動。各層的設計細節将在另一篇文章中詳細介紹,此處将不再展開。本節将圍繞裝置識别、驅動加載、資料傳輸介紹USB外接通信晶片的實作方式。

3.1、裝置識别

當通信晶片通過USB連接配接上MCU後,兩者會發生以下對話。

Host:你是什麼裝置?

Device: 12 01 0100... / Device Descriptor /

Host:你有幾種功能?

Device:09 02 09... / Configuration Descriptor /

Host:每個功能有幾個接口?

Device: 09 04 00... / Interface Descriptor /

Host:每個接口使用哪幾個端點?

Device: 06 05 82... / Endpoint Descriptor /

Host: 我知道你是誰了,開始傳輸

Device: OK

....

這些問答的目的是為了幫助USB Host準确地對接入的裝置進行識别。互動的資訊主要包括裝置描述符、配置描述符、接口描述符、端點描述符。

3.2、類加載

在枚舉過程的最後會根據裝置所屬類加載驅動。這裡有兩種加載方式,一種是按裝置加載,另一種是按接口加載。以EC20為例,其接口都為vendor類,無法根據接口類進行加載。是以,需要根據裝置的Vendor ID(VID)、Product ID(PID)加載對應類。

事實上,針對這一類由vendor定制廣域網USB裝置,Linux USB驅動的解決方案,是使用專門有檔案(usb/serial/option.c)用于存儲廠商的VID和PID清單;在枚舉時,如果USB裝置的VID與PID相比對,則加載相應驅動(usb/serial/wwan.c)進行處理。如上文所述,EC20有5個接口,其中接口0為DM口、接口1為GPS接口、接口2為AT口、接口3為PPP口、接口4為NDIS口,如圖5所示。由于PC端資源是充足的,Linux USB Host在枚舉EC20時可以為每個接口建立相應的端點,并允許使用者同時操作這些接口(open/read/write)。

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

圖 4 EC20各USB接口功能

然而,在運作RTOS的MCU晶片上USB控制器的資源是有限的,無法同時建立這麼多個接口所需要的端點。以HAAS1000為例,除了控制端點0,其USB控制器隻有4個端點可供使用。是以,在MCU上枚舉過程中需要考慮底層硬體資源限制,否則會導緻驅動加載失敗。這裡采用的政策是複用端點的方式。在加載驅動時,有針對性地選擇接口:首先為接口2配置設定端點資源,用于AT指令互動,保證4G子產品聯網并擷取IP;然後,在其它接口需要使用時,釋放端點2的端點資源。

3.3、資料互動

完成類加載後,上層可通過USB通道收發送資料。以EC20的AT接口為例,AliOS Things的AT驅動架構(SAL + AT Utility)可以無縫運作在USB協定棧上。

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

圖 5 基于USB協定棧的AT通道

需要做的工作是使用USB Class API實作AT Utility所需HAL(at_dev_ops_t)即可,如下所示。

/*

  • AT dev operation type

*/

typedef struct {

at_dev_type_t type;

/**

* AT device init

*

* @return  0 - success, -1 - failure           

int (init)(void dev);

  • Receive data from AT device
  • @return 0 - success, -1 - failure

    */

    int (recv)(void dev,

    void *data, 
    
           uint32_t expect_size,
    
           uint32_t *recv_size,
    
           uint32_t timeout);           
  • Send data to AT device.
  • int (send)(void dev,
    void *data,
    
           uint32_t size,
    
           uint32_t timeout);           
    • AT deviec deinit
    int (deinit)(void dev);

} at_dev_ops_t;

在此基礎上,使用AT Utility API實作SAL所需HAL(sal_op_t)即可,如下所示。

typedef struct sal_op_s {

struct sal_op_s * next;  //<! Next sal_op_t structure

char *version; //<! Reserved for furture use.

char *name; //<! Drvier name

/* Add sal device */

int (*add_dev)(void*);

/**

 * Module low level init so that it's ready to setup socket connection.

 *

 * @return  0 - success, -1 - failure

 */

int (*init)(void);

/**

 * Start a socket connection via module.

 *

 * @param[in]  c - connect parameters which are used to setup

 *                 the socket connection.

 *

 * @return  0 - success, -1 - failure

 */

int (*start)(sal_conn_t *c);

/**

 * Send data via module.

 * This function does not return until all data sent.

 *

 */

int (*send_data)(int fd, uint8_t *data, uint32_t len,

            char remote_ip[16], int32_t remote_port, int32_t timeout);

/**

 * Get IP information of the corresponding domain.

 * Currently only one IP string is returned (even when the domain

 * coresponses to mutliple IPs). Note: only IPv4 is supported.

 *

 *

 * @return  0 - success, -1 - failure

 */

int (*domain_to_ip)(char *domain, char ip[16]);

/**

 * Close the socket connection.

 *

 * @return  0 - success, -1 - failure

 */

int (*finish)(int fd, int32_t remote_port);

/**

 * Destroy SAL or exit low level state if necessary.

 *

 * @return  0 - success, -1 - failure

 */

int (*deinit)(void);

/**

 * Register network connection data input function

 * Input data from module.

 * This callback should be called when the data is received from the module

 * It should tell the sal where the data comes from.

 *

 * @return  0 - success, -1 - failure

 */

int (*register_netconn_data_input_cb)(netconn_data_input_cb_t cb);           

} sal_op_t;

完成以上對接後,上層應用即可以基于标準的套接字API程式設計,降低了應用層移植成本。相關AT驅動元件介紹請參考AliOS Things幫助文檔 SAL元件、AT元件。

4、HaaS100外接4G模組示例

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

圖6 HaaS100通過USB外接EC20

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

圖 7 USB所用排針接線

HaaS100闆上排針提供了USB引腳,可以用接USB母口擴充線,與通信模組連接配接,如圖6、7所示。

步驟一:配置

aos make linkkit_demo@haas100 -c config
           

步驟二:配置選擇

aos make menuconfig
           

配置

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結
AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結
AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

步驟三:編譯

aos make
           

步驟四:燒錄

請參考

HaaS快速開始

步驟五:啟動

該應用運作Linkkit demo,USB枚舉成功後,通過AT通道,可以連接配接入阿裡雲IoT平台。

5、總結

廣域網通信模組通常都提供USB通道,支援AT、PPP、RNDIS、ECM等通信方式。是以,在MCU側支援USB協定棧,可自動識别枚舉各類通信裝置,并加載所需的驅動,友善使用者上層的開發。本文簡要介紹了AliOS Things的USB Host協定棧,并以EC20為例描述了枚舉識别過程,同時給出了在USB通道上對接AliOS Things傳統AT通道的方式。在後續相關系列文章中,我們将介紹基于USB通道的PPP、RNDIS、ECM方式,并給出相應對比資料。敬請期待。

如需更多技術支援,可加入釘釘開發者群,或者關注微信公衆号

AliOS Things基于USB通道外接4G模組的方案1、概述2、USB外接通信晶片的優點3、實作基于USB通道外接通信晶片4、HaaS100外接4G模組示例5、總結

更多技術與解決方案介紹,請通路

阿裡雲AIoT首頁

繼續閱讀