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

📄 ch375pcinterface.lst

📁 USB 1.1 U Device for CH375 & USB 2.0 for CH375A 读写usb超精简的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 180              mLength --;
 181             }
 182            return 1;
 183              }
 184          }
 185          
 186          unsigned long SwapINT32(unsigned long dData)
 187          {
 188              dData = (dData&0xff)<<24|(dData&0xff00)<<8|(dData&0xff000000)>>24|(dData&0xff0000)>>8;
 189          return dData;
 190          }
 191          
 192          unsigned int SwapINT16(unsigned int dData)
 193          {
 194              dData = (dData&0xff00)>>8|(dData&0x00ff)<<8;
 195          return dData;
 196          }
 197          
 198          /* 从U盘中读取多个扇区的数据块到缓冲区中 */
 199          unsigned char RBC_Read(unsigned long iLbaStart, unsigned char iSectorCount,unsigned char *mBufferPoint)
 200          /* iLbaStart 是读取的线起始性扇区号, iSectorCount 是读取的扇区数 */
 201          {
 202          unsigned char mIntStatus;
 203          unsigned int  mBlockCount;
 204          unsigned char mLength;
 205          CH375_CMD_PORT_d_out(CMD_DISK_READ);  /* 从USB存储器读数据块 */
 206          CH375_DAT_PORT_d_out((unsigned char)iLbaStart);  /* LBA的最低8位 */
 207          CH375_DAT_PORT_d_out ((unsigned char)( iLbaStart >> 8 ));
 208          CH375_DAT_PORT_d_out((unsigned char)( iLbaStart >> 16 ));
 209          CH375_DAT_PORT_d_out((unsigned char)( iLbaStart >> 24 ));  /* LBA的最高8位 */
 210          CH375_DAT_PORT_d_out( iSectorCount);  /* 扇区数 */
 211          // mBufferPoint = &DATA_BUFFER;  /* 指向缓冲区起始地址 */
 212          for ( mBlockCount = iSectorCount * CH375_BLK_PER_SEC; mBlockCount != 0; mBlockCount -- ) {  /* 数据块计数 
             -*/
 213            mIntStatus = mWaitInterrupt( );  /* 等待中断并获取状态 */
 214            if ( mIntStatus == USB_INT_DISK_READ ) {  /* USB存储器读数据块,请求数据读出 */
 215             CH375_CMD_PORT_d_out(CMD_RD_USB_DATA);  /* 从CH375缓冲区读取数据块 */
 216             mLength = CH375_DAT_PORT_in();  /* 后续数据的长度 */
 217          /* 通常数据长度是64,有些U盘要求单片机必须在2mS之内取走64字节数据,否则U盘可能数据丢失 */
 218          /* 建议优化下面的循环程序,确保单片机在1mS之内完成64字节的数据传输 */
 219             if ( mLength ) {  /* 根据长度读取数据 */
 220              do {  // 对于C51,这个DO+WHILE结构效率高,速度快
 221               *mBufferPoint = CH375_DAT_PORT_in();  /* 读出数据并保存 */
 222               mBufferPoint ++;
 223              } while ( -- mLength );
 224             }
 225             CH375_CMD_PORT_d_out( CMD_DISK_RD_GO);  /* 继续执行USB存储器的读操作 */
 226            }
 227            else break;  /* 返回错误状态 */
 228          }
 229          if ( mBlockCount == 0 ) mIntStatus = mWaitInterrupt( );  /* 等待中断并获取状态 */
 230          if ( mIntStatus == USB_INT_SUCCESS ) return 1;  /* 操作成功 */
 231          else return 0;  /* 操作失败 */
 232          }
C51 COMPILER V7.20   CH375PCINTERFACE                                                      11/11/2005 10:20:32 PAGE 5   

 233          
 234          
 235          --------------------------------------------------------------------------------
 236           
 237          --  作者:lxlong
 238          --  发布时间:2004-12-6 12:59:49
 239          
 240          --  
 241          
 242          TPBLK_STRUC idata TPBulk_Block;
 243          #define     TPBulk_CBW  TPBulk_Block.TPBulk_CommandBlock
 244          #define     CBW_wXferLen TPBulk_CBW.dCBW_DataXferLen
 245          #define     RBC_CDB   TPBulk_CBW.cdbRBC
 246          #define     RBC_LUN   TPBulk_CBW.bCBW_LUN
 247          #define     TPBulk_CSW  TPBulk_Block.TPBulk_CommandStatus
 248          
 249          /*unsigned char TPBulk_GetMaxLUN(void)
 250          {
 251          usbstack.setup.bmRequest=0xa1;
 252          usbstack.setup.bRequest=0xfe;
 253          usbstack.setup.wValue=0;
 254          usbstack.setup.wIndex=0;
 255          usbstack.setup.wLength=1;
 256          usbstack.buffer=DBUF;
 257          return ep0Xfer();
 258          
 259          }*/
 260          
 261          /*
 262          unsigned char SPC_READLONG(void)
 263          {
 264          #define cdbReadLong RBC_CDB.SpcCdb_ReadLong 
 265          //nsigned char retStatus=FALSE;
 266          TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 267          TPBulk_CBW.dCBW_Tag=0x60a624de;
 268          TPBulk_CBW.dCBW_DataXferLen=0xfc000000;
 269          TPBulk_CBW.bCBW_Flag=0x80;
 270          TPBulk_CBW.bCBW_LUN=0;
 271          TPBulk_CBW.bCBW_CDBLen=sizeof(READ_LONG_CMD);
 272          
 273          /////////////////////////////////////
 274          cdbReadLong.OperationCode=SPC_CMD_READLONG;
 275          cdbReadLong.LogicalUnitNum=0;
 276          cdbReadLong.AllocationLen=0xfc;
 277          //////////////////////////////////////
 278          if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 279            return FALSE;
 280          
 281          if(!epBulkRcv(DBUF,0xfc))
 282            return FALSE;
 283          
 284          if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 285            return FALSE;
 286            ////////////////////////////
 287            return TRUE;
 288          #undef cdbReadLong
 289          }
 290          */
 291          
 292          /*
 293          unsigned char SPC_RequestSense(void)
 294          {
C51 COMPILER V7.20   CH375PCINTERFACE                                                      11/11/2005 10:20:32 PAGE 6   

 295          #define cdbRequestSenseSPC RBC_CDB.SpcCdb_RequestSense 
 296          //unsigned char retStatus=FALSE;
 297          TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 298          TPBulk_CBW.dCBW_Tag=0x60a624de;
 299          TPBulk_CBW.dCBW_DataXferLen=0x0e000000;
 300          TPBulk_CBW.bCBW_Flag=0x80;
 301          TPBulk_CBW.bCBW_LUN=0;
 302          TPBulk_CBW.bCBW_CDBLen=sizeof(REQUEST_SENSE_SPC);
 303            
 304          /////////////////////////////////////
 305          cdbRequestSenseSPC.OperationCode=SPC_CMD_REQUESTSENSE;
 306          cdbRequestSenseSPC.AllocationLen=0x0e;
 307          //////////////////////////////////////
 308          if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 309            return FALSE;
 310          
 311          if(!epBulkRcv(DBUF,18))
 312            return FALSE;
 313          
 314          if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 315            return FALSE;
 316          /////////////////////////////
 317          return TRUE;
 318          
 319          #undef cdbRequestSenseSPC
 320          }
 321          */
 322          
 323          unsigned char SPC_TestUnit(void)
 324          {
 325          #define cdbTestUnit RBC_CDB.SpcCdb_TestUnit 
 326          //unsigned char retStatus=FALSE;
 327          TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 328          TPBulk_CBW.dCBW_Tag=0x60a624de;
 329          TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 330          TPBulk_CBW.bCBW_Flag=0x00;
 331          TPBulk_CBW.bCBW_LUN=0;
 332          TPBulk_CBW.bCBW_CDBLen=sizeof(TEST_UNIT_SPC);
 333          /////////////////////////////////////
 334          cdbTestUnit.OperationCode=SPC_CMD_TESTUNITREADY;
 335          //////////////////////////////////////
 336          if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 337            return FALSE;
 338          
 339          if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 340            return FALSE;
 341          #undef cdbTestUnit
 342          ////////////////////////////
 343          return TRUE;
 344          }
 345          
 346          unsigned char SPC_LockMedia(void)
 347          {
 348          #define cdbLockSPC RBC_CDB.SpcCdb_Remove 
 349          //unsigned char retStatus=FALSE;
 350          TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
 351          TPBulk_CBW.dCBW_Tag=0x60a624de;
 352          TPBulk_CBW.dCBW_DataXferLen=0x00000000;
 353          TPBulk_CBW.bCBW_Flag=0x00;
 354          TPBulk_CBW.bCBW_LUN=0;
 355          TPBulk_CBW.bCBW_CDBLen=sizeof(MEDIA_REMOVAL_SPC);
 356          ///////////////////////////////////////////
C51 COMPILER V7.20   CH375PCINTERFACE                                                      11/11/2005 10:20:32 PAGE 7   

 357          cdbLockSPC.OperationCode=SPC_CMD_PRVENTALLOWMEDIUMREMOVAL;
 358          cdbLockSPC.Prevent=1;
 359          ///////////////////////////////////////////
 360          if(!epBulkSend((unsigned char *)&TPBulk_CBW,sizeof(TPBulk_CBW)))
 361            return FALSE;
 362            
 363          if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
 364            return FALSE;
 365          #undef cdbLockSPC
 366          /////////////////////////////
 367          return TRUE;
 368          }
 369          
 370           

C51 COMPILATION COMPLETE.  1 WARNING(S),  7 ERROR(S)

⌨️ 快捷键说明

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