⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb_disk.lst

📁 32M 优盘源码 AT89C51SND1C K9F5608
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   USB_DISK                                                              08/24/2008 00:08:02 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE USB_DISK
OBJECT MODULE PLACED IN USB_DISK.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE USB_DISK.C LARGE BROWSE

line level    source

   1          #include "Gloab.H"
   2          #include "UDISK_DEF.H"
   3          
   4          extern void ReadFlash();         //Defined in FLASH_RW.C
   5          extern void WriteFlash();
   6          
   7          #define FLASH_RD_BUSY                           P5_2
   8          
   9          // 写入地址字段
  10          static void NfWriteAddr(unsigned char adr)
  11          {
  12   1              *((unsigned char volatile xdata  *)0xF002) = adr;
  13   1      }
  14          
  15          // 命令写入
  16          static void NfWriteCmd(unsigned char cmd)
  17          {
  18   1              *((unsigned char volatile xdata  *)0xF001) = cmd;
  19   1      }
  20          
  21          // FLASH测忙
  22          static void NfWaitBusy(void)
  23          {
  24   1              while (!FLASH_RD_BUSY);
  25   1      }
  26          
  27          code unsigned char Device_Descriptor[18] = {
  28                                                   0x12,                     //设备描述符的字节数大小
  29                                                           0x01,             //设备描述符类型编号
  30                                                           0x10, 0x01,       //USB版本号
  31                                                           0x00,             //USB分配的设备类代码
  32                                                           0x00,             //USB分配的子类代码
  33                                                           0x00,             //USB分配的设备协议代码
  34                                                           0x20,             //端点0的最大包大小
  35                                                           0xEB, 0x03,       //厂商编号
  36                                                           0x02, 0x20,       //产品编号 
  37                                                           0x00, 0x01,       //设备出厂编号 
  38                                                           0x00,             //设备厂商字符串的索引  
  39                                                           0x00,             //描述产品字符串的索引  
  40                                                           0x00,             //描述设备序列号字符串的索引   
  41                                                           0x01              //可能的配置数量     
  42                                                          };
  43          
  44          code unsigned char Configuration_Descriptor_All[32] = {
  45                                                                                              //配置描述符
  46                                                          0x09,              //配置描述符的字节数大小
  47                                                      0x02,              //配置描述符类型编号
  48                                                      0x20,0x00,         //Total length in bytes of data returned  LSB  //MSB          
  49                                                          0x01,              //只包含一个接口
  50                                                          0x01,              //该配置的编号
  51                                                      0x00,              //iConfiguration字段
  52                                                          0x80,                      //采用总线供电,不支持远程唤醒
  53                                                          0xfa,              //Maximum Power Consumption in 2mA units 
  54                                                      //接口描述符
  55                                                          0x09,                      //接口描述符的字节数大小
C51 COMPILER V8.02   USB_DISK                                                              08/24/2008 00:08:02 PAGE 2   

  56                                                      0x04,                          //接口描述符类型编号
  57                                                      0x00,              //接口编号为0
  58                                                      0x00,              //该接口描述符的编号
  59                                                          0x02,              //非0端点数量为2,只使用端点主端点输入和输出
  60                                                          0x08,              //USB大容量存储设备
  61                                                          0x06,              //使用的子类,为简化块命令 1=RBC,2=SFF,3=QIC,4=UFI,5=SFF,6=SCSI
  62                                                          0x50,              //使用的协议,这里使用单批量传输协议
  63                                                          0x00,              //接口描述符字符串索引
  64                                                          //主端点输入描述                  
  65                                                          0x07,              //端点描述符的字节数大小  
  66                                                          0x05,              //端点描述符类型编号
  67                                                          0x81,              //端点号,主输入端点
  68                                                          0x02,              //使用的传输类型,批量传输    
  69                                                          0x40, 0x00,        //该端点支持的最大包尺寸,64字节 
  70                                                          0x00,               //中断扫描时间,对批量传输无效
  71                                                          //主端点输出描述   
  72                                                          0x07,              //端点描述符的字节数大小   
  73                                                          0x05,              //端点描述符类型编号
  74                                                          0x02,              //端点号,主输出端点
  75                                                          0x02,              //使用的传输类型,批量传输
  76                                                          0x40, 0x00,        //该端点支持的最大包尺寸,64字节
  77                                                          0x00                //中断扫描时间,对批量传输无效
  78                                                  };
  79          
  80          
  81          code unsigned char B_InquiryData[] = {
  82                                                                  0x00,                          //Direct Access Device
  83                                                                  0x80,                          //RMB
  84                                                                  0x00,                          //ISO/ECMA/ANSI
  85                                                                  0x01,                          //Response Data Format
  86                                                                  0x1f,                          //Additional Length
  87                                                                  0x00,                          //Reserved
  88                                                                  0x00,                          //Reserved
  89                                                                  0x00,                          //Reserved 
  90                                                                  'J', 'I', 'A', 'N', 'G', 'S', 'H', 'A',        //Vendor Information
  91                                                                  'U', 'S', 'B', '-', 'M', 'P', '3', ' ', 'V', '3', '.', '0', ' ', ' ', ' ', ' ',//Product Identifica
             -tion
  92                                                                  0, 0, 0, 0                                         //Product Revision Level n.nn
  93                                                                  };                     
  94          
  95          //SCSI-Read_Format_capacities命令的返回数据      
  96          code unsigned char B_Read_Format_capacities[] = {0x00, 0x00, 0x00, 0x10,                //capacity list header
  97                                                                                  0x00, 0x00, 0x07, 0xf5, 0x01, 0x00, 0x02, 0x00, //capacity descriptor
  98                                                                              //Number of Blocks =2037,unformatted media,blocklength = 512Bytes
  99                                                                                  0x00, 0x00, 0x07, 0xfd, 0x00, 0x00, 0x02, 0x00  //Formattable Capacity Descriptors
 100                                                                                  };
 101          
 102          //SCSI-Read_Capacity命令的返回数据
 103          code unsigned char B_Read_Capacity[] = {
 104                                                                          0x00, 0x00, 0xfe, 0xa0,    //Last  Logical Block Address for 32MB 
 105                                                                          0x00, 0x00, 0x02, 0x00     //block length in bytes
 106                                                                          };
 107          //SCSI-Mode_Sense命令的返回数据                         
 108          code unsigned char B_Mode_Sense_ALL[] = {0x0b, 0x00,       //Mode Data Length
 109                                                                  0x00, 0x08, 0x00, 0x00,
 110                                                                  0x7d, 0, 0, 0, 0x02, 0x00
 111                                                                  };
 112          //SCSI-Mode_Sense命令的返回数据                 
 113          code unsigned char B_Mode_Sense_TPP[] = {0xf0, 0x00,       //Mode Data Length
 114                                                                  05, 00, 00, 00, 00, 0x0b, 00, 00, 00, 00, 0x24, 00, 00, 00, 00, 00
 115                                                                  };
 116          //SCSI-Mode_Sense命令的返回数据                 
