網站導航:首頁開源項目 USB開源項目:Easy USB 51 Programer  

目錄導航

   
  1、項目簡介
USB開發基礎
1、USB接口的優點及開發難易度
2、USB設備的開發流程
3、USB接口芯片(USB控制器)的選擇
4、了解USB的通訊過程
5、USB命令(請求)和USB描述符
6、實例講解USB的枚舉(配置)過程
准備工作
1、需要哪些工具
2、電路原理圖
3、手工制作您的電路板
4、測試您的硬件
HID設備類
1、讓PC機找到我們的硬件
2、如何成爲一個HID設備(模擬鼠標)
3、如何成爲一個HID設備(模擬鍵盤)
4、如何與HID設備通訊(一)
5、如何與HID設備通訊(二)
6、51編程器的實現
Windows USB 驱动程序(自定义设备)
1、Windows驅動開發基礎
2、開發環境配置
3、第一个实例-Hello Wdm(一)
4、第一个实例-Hello Wdm(二)
5、真正的實例—驅動我們的實驗板
6、真正的實例—測試驅動程序
7、真正的實例—控制LED及讀取按鍵狀態
8、如何編寫應用程序
   

相关産品    淘寶網店
     
 

 
  更多...  
 
 
如何與HID設備通訊(一) 查看/参与此開源項目相关讨论
 

  说明:本实例所使用的上位机程序开发工具为Visual C++6.0。

一、修改下位機固件程序

  我們如果想實現一個USB的HID類設備,不需要在Windows下開發自己的驅動程序。HID不一定要是標准的外設類型,唯一的要求是交換的數據存儲在報文的結構內,設備固件必須支持報文的格式。任何工作在該限制之內的設備都可以成爲一個HID,例如溫度計、電壓計、讀卡機等。

  報文的格式是由報告描述符決定的,所以只要修改描述符就能實現我們需要的報文格式。下面我們來實現一個簡單的報文格式:上位機發送固定64字節數據給設備,這個數據可以是命令,也可是數據,具體含義並不是由報告描述符來決定的,是由開發人員事先約定好的。設備返回的數據也是64個字節,同樣這個數據流的每個字節(甚至每個位)的具體含義由開發人員事先約定好。

1、修改報告描述符

A、在Descriptor.C中找到以MouseReportDescriptor函數,將其內容修改如下:

 
  1. code char MouseReportDescriptor[29] = {   
  2.     0x06,0x00,0xFF,             //USAGE_PAGE (Vendor Defined Page 1)    
  3.     0x09,0x01,              //USAGE (Vendor Usage 1)    
  4.     0xA1,0x01,              //COLLECTION (Application)    
  5.   
  6.     0x19,0x01,              //(Vendor Usage 1)    
  7.     0x29,0x08,              //(Vendor Usage 1)    
  8.     0x15,0x00,              //LOGICAL_MINIMUM (0)    
  9.     0x26,0xFF,0x00,             //LOGICAL_MAXIMUM (255)    
  10.     0x75,0x08,              //REPORT_SIZE (8)    
  11.     0x95,0x40,              //REPORT_COUNT (64)    
  12.     0x81,0x02,              //INPUT (Data,Var,Abs)    
  13.   
  14.     0x19,0x01,              //(Vendor Usage 1)    
  15.     0x29,0x08,              //(Vendor Usage 1)    
  16.     0x91,0x02,              //OUTPUT (Data,Var,Abs)    
  17.   
  18.     0xC0                    // END_COLLECTION   
  19. };  

  此報告描述符定義了64個字節的輸入輸出數據。

B、將Descriptor.C中的如下代碼

 
  1. 0x66,0x03,                      //设备制造商定的産品ID  

修改爲

 
  1. 0x66,0x06,                      //设备制造商定的産品ID  

 

C、在Descriptor.h中,將以下代碼

 
  1. extern code char MouseReportDescriptor[52];  

修改爲

 
  1. extern code char MouseReportDescriptor[29];  

D、在Main.C中找到以下代碼

 
  1. if(bEPPflags.bits.configuration)   
  2. {   
  3.     //在這裏添加端點操作代碼   
  4.       
  5. }  

将其修改爲

 
  1. if(bEPPflags.bits.configuration)       
  2. {       
  3.     //在這裏添加端點操作代碼       
  4.         
  5.     if(bEPPflags.bits.ep2_rxdone )  //主端點接收到數據(從主機發往設備的數據)       
  6.     {       
  7.         bEPPflags.bits.ep2_rxdone       = 0;           
  8.            
  9.         D12_WriteEndpoint(5,EP2_PACKET_SIZE,EpBuf);    //立即將收到的64個字節發送到PC機       
  10.     }        
  11. }   

這一步的作用是立即將接到的數據返回給主機。函數D12_WriteEndpoint的定義位于D12CI.C中。

點擊這裏下載已修改好的源代碼

2、測試

  我們可以利用一些USB調試軟件在自己沒有編寫上位機程序的情況下先進行一些測試。這裏我們要用到的工具是BUS HOUND

A、首先将第1步修改好的程序烧录到主控芯片中并将硬件插入电脑,然后打开BUS HOUND,点“Settings”按钮切换到设置页,将“Max Phase”的值设为64并点“Apply”按钮,这样BUS HOUND才能监控最多64个字节的数据流。 

B、点“Devices”按钮切换到Devices页,选定我们刚插入的硬件(一定要选紧临“USB Root Hub”的下一级设备)。

C、点“Send Commands”按钮,出现如下画面

D、选中“Endpoint”为2,“Direction”为Out的那项,“Data Length”填64,发送的数据随便填上一些数据,最后点击“Run”按钮

E、切换到BUS HOUND主界面,点“Capture”按钮切换到监控页面,如下图所示,BUS HOUND捕捉到了一些数据。其中“Phase”列中的“DO”代表主机发往设备的数据,而“DI”代表设备发往主机的数据。我们看到设备返回的数据正好和主机发送的数据一样,证明我们的下位机程序已经修改成功。

 

 
 
 
本站程序由百合電子工作室開發和維護
Copyright @ baihe electric studio
渝ICP備09006681號-4