2010-06-14 88 views
2

我知道這可能不是最簡單的事情,但我試圖用USB連接微控制器和PC。我不想使用內部USART的微控制器或USB到RS232轉換,其項目,以幫助我瞭解各種原則。因此,從微控制器端完成通信是小菜一碟 - 我的意思是,當我知道他的協議時,它很容易在Micro上實現,因爲我直接控制了evrything,甚至是精確的時序。從Windows控制USB

但這不是PC的情況。我對Windows處理連接設備的概念不是很熟悉。在我之前的一個問題中,我詢問Windows如何通過驅動程序與設備協同工作。我明白,對於Windows的內部使用,驅動程序必須具有一些可用於OS的默認功能集。我的意思是,當操作系統要訪問硬盤驅動器時,它會調用硬盤驅動器(可能是操作系統內部的硬盤驅動器),並帶有特定的「問題」,這意味着硬盤驅動器必須寫入與Windows配合才能具有寫入功能由操作系統調用的地方。與GPU相似,即使DirectX,我的意思是DirectX必須調用驅動程序的特定功能,所以驅動程序必須寫入與DX一起工作。我知道,WinAPI的許多功能都是獨立工作的,但即使是「簡單」窗口也必須寫入幀緩衝區,使用MMIO來驅動程序指定的地址。我對嗎?

所以,我預計Windows有內部功能,WinAPI的部分設計用於某些共同使用的東西。致電製造商設計的驅動程序。但這似乎並非完全正確,因爲Windows無法通過Paralel端口進行通信。我的意思是,WinAPI沒有使用串行端口的功能,但是有硬盤,GPU等功能。

但是現在出現了我非常失落的部分。所以,我認爲Windows必須具有一些通過USB進行通信的內置功能,例如它可以處理USB閃存。那麼,是否有任何WinAPI功能可以讓用戶通過該功能操作USB,或者當我想自己使用USB時,是否必須自己調用所需的USB驅動程序功能?所有你需要發送到USB控制器的設備地址和信息權利?我的意思是,我不需要寫任何新的驅動程序,對嗎?如果有這種情況,只需調用WinAPI函數,或直接調用原始USB驅動程序。這是否有任何意義?

回答

1

爲了讓您的生活更輕鬆,避免編寫自己的驅動程序,請嘗試在USB之上使用HID(人機界面設備)API。雖然它說「人機界面」,但實際上並不一定適用於人爲控制的設備。優點是現代操作系統已經配備了HID驅動程序,您可以使用示例代碼,例如您可以找到here以開始使用。許多微控制器製造商爲協議的嵌入提供了合適的代碼。

由於操作系統已經瞭解HID,如果您使用HID接口構建設備,您會發現不僅可以從任何操作系統讀取設備,還可以發現許多應用程序已經可以與您的設備通話通信僅限於HID的足夠小的子集。 (例如,我爲音樂應用程序構建了一個輸入設備,但令人驚訝的是,我發現我可以直接將其插入到我們在工作中使用的3D動畫應用程序中,運行在不同的操作系統上,並立即開始工作,無需編寫一個單一的額外的代碼行!)

+0

嗨,謝謝,我還可以有一個問題嗎?如果我做對了,HID實際上是與USB驅動程序通信的WinAPI部分,但USB驅動程序仍然必須具備向設備發送數據和向後發送數據的能力。那麼我可以直接尋找USB驅動嗎?我從來沒有用過C標準庫,WinAPI或.net類以外的東西。 – 2010-06-15 20:34:00

+0

應該已經安裝了知道如何處理所有事情的HID驅動程序。 (我的經驗不是在Windows上,不幸的是,我做了一些Google搜索。第13章[這裏](http://proyectosfie.com/html/usb/libro/)是關於Windows上的HID的。)我認爲你不需要知道司機的任何事情,除了有一個禮物。 – sigfpe 2010-06-15 21:23:23

+0

謝謝。我可以有更快的問題嗎?比方說,我有USB攝像頭,我希望它能與一些設計用於網絡攝像頭的WinAPI功能一起工作。 (即使沒有,它的正義理論)所以,我會在WinPAI和一些通用USB驅動程序之間編寫一些翻譯程序(只需調用USB驅動程序的send()函數),還是必須在驅動程序中寫入整個USB通信?我的意思是所有與USB控制器的通信? – 2010-06-16 09:11:55

0

USB包含一組庫存功能,非常類似於支持USB閃存驅動器(USB Mass Storage class)。微控制器接口的兩個最有趣的是HID和CDC。 CDC最容易使用,因爲它直接模擬舊式串行端口。

如果將微控制器配置爲CDC設備,則Windows會將其列爲串行端口,並且所有舊的串行API都可以使用它。