亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品三级av在线| 欧美一级二级三级蜜桃| 天天影视涩香欲综合网| 26uuu另类欧美| 色综合久久88色综合天天免费| 日本系列欧美系列| 亚洲丝袜另类动漫二区| wwww国产精品欧美| 91精品国产综合久久久久久久| 成人av资源在线观看| 日韩高清一区在线| 亚洲伊人伊色伊影伊综合网| 国产日韩精品一区| 欧美精品一区二区三| 欧美日韩一区中文字幕| 不卡的电视剧免费网站有什么| 精品一区二区三区影院在线午夜 | 91一区在线观看| 国内欧美视频一区二区| 性欧美大战久久久久久久久| 亚洲欧洲三级电影| 中文字幕第一页久久| 精品国内片67194| 91精品国产91久久综合桃花| 欧美亚洲综合一区| 在线观看av一区| 色综合咪咪久久| 一本一道久久a久久精品| 成人网在线免费视频| 国产精品一二三在| 国产成人午夜高潮毛片| 国产一区视频在线看| 美女mm1313爽爽久久久蜜臀| 日韩不卡一二三区| 日产国产高清一区二区三区| 五月婷婷激情综合网| 亚洲成av人片在线| 三级一区在线视频先锋| 亚洲成人久久影院| 五月婷婷另类国产| 美腿丝袜亚洲综合| 久久99精品网久久| 黄色日韩三级电影| 国产一区二区成人久久免费影院| 国内精品伊人久久久久av一坑 | 日韩一区二区三区在线观看| 欧美日本国产视频| 欧美一区二区福利在线| 精品国内片67194| 国产三级欧美三级日产三级99| www久久久久| 中文字幕中文乱码欧美一区二区 | 2020国产精品| 久久亚洲精华国产精华液 | 欧美又粗又大又爽| 91精品国产福利| 精品卡一卡二卡三卡四在线| 精品国产一区二区三区av性色 | 亚洲午夜国产一区99re久久| 亚瑟在线精品视频| 麻豆成人久久精品二区三区小说| 国产麻豆精品theporn| 丰满放荡岳乱妇91ww| 色综合久久中文综合久久牛| 欧美老肥妇做.爰bbww| 26uuu精品一区二区在线观看| 国产精品国产自产拍高清av| 一区二区在线观看免费| 热久久免费视频| 成人国产在线观看| 欧美日韩一区国产| 亚洲精品一区二区三区99| 国产精品久久久久9999吃药| 午夜在线电影亚洲一区| 九色porny丨国产精品| 国产91露脸合集magnet| 欧美亚洲国产一区二区三区va| 欧美成人vr18sexvr| 中文字幕在线不卡视频| 日韩精品成人一区二区在线| 国产ts人妖一区二区| 欧美性大战久久久| 久久久影视传媒| 亚洲国产精品视频| 成人小视频在线观看| 欧美另类高清zo欧美| 国产精品丝袜一区| 日韩综合小视频| av成人免费在线| 日韩一二在线观看| 亚洲美腿欧美偷拍| 国内精品写真在线观看| 91久久一区二区| 欧美国产日本韩| 男男gaygay亚洲| 日本大香伊一区二区三区| 国产婷婷色一区二区三区四区| 婷婷一区二区三区| av在线播放一区二区三区| 精品国产乱码久久久久久闺蜜| 亚洲激情自拍视频| 高清国产一区二区三区| 日韩视频免费观看高清完整版| 亚洲色图20p| 成人禁用看黄a在线| 欧美www视频| 性做久久久久久免费观看| 99精品1区2区| 一二三四区精品视频| 国产jizzjizz一区二区| 日韩欧美在线综合网| 亚洲一区二区三区四区在线免费观看 | 日本福利一区二区| 国产精品嫩草久久久久| 国产精品综合网| 精品久久久久香蕉网| 免费精品视频最新在线| 97精品电影院| 国产精品每日更新| 成人免费av资源| 久久精品免费在线观看| 久久99热国产| 日韩一区二区视频在线观看| 日韩成人免费在线| 欧美日韩一级大片网址| 夜夜嗨av一区二区三区中文字幕 | 日韩精品一区二| 三级在线观看一区二区| 69久久99精品久久久久婷婷| 亚洲18色成人| 欧美日韩在线播| 亚洲成人免费电影| 7777精品伊人久久久大香线蕉完整版 | 69成人精品免费视频| 亚洲一区二区三区四区在线| 欧美在线高清视频| 亚洲一区二区三区四区五区黄| 在线亚洲一区观看| 亚洲一区二区三区不卡国产欧美| 91国偷自产一区二区三区成为亚洲经典 | 亚洲在线成人精品| 欧美三级视频在线| 午夜视频一区在线观看| 欧美日韩国产区一| 免费看日韩a级影片| 26uuu亚洲| 福利电影一区二区三区| 中文字幕中文字幕一区| 91黄色免费版| 免费观看成人av| www国产精品av| 不卡一区二区在线| 亚洲精品va在线观看| 884aa四虎影成人精品一区| 青娱乐精品视频| 久久久久久久久久看片| 成人黄色一级视频| 一区二区欧美国产| 日韩你懂的电影在线观看| 国产精一品亚洲二区在线视频| 中文av一区二区| 欧美怡红院视频| 日韩黄色免费网站| 国产三级欧美三级日产三级99| 不卡的av中国片| 日韩国产欧美在线观看| 久久久久久影视| 色香色香欲天天天影视综合网| 天天av天天翘天天综合网色鬼国产 | 一区二区三区不卡视频| 日韩欧美一级精品久久| 成人app网站| 日韩精品久久理论片| 国产欧美一区二区在线| 欧美日韩在线观看一区二区 | 国产91色综合久久免费分享| 伊人色综合久久天天| 精品福利一区二区三区| 91视频在线看| 久久99精品久久久久久| 国产精品黄色在线观看| 日韩精品影音先锋| 99riav久久精品riav| 免费一级片91| 亚洲视频一二三区| 欧美成人高清电影在线| 天涯成人国产亚洲精品一区av| 中文字幕乱码久久午夜不卡| 制服丝袜日韩国产| 国产激情精品久久久第一区二区| 亚洲亚洲精品在线观看| 国产日产欧美一区| 欧美性欧美巨大黑白大战| 成人开心网精品视频| 亚洲国产综合91精品麻豆| 国产精品国产三级国产普通话蜜臀 | 久久久久久久免费视频了| 欧美视频日韩视频| 国产精品一区三区| 青青草97国产精品免费观看|