android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget


MTP的全稱是Media Transfer Protocol(媒體傳輸協議),它是微軟公司提出的一套媒體文件傳輸協議。早在智能手機普及前,數碼相機和MP3播放器等都使用了MTP的前身PTP(Picture Transfer Protocol)進行媒體文件傳輸,Android從3.0開始支持MTP。

(1)既然可以通過MTP把智能設備當作U盤使用,那么它和我們常用的USB大容量存儲(USB Mass Storage,簡稱UMS)有何不同呢?

        UMS模式下,PC操作存儲設備的粒度是設備塊(FAT block),而非文件系統。什么意思?此處舉一個簡單例子。當Android手機通過UMS將sdcard掛載到PC后,PC就擁有對sdcard的絕對控制權。這樣,手機就無法同時訪問sdcard了。這種做法帶來的后果就是Camera或Music程序將因沒有外部存儲空間而提示無法進行操作。這也是Android早期版本中一個很明顯的特點。另外,由於PC在操作sdcard時可能弄壞其文件系統,這將導致sdcard重新掛載到手機后不能被識別。

        如果Android手機的sdcard以MTP模式掛載到PC機上,sdcard的控制權其實還是屬於手機。只不過智能手機通過MTP協議向PC機構建了一個虛擬文件系統。PC機操作其中的文件時,都會通過標准MTP協議向智能手機發起請求。另外,Android把MTP功能集成在MediaProvider中,其好處是PC機操作(例如拷貝或刪除等)媒體文件時,媒體數據都會及時更新到媒體數據庫中。而UMS模式下,當sdcard掛載回手機后,Android還得花較長時間重新掃描媒體文件以更新媒體數據庫。

(2)MTP的好處還有很多,例如它可判斷PC機拷貝的媒體文件是否受目標手機支持,甚至可以觸發對應的轉碼程序將其轉換成手機支持的格式。不過和UMS相比,MTP也有不足之處:傳輸大文件的速度較慢;MTP不能直接修改文件本身,只能先拷貝到本地修改,完畢后再拷貝回去;除了Windows外,Linux和MacOS對MTP支持還不是很完善。

(3)MTP協議介紹,MTP的使用者包括兩個部分,分別是Initiator和Responder

 

Initiator:主要是指USB Host,例如PC機,筆記本等。協議規定所有MTP操作只能由Initator發起。
Responder:一般是諸如數碼相機、智能手機等存儲媒體文件的設備。Responder在MTP中的作用就是處理Initator發起的請求。同時,它還會根據自身狀態的變化發送Event以通知Initiator。

MTP協議棧由下到上分別是:
Pyshical Layer(物理層):物理層在MTP協議中用來傳輸數據。目前有三種物理層可供MTP使用。它們分別是USB:其主要特點是傳輸文件,同步媒體文件時速度快,而且可以邊工作邊充電,這是目前用的最多的一種方式;IP:基於IP的MTP(簡稱MTP/IP)將通過UPnP來匹配和發現設備。它是家庭網絡中是最理想的傳輸方式;Bluetooth:MTP/BT是最省電,同時也是速度最慢的一種傳輸方式,用處較少。
傳輸層:MTP中,數據傳輸格式遵循PTP協議
命令層:實現了MTP協議中的各種命令。

(4)android3.1多了三個大包:android.hardware.usb  、android.mtp   、android.net.rtp。

A,android.mtp:讓連接的camera和其他設備,可以直接使用PTP(圖像傳輸協議)或MTP(媒體傳輸協議)保持連接,上層app可以接收到通知,從而管理這些設備的文件和存儲傳輸等。它為我們提供了定義PTP和MTP的MtpConstants,描述USB host總線上連接的PTP或MTP設備的MtpDevice,封裝MTP設備信息的MtpDeviceInfo,和該對象的信息的MtpObjectInfo,還有MTP設備上存儲單元信息的封裝MtpStorageInfo 。

B,android.hardware.usb:支持通過USB連接到Android供電設備的外設數據通信。中央類是UsbManager,它提供了識別和使用USB設備和USB配件的通訊方法。應用程序可以獲取一個UsbManager實例,然后用於連接的設備或配件的清單查詢、管理、通信。

C,android.net.rtp:內置RTP(實時傳輸協議)協議棧,應用程序可以使用它來管理交互數據流。應用程序提供VOIP,一鍵通,會議和音頻流,在網絡可用的前提下,可以使用這些API來啟動會話和傳輸,或接收數據。最簡單的用法即單個遠程終端和本地。

(5)WIndows 7系統自帶MTP驅動程序,可以直接使用;Windows XP系統則需要安裝驅動程序。首先將XP系統的Windows Media Player版本升級至wmp11,最新的版本自帶了MTP驅動。如果升級完后還無法識別,則需要手動修改inf文件,位置在c:\windows\inf\wpdmtp.inf。查看你的MTP設備的VID和PID,添加下面的對應內容:

[Generic.NTx86]

%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP

%GenericMTP.DeviceDesc%=MTP, USB\VID_XXXX&PID_XXXX&MI_00