C51 COMPILER V8.02   USB_DISK                                                              08/24/2008 00:08:02 PAGE 3   

 117          code unsigned char B_Mode_Sense_ZERO[] = {0x00, 0x06,      //Mode Data Length
 118                                                                  0x00,                          //Medium Type Code
 119                                                                  0,                             //write enabled
 120                                                                  0, 0, 0, 0                     //reserved       
 121                                      };
 122          
 123          
 124          unsigned char data bulk_CSW[]={0x55,0x53,0x42,0x53,     //bytes 4 dCSWSignature
 125                                                        0x00,0x00,0x00,0x00,          //bytes 4 dCSWTag
 126                                                        0x00,0x00,0x00,0x00,              //bytes 4 dDataResiduce
 127                                                        0x00};                            //bCSWStatus  00=good state.
 128          
 129          
 130          
 131          struct_CBW data bulk_CBW;
 132          
 133          
 134          
 135          void AtmelUSBInit()
 136          {
 137   1              int data i;     
 138   1              PLLNDIV =       0x04;
 139   1              PLLCON |=       (0x3&Rdiv)<<6;
 140   1              PLLRDIV =       (0x3ff&Rdiv)>>2;
 141   1              USBCLK=0;
 142   1              PLLCON&=(~PLLRES);
 143   1              PLLCON|=PLLEN;
 144   1              USBCON&=(~USBE);
 145   1              for(i=0;i<3000;i++);
 146   1              USBCON|=USBE;
 147   1      
 148   1      }       
 149          
 150          void EpEnable(void)
 151          {
 152   1              UEPNUM=0x00;    UEPCONX=0x80;
 153   1              UEPNUM=0x01;    UEPCONX=0x86;
 154   1              UEPNUM=0x02;    UEPCONX=0x82;
 155   1              UEPRST=0x07;    UEPRST= 0x00;
 156   1              UEPIEN=0x07;    USBIEN|=EEOFINT;
 157   1              USBADDR=FEN;
 158   1      }
 159          
 160          unsigned char ReadEp(unsigned char EpNum,unsigned char *Data)
 161          {
 162   1              unsigned char data i=0;
 163   1              UEPNUM=EpNum;
 164   1              while(i<UBYCTLX)
 165   1              {
 166   2                      Data[i++]=UEPDATX;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -