亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.c

?? usb接口的移動硬盤
?? C
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************
   本程序只供學習使用,未經作者許可,不得用于其它任何用途
      我的郵箱:computer-lov@tom.com
        歡迎訪問我的blog:  http://computer00.21ic.org

USB.C  file

Created by Computer-lov
Date: 2004.9.21

Edit date:2006.3.2

Version V1.1
Copyright(C) Computer-lov 2004-2014
All rigths reserved
             
*******************************************************************/

#include<AT89x52.H>
#include "USB.H"
#include "PDIUSBD12.H"
#include "MASS_STORAGE.H"
//#include<serial.h>
#include "ide.h"

#define USB_COMMAND_ADD           1
#define USB_DATA_ADD              0

#define USB_DATA                  P0
#define USB_A0                    P3_5
#define USB_WR                    P3_6
#define USB_RD                    P3_7
#define USB_INT                   P3_2


#define ENDPOINT_NUMBER           2
#define MAX_CONTROL_DATA_SIZE     16
#define MAX_LUN                    0
#define MAX_BULK_DATA_SIZE        64

CONTROL_DATA_BUFF idata Control_Data;

unsigned char idata buffer[64];

CBW idata cbw;
CSW idata csw;


/*union 
{
 unsigned char Register;
 struct
  {
   unsigned char Command                :1;
   unsigned char Data                   :1;
  }Status;
}SCSI;*/


unsigned char bdata SCSI_Register;
sbit SCSI_Command    =   SCSI_Register^0;
sbit SCSI_Data       =   SCSI_Register^1;


unsigned char *pData;

unsigned char code DISK_INF[36]
=                                      //磁盤信息
{
 0x00,
 0x00,
 0x02,
 0x02,
 0x1F,
 0x00,0x00,0x00,
 0x49,0x44,0x45,0xA1,0xFA,0x55,0x53,0x42, 
 0xD7,0xD4,0xBC,0xBA,0xD7,0xF6,0xB5,0xC4,0xD2,0xC6,0xB6,0xAF,0xD3,0xB2,0xC5,0xCC,
 0x31,0x2E,0x30,0x31
};

unsigned char DISK_CAPACITY[8]=                                  //磁盤容量
{
 0x00,0x01,0xff,0x00,
 0x00,0x00,0x02,0x00
};

code unsigned char SENSE[0x12]=                                      //模式探測返回數據
{
0x70, 0x00, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00
};


unsigned int SWAP(unsigned int temp)                                //高低字節交換
{
 unsigned char i;
 i=((unsigned char *)&temp)[0];
 ((unsigned char *)&temp)[0]=((unsigned char *)&temp)[1];
 ((unsigned char *)&temp)[1]=i;
 return temp;
}

unsigned char LSB(unsigned int temp)                                //取一個整數的低字節
{
 return (unsigned char)temp;
}

unsigned char MSB(unsigned int temp)                                //取一個整數的高字節
{
 return (unsigned char)(temp>>8);
}

code unsigned char LANGUAGE_ID[4]={0x04,0x03,0x09,0x04};            //字符串描述符所用的語言種類        

code unsigned char device_serial_number[18]=                         //設備序列號
 {0x12,0x03,0x32,0x00,0x30,0x00,0x37,0x00,0x31,0x00,0x30,0x00,0x39,0x00,0x38,0x00,0x32,0x00};

code DEVICE_DESCRIPTOR_STRUCT device_descriptor=     //設備描述符
{
 sizeof(DEVICE_DESCRIPTOR_STRUCT),                   //設備描述符的字節數大小
 DEVICE_DESCRIPTOR,	                             //設備描述符類型編號
 0x1001,                                             //USB版本號
 0x00,                                               //USB分配的設備類代碼
 0x00,                                               //USB分配的子類代碼
 0x00,                                               //USB分配的設備協議代碼
 0x10,                                               //端點0的最大包大小
 0x7104,                                             //廠商編號
 0xf0ff,                                             //產品編號
 0x0100,                                             //設備出廠編號
 0x00,                                               //設備廠商字符串的索引
 0x00,                                               //描述產品字符串的索引
 0x02,                                               //描述設備序列號字符串的索引
 0x01                                                //可能的配置數量
};

typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
{
 CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
 INTERFACE_DESCRIPTOR_STRUCT  interface_descritor;
 ENDPOINT_DESCRIPTOR_STRUCT  endpoint_descriptor[ENDPOINT_NUMBER];
}CON_INT_ENDP_DESCRIPTOR_STRUCT;

code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor=
{
//configuration_descriptor                                          //配置描述符
{
 sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),                           //配置描述符的字節數大小
 CONFIGURATION_DESCRIPTOR,                                          //配置描述符類型編號
 (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+
 (sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,
 0x01,                                                            //只包含一個接口
 0x01,                                                            //該配置的編號
 0x00,                                                            //iConfiguration字段
 0x80,                                                            //采用總線供電,不支持遠程喚醒
 0xC8                                                            //從總線獲取最大電流400mA
},
//interface_descritor                                             //接口描述符
{
 sizeof(INTERFACE_DESCRIPTOR_STRUCT),                             //接口描述符的字節數大小
 INTERFACE_DESCRIPTOR,                                            //接口描述符類型編號
 0x00,                                                            //接口編號為0
 0x00,                                                            //該接口描述符的編號
 ENDPOINT_NUMBER,                                                 //非0端點數量為2,只使用端點主端點輸入和輸出
 0x08,                                                            //USB大容量存儲設備
 0x06,                                                            //使用的子類,為簡化塊命令
 0x50,                                                            //使用的協議,這里使用單批量傳輸協議
 0x00                                                             //接口描述符字符串索引
},

//endpoint_descriptor[]
{
 {                                                                  //主端點輸入描述
  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                             //端點描述符的字節數大小
  ENDPOINT_DESCRIPTOR,                                            //端點描述符類型編號
  MAIN_POINT_IN,                                                  //端點號,主輸入端點
  ENDPOINT_TYPE_BULK,                                             //使用的傳輸類型,批量傳輸
  0x4000,                                                         //該端點支持的最大包尺寸,64字節
  0x00                                                            //中斷掃描時間,對批量傳輸無效
 },
  
 {                                                                  //主端點輸出描述
  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                             //端點描述符的字節數大小
  ENDPOINT_DESCRIPTOR,                                            //端點描述符類型編號
  MAIN_POINT_OUT,                                                 //端點號,主輸出端點
  ENDPOINT_TYPE_BULK,                                             //使用的傳輸類型,批量傳輸
  0x4000,                                                         //該端點支持的最大包尺寸,64字節
  0x00                                                            //中斷掃描時間,對批量傳輸無效
 }
}
};

/*union                                          //程序標志位
{
unsigned int Register;
struct 
{
 unsigned char bus_reset        :1;
 unsigned char suspend          :1;
 unsigned char remote_wakeup    :1;
 unsigned char int_isr          :1;
 unsigned char not_end          :1;
 unsigned char usb_idle         :1;
 unsigned char usb_busy         :1;
 unsigned char setup_packet_in  :1;
 unsigned char setup_packet_out :1;
 unsigned char set_addr         :1;
 unsigned char usb_endp0_in     :1;
 unsigned char usb_endp2_in     :1;
 unsigned char usb_endp2_out    :1;
}flags;
}usb_flags;
*/

unsigned int bdata usb_flags_Register;
//unsigned bdata usb_flags_Register2;

sbit USB__bus_reset        = usb_flags_Register^0;
sbit USB_suspend          = usb_flags_Register^1;
sbit USB_remote_wakeup    = usb_flags_Register^2;
sbit USB_int_isr          = usb_flags_Register^3;
sbit USB_not_end          = usb_flags_Register^4;
sbit USB_usb_idle         = usb_flags_Register^5;
sbit USB_usb_busy         = usb_flags_Register^6;
sbit USB_setup_packet_in  = usb_flags_Register^7;
sbit USB_setup_packet_out = usb_flags_Register^8;
sbit USB_set_addr         = usb_flags_Register^9;
sbit USB_usb_endp0_in     = usb_flags_Register^10;
sbit USB_usb_endp2_in     = usb_flags_Register^11;
sbit USB_usb_endp2_out    = usb_flags_Register^12;

/*union                                         //中斷寄存器
{
 unsigned char Register[2];
 struct 
  {
   unsigned char control_out_port  :1;
   unsigned char control_in_port   :1;
   unsigned char port_out_1        :1;
   unsigned char port_in_1         :1;
   unsigned char main_out_port     :1;
   unsigned char main_in_port      :1;
   unsigned char bus_reset         :1;
   unsigned char suspend_change    :1;
   unsigned char DMA_EOT           :1;
   unsigned char not_use           :7;
  }Interrupt;
}Interrupt_Register;
*/

unsigned char bdata Interrupt_Register[2];

sbit Interrupt_control_out_port   =  Interrupt_Register[0]^0;
sbit Interrupt_control_in_port    =  Interrupt_Register[0]^1;
sbit Interrupt_port_out_1         =  Interrupt_Register[0]^2;
sbit Interrupt_port_in_1          =  Interrupt_Register[0]^3;
sbit Interrupt_main_out_port      =  Interrupt_Register[0]^4;
sbit Interrupt_main_in_port       =  Interrupt_Register[0]^5;
sbit Interrupt_bus_reset          =  Interrupt_Register[0]^6;
sbit Interrupt_suspend_change     =  Interrupt_Register[0]^7;
sbit Interrupt_DMA_EOT            =  Interrupt_Register[1]^0;


/*union                                    //端點最后處理狀態
{
 unsigned char Register;
 struct
 {
  unsigned char successful          :1;
  unsigned char error_code          :4;
  unsigned char setup_packet        :1;
  unsigned char data_1              :1;
  unsigned char prestatus_not_read  :1;
 }Status;
}Last_Status;*/

unsigned char bdata Last_Status_Register;

sbit Last_Status_successful          =   Last_Status_Register^0;
sbit Last_Status_error_code0         =   Last_Status_Register^1;
sbit Last_Status_error_code1         =   Last_Status_Register^2;
sbit Last_Status_error_code2         =   Last_Status_Register^3;
sbit Last_Status_error_code3         =   Last_Status_Register^4;
sbit Last_Status_setup_packet        =   Last_Status_Register^5;
sbit Last_Status_data_1              =   Last_Status_Register^6;
sbit Last_Status_prestatus_not_read  =   Last_Status_Register^7;

//*****************   延時x毫秒函數 ***********
void delay(unsigned int x)                
{
 unsigned int i;
 unsigned int j;
 for(i=0;i<x;i++)
 for(j=0;j<230;j++);
}
//********************************************


void write_usb_command(unsigned char usb_command)       //寫USB命令
{
 USB_A0=USB_COMMAND_ADD;
 USB_DATA=usb_command;
 USB_WR=0;
 USB_WR=1;
 USB_DATA=0xFF;
}

void write_a_usb_data(unsigned char usb_data)        //寫一字節USB數據
{
 USB_A0=USB_DATA_ADD;
 USB_DATA=usb_data;
 USB_WR=0;
 USB_WR=1;
 USB_DATA=0XFF;
}

unsigned char read_a_usb_data(void)                  //讀一字節USB數據
{
 unsigned char temp;
 USB_A0=USB_DATA_ADD;
 USB_RD=0;
 temp=USB_DATA;
 USB_RD=1;
 return temp;
}


void read_interrupt_register(void)             //讀USB中斷寄存器
{
 write_usb_command(Read_Interrupt_Register);
 Interrupt_Register[0]=read_a_usb_data();
 Interrupt_Register[1]=read_a_usb_data();
}

void set_usb_addr(unsigned char addr)          //設置USB地址
{
 write_usb_command(Set_Address);
 write_a_usb_data(0x80|addr);
}

void set_endpoint_enable(void)                  //端點使能
{
 write_usb_command(Set_Endpoint_Enable);
 write_a_usb_data(0x01);
}

unsigned char select_endpoint(unsigned char endp)   //選擇終端點
{
 write_usb_command(Select_EndPoint+endp);
 return read_a_usb_data();
}

unsigned char  read_last_status(unsigned char endp)   //讀端點最后狀態
{
 write_usb_command(Read_Last_Status+endp);
 return read_a_usb_data();
}

void set_endpoint_status(unsigned char endp,unsigned char status)  //設置端點狀態
{
 write_usb_command(0x40+endp);
 write_a_usb_data(!status);
}

unsigned char read_endpoint_status(unsigned char endp)           //讀端點狀態
{
 write_usb_command(0x80+endp);
 return read_a_usb_data();
}

void clear_buffer(void)                        //清緩沖,在讀取緩沖數據后調用
{
 write_usb_command(Clear_Buffer);
}

void validate_buffer(void)                    //緩沖區數據有效,在寫緩沖后調用
{
 write_usb_command(Validate_Buffer);
}

void ack_setup(unsigned char endp)            //應答建立包
{
 select_endpoint(endp);
 write_usb_command(Ack_Setup);
}

void error(unsigned char number)             //出錯處理
{
// unsigned char Error[]={"ERROR: "};
// prints(Error);
// printc(number);
 number=0;
}

unsigned char read_endpoint_buff(unsigned char endp,unsigned char len,unsigned char * buff)   //讀終端點緩沖
{
 unsigned char i,j;
 read_last_status(endp);
 if(!(select_endpoint(endp))&0x01){error(0); return 0;}
 read_endpoint_status(endp);
 write_usb_command(Read_Buffer);
 read_a_usb_data();
 j=read_a_usb_data();
 if(j>len)
  j=len;
 for(i=0;i<j;i++)
  {
   USB_RD=0;
   buff[i]=USB_DATA;
   USB_RD=1;
  }
 clear_buffer();
 return j;
}

unsigned char write_endpoint_buff(unsigned char endp,unsigned char len,unsigned char * buff)    //寫終端點緩沖
{
 unsigned char i;
 read_last_status(endp);
 select_endpoint(endp);
 write_usb_command(Write_Buffer);
 write_a_usb_data(0);
 write_a_usb_data(len);
 for(i=0;i<len;i++)
  {
   USB_DATA=*(buff+i);
   USB_WR=0;
   USB_WR=1;
  }
 USB_DATA=0XFF;
 validate_buffer();
 return len;
}

void disconnect_usb(void)
{
 write_usb_command(0xf3);
 write_a_usb_data(0x0e);
 write_a_usb_data(0x47);
 delay(100);
}

void connect_usb(void)                            //連接USB
{
 write_usb_command(0xf3);                         //初始化USBD12
 write_a_usb_data(0x1e);                          //連接USB
 write_a_usb_data(0x47);                          //設置頻率
}

void init_usb(void)                              //初始化USB
{
 set_usb_addr(0);
 set_endpoint_enable();
}

void usb_bus_reset(void)                         //USB總線復位處理
{
// code unsigned char Usb_Bus_Reset[]={"USB BUS RESET"};
// prints(Usb_Bus_Reset);
 usb_flags_Register=0;
 set_endpoint_enable();
 SCSI_Command=1;
 SCSI_Data=0;
 csw.dCSWSignature=0x55534253;

}

void usb_bus_suspend(void)                       //USB總線掛起處理
{
// code unsigned char Usb_Bus_Suspend[]={"USB BUS SUSPEND"};
// prints(Usb_Bus_Suspend);
// send_to_comport(10);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看在线观看| 99精品视频一区二区三区| 91久久精品网| 国产午夜精品一区二区三区视频| 亚洲曰韩产成在线| 91毛片在线观看| 国产精品久久久久久久午夜片| 精品一区中文字幕| 日韩欧美在线一区二区三区| 亚洲成人一区二区在线观看| 色婷婷亚洲综合| 亚洲国产成人91porn| 色哦色哦哦色天天综合| 伊人色综合久久天天| 色综合天天综合色综合av| 亚洲色图都市小说| 欧美午夜精品一区二区三区| 亚洲一二三区在线观看| 欧美区一区二区三区| 青青草国产精品97视觉盛宴 | 高清成人免费视频| 久久综合九色欧美综合狠狠| 国产成人av资源| 亚洲欧美视频在线观看视频| 欧美丰满美乳xxx高潮www| 久久99国产精品免费网站| 欧美激情中文不卡| 在线观看视频欧美| 国产精品99久久久久久久vr| 亚洲欧美日韩成人高清在线一区| 欧美年轻男男videosbes| 国产美女久久久久| 亚洲一区二区精品久久av| 日韩三级精品电影久久久 | 91在线免费视频观看| 奇米在线7777在线精品| 中文成人av在线| 欧美日韩一级视频| 国产一本一道久久香蕉| 亚洲va国产va欧美va观看| 欧美国产一区二区| 久久免费电影网| 日韩欧美一区二区三区在线| 91久久精品一区二区| 成人免费不卡视频| 国产精华液一区二区三区| 精品综合久久久久久8888| 亚洲一区成人在线| 三级一区在线视频先锋| 一区二区三区产品免费精品久久75| 国产亚洲一区字幕| 精品国产1区2区3区| 麻豆国产一区二区| 亚洲美女在线国产| 国产精品久久久久久久久免费桃花 | 国产精品中文字幕日韩精品| 亚洲午夜一区二区三区| 亚洲精品久久久蜜桃| 一区精品在线播放| 亚洲欧洲三级电影| 中文在线免费一区三区高中清不卡| 日韩一区国产二区欧美三区| 在线观看一区二区精品视频| 99久久伊人网影院| 国产在线视频不卡二| 国精产品一区一区三区mba桃花| 日产国产高清一区二区三区| 亚洲综合久久av| 一片黄亚洲嫩模| 中文字幕在线一区免费| 17c精品麻豆一区二区免费| 国产精品久久久久久久久免费丝袜| 欧美国产一区二区| 亚洲男女毛片无遮挡| 午夜电影久久久| 国产一区二区三区在线观看精品 | 日本怡春院一区二区| 蜜桃一区二区三区四区| 看片的网站亚洲| 成人黄色电影在线| 国产成人综合网站| 色妞www精品视频| 欧美一区二区在线不卡| 欧美电影精品一区二区| 久久亚洲精品国产精品紫薇| 国产精品美女久久福利网站| 亚洲精品国产品国语在线app| 日韩不卡一二三区| 99久久er热在这里只有精品66| 日本精品视频一区二区三区| 日韩情涩欧美日韩视频| 中文字幕中文字幕一区二区| 蜜臀av性久久久久蜜臀aⅴ| 成人免费av资源| 欧美一级电影网站| 亚洲乱码国产乱码精品精小说| 奇米精品一区二区三区四区 | 欧美成人aa大片| 国产精品久久夜| 极品销魂美女一区二区三区| 成人丝袜18视频在线观看| 欧美高清精品3d| 一区二区三区av电影| 国内精品国产三级国产a久久| 91黄色在线观看| 亚洲男人天堂一区| 成人高清伦理免费影院在线观看| 777久久久精品| 天天色图综合网| 欧美日本一道本| 亚洲美女偷拍久久| 色婷婷亚洲综合| 亚洲六月丁香色婷婷综合久久| 国产成人精品亚洲日本在线桃色| 日韩欧美电影在线| 免费日韩伦理电影| 日韩欧美国产综合在线一区二区三区| 亚洲成a人片在线观看中文| 色老头久久综合| 亚洲成人一区二区在线观看| 欧美三级午夜理伦三级中视频| 亚洲国产人成综合网站| 91国偷自产一区二区使用方法| 国产精品伦理在线| 色噜噜夜夜夜综合网| 首页亚洲欧美制服丝腿| 日韩欧美一级特黄在线播放| 国产在线麻豆精品观看| 国产精品天美传媒| 欧美视频完全免费看| 日本美女一区二区三区视频| 精品国偷自产国产一区| 成人午夜伦理影院| 亚洲国产精品激情在线观看| 一本到不卡精品视频在线观看 | 99精品久久久久久| 欧美激情一区二区三区全黄| 欧美亚洲高清一区二区三区不卡| 琪琪一区二区三区| 国产精品国产三级国产专播品爱网| 欧美日韩一卡二卡| 成人网页在线观看| 精品亚洲成a人| 26uuu精品一区二区| 一本久久a久久免费精品不卡| 精品一二线国产| 亚洲国产美女搞黄色| 亚洲欧洲在线观看av| 久久亚洲综合色| 日韩精品在线网站| 欧美日韩精品一区二区三区四区| 成人三级伦理片| 国产一区二区剧情av在线| 亚洲一级片在线观看| 一区二区在线观看免费| 欧美激情一区不卡| 亚洲国产精品v| 欧美经典一区二区| 欧美一区二区在线播放| 欧美精品精品一区| 欧美一二三区精品| 日韩精品专区在线影院重磅| 色婷婷综合久久久中文字幕| 99国产精品国产精品久久| 成人黄色在线视频| 国产不卡在线一区| 97精品国产97久久久久久久久久久久| 国产精品一区二区在线看| 青青草精品视频| 国产一区欧美日韩| 波多野结衣一区二区三区| 国产99精品国产| 国产精品综合一区二区三区| 欧美韩国日本综合| 国产精品狼人久久影院观看方式| 亚洲自拍偷拍av| 免费视频最近日韩| 91视频.com| 26uuuu精品一区二区| 亚洲电影在线免费观看| 成人爱爱电影网址| 精品久久人人做人人爰| 一区二区三区在线免费| 丁香婷婷综合色啪| 欧美成人aa大片| 日韩**一区毛片| 欧洲一区在线电影| 一区二区三区精品视频| 国产成都精品91一区二区三| 欧美一区中文字幕| 午夜久久久久久电影| 色悠悠久久综合| 亚洲女子a中天字幕| av网站免费线看精品| 久久久久久久久久久电影| 日韩专区欧美专区| 欧美性高清videossexo| 亚洲一卡二卡三卡四卡无卡久久| 99国产精品99久久久久久| 国产精品国产三级国产a|