Note:Make a USB CDC/ACM function driver from SerialUSBFn

SerialUSBFn.DLL 是一個WinCE 的USB function driver. 簡單講就是提供WinCE裝置模擬Serial port的功能, 當該WinCE裝置透過Client Port 連接一台Host PC, 該PC會認為有一個USB to Serial 裝置, 不過Microsoft 提供的不是一個標準USB CDC/ACM class. 而是一個接近的模型, 一般來說會透過wceusbsh.sys(WinCE USB Serial Host driver) 去支援(需要安裝ActiveSync才會有該Driver)

不過據說USBSer.sys 也可以support這個特定的 device driver (這個據說來自MSFT Eng.)

看了WinCE Public下的Source Code 與USB CDC/PSTN/ACM 大概比了一下是差異很少的不多連RTS/DTR bits都一樣,  改對應的Request/Descript 就差不多了!!

sysgen 須要的幾個lib,可以簡單的 %WINCE500%PUBLICCOMMONCESYSGENmakefile 內找到(search "serialusbfn")

分別是 com_mdd2.lib/serpddcm.lib/ceddk_lib.lib/ufnclientlibbase.lib/serialusbfn_lib.lib

或者透過 Sysgen_capture serialusbfn 應該也可以找出driver 關連

另外有網友討論過CE 5不支援 USB composite 指的應該是 USB function(client) driver. 而不是Host driver stack 不支援 composite device.而 CE 6 則提供了一個composite function bus sample code.

從CE 5.0 的 Functin client driver -> USB Client port MDD-> USB Client port PDD -> USB Client port controller

CE 6.0 改成 Function client driver-> Composite bus driver -> USB client port PDD -> USB client port controller

所以基本上 CE 5.0 還是有機會搬 6.0 的code 去 support composite function driver

CE 6.0 還有一篇Optimizing a USB Function Driver Stack  主要還是講用DMA取代 memcpy, 這樣可以減少CPU time 並且得到更高的 throughput, 用memcpy 等於是data from function controller to CPU register, CPU register to System memory. 而DMA 則是 function controller to system memory (當然還是要 driver 寫的對, 兩邊都透過最大PacketSize 傳才有效, 否則USB 2.0 每傳一次就是 1ms, 傳1byte packet跟傳 1024byte packet是一樣的時間)

廣告

2 回應 to “Note:Make a USB CDC/ACM function driver from SerialUSBFn”

  1. CE 5/6都不显示的支持USB HOST composite device,CE 6自带了一个function composite device层,可以通过SYSGEN变量来添加支持。CE public下的serial驱动的确稍加改动就可以兼容CDC标准了;USBSER.sys还是无法支持activesync的驱动,activesync里面有一些专有的命令答应协议。

  2. 不過有網友跟我討論某問題, 它最早是在弄一個CDC + MassStorage 的device, 就缺 Host CDC 它說看了網上都說不支持Composite 可我看USBD應該是有可能支持的, 而且最後它也做出Host CDC + MassStorage driver 掛上就可以用該device了! 我手上有測過WM的是支持Host composite device (測FlashDisk include MassStorage HDD + MassStorage CDROMCE5 測是 MassStorge CDROM 有問題 不過 WM 是正常的, 所以我認為CE5/6 的USBD Host bus 本身是支持composite

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: