C8051逆向電阻屏:頭兒拍腦殼說電阻屏IC好賺錢3塊錢成本能賣20幾塊。,一個月不分晝夜逆向成功後頭兒說電阻屏已經被市場淘汰請放棄治療。

參考:
書籍,《圈圈教你玩USB》 
 C8051F單片機快速入門:http://www.waveshare.net/Left_Column/C8051F_Application_Notes.htm
 
《1》USB器件最底層的驅動編寫
 
C8051F320.H  C8051F320的定義
 
F32x_USB_Register.h
USB固件。包括全部的USB核心 寄存器地址,寄存器訪問宏,和寄存器的位掩碼
 
USB.H 8051F系列專用 VID PID   USB_GetOutData()HID_SendData()

 
 
 《2》11個標準請求函數的編寫;
 
USB_Request.H
此文件包含USB請求的定義,它是不相關的單片機類型,對應USB協議2.0
 
USB.c
端點狀態、USB device狀態、SETUP數據包
 
//功能:發送STALL信號,緣由是收到了錯誤的條件或不但願的傳輸請求。
void Force_Stall(void)
 
//功能:獲取狀態,可能有三種請求:設備狀態,接口狀態,端點狀態
void Get_Status(void)  
 
void Clear_Feature()                            
{                                               
 
void Set_Address(void)   
 
void Get_Descriptor(void)   
 
void Get_Configuration(void)   
 
void Set_Configuration(void) 
 
void Get_Interface(void)     
 
void Set_Interface(void) 
 
void    USB_Enable( unsigned char sw)   
  《3》6個HID類請求函數的編寫;(此6個函數很簡單)
USB.c
 HID_SendData

  《4》USB中斷部分的編寫可用查詢或中斷法,根據D12的中斷寄存器的值,去調用11個標準請求函數;
 
調用11個標準請求函數,在 USB.c    void USB0_ISR(void) interrupt INTERRUPT_USB0 //Top-level USB ISR
只和51芯片有關。不用改動
這裏根據接收到的值,來發送報告。
 
int main( void )
{
    INT8U btmp;
     Clock_Init( );
     P1 &= 0xF0; P1MDOUT |= 0x0F;
     P2 &= 0xF9; P2MDOUT |= 0x06;
     XBR1 |= ( 1<<6 );
     USB_Init( USB_ENABLE );
     EA = 1;
     while( 1 )
     {
         for( btmp = 0; btmp < 4; btmp ++ )
         {
             MouseData[btmp] = 0;
         }
         btmp = 1;
         switch( KeyScan( ) )     //K6 is not used
         {
             case K1_PRESS://left button
                 MouseData[0] = 1;
                 break;
             case K2_PRESS://wheel front
                 MouseData[3] = 2;
                 break;
             case K3_PRESS://Right press
                 MouseData[0] = 2;
                 break;
             case K4_PRESS://middle press
                 MouseData[0] = 4;
                 break;
             case K5_PRESS://wheel back
                 MouseData[3] = -2;
                 break;
             case K1_RELEASE:
             case K3_RELEASE:
             case K4_RELEASE:
                 break;
             default:
                 btmp = 0;
                 break;
         }
         if( btmp )
         {
             HID_SendData( (INT8U *)MouseData, 4 );
         }
     }
     return 0;
}

   《5》編寫描述符;鍵盤要用到的描述符包括:1,設備描述符,2,配置描述符,3,接口描述符,4,HID描述符,5,端點描述符,6,報告描述符,7,字符串描述符。其中4,6爲HID類專有的描述符,7是可選的。
USB_HID_Descriptor.c  
DeviceDesc
ReportDesc[]
String0Desc[S]等

USB.c不用動
USB.H 8051F系列專用 
VID PID
#define    EP1_PACKET_SIZE    8    //buffer size of endpoint 1 
 
USB_HID_Descriptor.h    
#define  REPORT_LENGTH  45 報告描述符長度
 
USB_HID_Descriptor.c  
描述符內容根據彙集體須要改

 
 
關鍵字:MCU選型 USB
參考PDF《C8051F320 在USB 設計中的應用》
1,選型
對於USB接口的設計,如非擴展之用,選用 帶有MCU的USB控制器固然是設計師們的首選,由於這樣不只能夠大大簡化硬件電路、減少外設體積,並且還能夠提升產品的可靠性。
 
因爲利用C8051F320該芯片進行設計時能夠不須要任何外部元件(包括電阻和晶振),於是是小型USB應用的理想選擇
 
2,C8051F320的主要特色, 符合需求
     A:   用於程序空間和運行空間:內部集成有2304 Byte RAM和16k Byte的flash存儲器
      全速的USB 2.0功能控制器
      內部集成了USB接口的數據收發器,設計中無需外部上拉電阻
    B:引腳功能
           D+、D-:USB電纜的USB  D+和USB D-鏈接端; 
          VDD:2.7~3.6V片上電源輸入端或片內電壓調節器的3.3V輸出端;
          REGIN:片內電壓調節器的5V輸入端
 
3,應用示例:
以C8051F320爲核心設計了一個USB和CAN總線的接口轉換模塊
 
   3.1 USB 接口硬件電路設計:一是接口轉換模塊 供電方式的選擇,
因爲整個模塊的功率估計在3W左右,而USB總線的供電量只適合小功率模塊的供電,最大也只有500mA,所以不能知足整個模塊的安全供電,因此模塊選擇自供電模式
二是USB 引腳的鏈接
 
    
 
3.2  固件的編寫:
 
  主要目的是:當USB設備鏈接到主機上時,主機能夠發現新設備,而後創建鏈接並完成數據傳輸任務,也就是可以讓Windows正常檢測和識別USB設備。所以在USB固件程序中,最重要的工做就是 USB描述符的定義和USB傳輸中斷的處理
USB2.0中的描述符:包括設備描述符、配置描述符、接口描述符、端點描述符等8種標準描述符和其它一些非標準描述符。
USB中斷服務程序的編寫: 
讀取USB功能控制器的三個中斷寄存器CMINT、IN1INT和OUT1INT來判斷中斷來源(USB復位中斷、端點0 中斷、端點1輸入中斷、端點2輸出中斷),而後根據不一樣的中斷來源跳入相應的處理模塊以進行不一樣的中斷處理,並在處理完畢後返回
相關文章
相關標籤/搜索