《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輸出中斷),而後根據不一樣的中斷來源跳入相應的處理模塊以進行不一樣的中斷處理,並在處理完畢後返回