........................................

 [Generic.NTamd64]

%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP

%GenericMTP.DeviceDesc%=MTP, USB\VID_XXXX&PID_XXXX&MI_00

之而就可以安裝上這個驅動程序了

==========================================USB CDC/USBnet(ECM, NCM, ACM) ===============================

USB CDC-ACM (Abstract Control Model), CDC-ECM (Ethernet Networking Control Model), CDC-NCM (Network Control Model), OBEX (Object Exchange) and WCM-Device Management USB class and function drivers
(1)CDC-ACM (Abstract Control Model) allows any communication device to provide a serial communication interface (e.g modem devices that send and receive AT commands).

The CDC ACM driver exposes the USB device as a virtual modem or a virtual COM port to the operating system.The driver enables sending both data and AT commands, either through ACM (separating data and AT commands over different channels) or through Serial Emulation (passing the AT commands as is and as part of the data stream).
/lib/modules/$(uname -r)/kernel/drivers/usb/class目錄下看到cdc-acm.ko文件。
(2)CDC-ECM (Ethernet Networking Control Model) offers device manufacturers to interface as a standard NIC (Network Interface Card) device. This interface is usually adopted by high speed LAN networking devices allowing high speed Ethernet data transfer over USB.

The ECM (Ethernet Networking Control Model) protocol is used for exchanging Ethernet-framed data between the device and host. A CDC ECM compliant device exposes itself as a virtual NIC to the host operating system. The NIC is assigned with a MAC and an IP address.
A general use case of a CDC ECM device is a point-to-point Ethernet adapter to a LAN/WLAN.
(3)CDC-NCM (Network Control Model).The NCM (Network Control Model) protocol is used for exchanging High Speed Ethernet-framed data between the device and host. A CDC NCM compliant device exposes itself as a virtual NIC to the host operating system. The NIC is assigned with a MAC and an IP address.
A general use case of a CDC NCM device is a Wireless Network Adapter which supports 3.5G/4G networks such as: HSPA+ and LTE. 
(4)OBEX (Object Exchange) is compliant with the Wireless Mobile Communication OBEX function model, supporting OBEX applications over USB.
(5)WMC-Device Management is compliant with the Device Management function model, supporting a minimal AT command based control model.
(6)RNDIS - provides CDC like communication capabilities on Windows PCs supporting the Microsoft RNDIS protocol. Please refer to the RNDIS webpage for more info. 
==========================================USB gardget ===============================

(1)背景知識
      Linux kernel2.6以上的版本中,USB設備驅動的接口改為了gadget,包括做主和做從的驅動內容。Linux支持連接各種USB從設備,同時也支持自己作為設備插入到其他主機當中。最典型的例子就是AndroidOS的手機,插入電腦可以被識別為U盤之類的設備。
為了避免與作為主機時支持的"設備驅動(USB Device Driver)"一詞混淆,Linux給這部分的實現取名為"Gadget"。內核源碼的目錄為\drivers\usb\gadget,里面包含了內核所支持的不同類型的USBDevice Controller (UDC)驅動的實現,以及框架和不同gadget的實現。

(2) USB Gadget的三層架構
層次關系從上到下:
一層:USB Gadget功能層。BSP/Driver開發者通常是要實現這一層,從而實現一個具體的設備驅動,如Anddroid在此層實現了adb,mtp,mass_storage等。瀏覽參考關注此層代碼時,會發現“composite”是此層的關鍵字,此層中關鍵的數據結構是:struct usb_composite_driver。這一層的驅動文件一般為:driver/usb/gadget/android.c(android實現的)或driver/usb/gadget/serial.c(傳統Linux實現的USB轉串口)。
二層:USB設備層。這一層是Linux內核開發維護者實現的,與我們沒太大關系,不用我們操心,我們只關心其的一些接口就行。瀏覽參考關注此層時,會發現“gadget”是此層的關鍵字,此層的關鍵數據結構是:usb_gadget_driver,usb_composite_dev。這層主要的一個驅動文件為:driver/usb/gadget/composite.c
三層:USB設備控制器驅動層。這一層主要是與CPU、CPU USB控制器有關,與硬件緊密相關,這一層也比較頭痛,主要它和USB控制器牽扯在一起,涉及有寄存器、時鍾、DMA等等。但是這一層往往是由芯片廠商去實現。我們一般僅需在板級文件中處理好所需要的USB接口即可。這層的關鍵字就是“UDC”,主要驅動文件命名含“udc”關鍵字,一般與CPU或芯片廠商有關,如driver/usb/gadget/xxx_udc.c。
可以用一句簡單的話去概括三層的關系:USB Gadget功能層調用USB設備層的接口,USB設備層調用USB設備控制器驅動層的接口,然后USB設備控制器驅動層回調USB設備層,USB設備層回調USB Gadget功能層。

 

參考原文:http://blog.csdn.net/yiyaaixuexi/article/details/6542702#

參考原文:http://hi.baidu.com/aokikyon/blog/item/e77161e7ae190d31b83820e1.html

參考原文:http://bbs.meizu.cn/thread-4933555-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM