📄 tpbulk.lst
字号:
C51 COMPILER V6.20c TPBULK 04/07/2005 10:50:49 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE TPBULK
OBJECT MODULE PLACED IN TPBULK.OBJ
COMPILER INVOKED BY: D:\Hardware\Keilc620\C51\Bin\C51.EXE TPBULK.C DB OE SMALL ROM(LARGE)
stmt level source
1 #include "common.h"
2 #include "SL811.H"
3 #include "TPBULK.H"
4 #include "HAL.H"
5 #include "HPI.H"
6 //////////////////////////////////
7 extern unsigned char xdata DBUF[BUFFER_LENGTH];
8 extern XXGPKG usbstack;
9 extern SYS_INFO_BLOCK xdata DeviceInfo;
10 extern FILE_INFO xdata ThisFile;
11 extern DIR_INFO xdata ThisDir;
12 extern unsigned char xdata CurFatSector[512];
13 extern XXGFLAGS bXXGFlags;
14 extern unsigned char opLun;
15
16 TPBLK_STRUC idata TPBulk_Block;
17 #define TPBulk_CBW TPBulk_Block.TPBulk_CommandBlock
18 #define CBW_wXferLen TPBulk_CBW.dCBW_DataXferLen
19 #define RBC_CDB TPBulk_CBW.cdbRBC
20 #define RBC_LUN TPBulk_CBW.bCBW_LUN
21 #define TPBulk_CSW TPBulk_Block.TPBulk_CommandStatus
22
23 ///////////////////////////////////////////////////////////////////////////
24 unsigned char EnumMassDev(void)
25 {
26 1
27 1 PMBR_BLOCK pMBR;
28 1 PBPB_BLOCK pBPB;
29 1 PFSINFO_BLOCK pFSInfo;
30 1 unsigned long StartSector;
31 1 unsigned int FATSz16,FSInfo;
32 1 ////////////////////////////////////////////////////
33 1 //if(!SPC_TestUnit())
34 1 // return FALSE;
35 1 if(!SPC_Inquiry())
36 1 return FALSE;
37 1 //if(!SPC_READLONG())
38 1 // return FALSE;
39 1 if(!SPC_TestUnit())
40 1 return FALSE;
41 1 if(!RBC_ReadCapacity())
42 1 return FALSE;
43 1 if(!SPC_RequestSense())
44 1 return FALSE;
45 1 if(!SPC_TestUnit())
46 1 return FALSE;
47 1 if(!SPC_LockMedia())
48 1 return FALSE;
49 1
50 1 if(!RBC_ReadCapacity())
51 1 return FALSE;
52 1 ////////////////////////////////////////////////////
53 1 pMBR=(PMBR_BLOCK)DBUF;
54 1 DeviceInfo.BPB_BytesPerSec=512; //暂假设为512
55 1
C51 COMPILER V6.20c TPBULK 04/07/2005 10:50:49 PAGE 2
56 1 if(!RBC_Read(0x0,1,DBUF))
57 1 return FALSE;
58 1 //////////////////////////////////
59 1 if(DBUF[0]==0xeb||DBUF[0]==0xe9)
60 1 {
61 2 StartSector=0;
62 2 //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
63 2 }
64 1 else
65 1 {
66 2 //////////////////////////////////
67 2 StartSector=SwapINT32(pMBR->StartSector);
68 2 //DeviceInfo.TotalSector=SwapINT32(pMBR->TotalSector);
69 2 }
70 1 ///////////////////////////////////////////////////////
71 1 pBPB=(PBPB_BLOCK)DBUF;
72 1 if(!RBC_Read(StartSector,1,DBUF))
73 1 return FALSE;
74 1 DeviceInfo.BPB_BytesPerSec=SwapINT16(pBPB->BPB_BytesPerSec);
75 1 DeviceInfo.BPB_SecPerClus=pBPB->BPB_SecPerClus;
76 1 DeviceInfo.BPB_RootEntCnt=SwapINT16(pBPB->BPB_RootEntCnt);
77 1
78 1 FATSz16=SwapINT16(pBPB->BPB_FATSz16);
79 1 if(FATSz16>0) // 表明是FAT16系统
80 1 {
81 2 DeviceInfo.FATSz=SwapINT16(pBPB->BPB_FATSz16);
82 2 bXXGFlags.bIsFat32=0;
83 2 DeviceInfo.FatStartSector=StartSector+SwapINT16(pBPB->BPB_RsvdSecCn);
84 2 DeviceInfo.RootStartSector=DeviceInfo.FatStartSector+2*DeviceInfo.FATSz;
85 2 DeviceInfo.FirstDataSector=DeviceInfo.RootStartSector+(DeviceInfo.BPB_RootEntCnt>>4); //DeviceInfo.FirstS
-ectorofCluster=;
86 2 DeviceInfo.FSI_Nxt_Free=2;
87 2 MCU_LED3=0;
88 2 ThisDir.DepthIndex=0;
89 2 ThisDir.bRootDir=1;
90 2
91 2 ThisDir.Link[0]=DeviceInfo.RootStartSector;
92 2
93 2 ThisDir.ParentStartCluster=0;
94 2 ThisDir.StartCluster=0;
95 2 ThisDir.StartSector=DeviceInfo.RootStartSector;
96 2 }
97 1 else //说明是FAT32系统
98 1 {
99 2
100 2 //////////////////////////////////////////////////////
101 2 MCU_LED3=1;
102 2 return FALSE; //本版本不支持FAT32
103 2 }
104 1 ///////////////////////////////////////////////////////
105 1 ThisFile.bFileOpen=0;
106 1 ThisFile.FatSectorPointer=0;
107 1 ///////////////////////////////////////////////////////
108 1 return TRUE;
109 1 }
*** WARNING C280 IN LINE 29 OF TPBULK.C: 'pFSInfo': unreferenced local variable
*** WARNING C280 IN LINE 31 OF TPBULK.C: 'FSInfo': unreferenced local variable
110
111 unsigned char SPC_Inquiry(void)
112 {
113 1 #define cdbInquirySPC RBC_CDB.SpcCdb_Inquiry
114 1
C51 COMPILER V6.20c TPBULK 04/07/2005 10:50:49 PAGE 3
115 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
116 1 TPBulk_CBW.dCBW_Tag=0x60a624de;
117 1 TPBulk_CBW.dCBW_DataXferLen=0x24000000;
118 1 TPBulk_CBW.bCBW_Flag=0x80;
119 1 TPBulk_CBW.bCBW_LUN=opLun;
120 1 TPBulk_CBW.bCBW_CDBLen=sizeof(INQUIRY_SPC);
121 1 /////////////////////////////////
122 1 cdbInquirySPC.OperationCode=SPC_CMD_INQUIRY;
123 1 cdbInquirySPC.Lun5to7=opLun<<5;
124 1 cdbInquirySPC.PageCode=0;
125 1 cdbInquirySPC.Reserved=0;
126 1 cdbInquirySPC.AllocationLen=0x24;
127 1 cdbInquirySPC.Control=0;
128 1 ////////////////////////////////
129 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
130 1 return FALSE;
131 1
132 1 if(!epBulkRcv(DBUF,36))
133 1 return FALSE;
134 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
135 1 return FALSE;
136 1 ////////////////////////////////
137 1 return TRUE;
138 1 #undef cdbInquirySPC
139 1 }
140
141 unsigned char SPC_RequestSense(void)
142 {
143 1 #define cdbRequestSenseSPC RBC_CDB.SpcCdb_RequestSense
144 1 //unsigned char retStatus=FALSE;
145 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
146 1 TPBulk_CBW.dCBW_Tag=0x60a624de;
147 1 TPBulk_CBW.dCBW_DataXferLen=0x0e000000;
148 1 TPBulk_CBW.bCBW_Flag=0x80;
149 1 TPBulk_CBW.bCBW_LUN=opLun;
150 1 TPBulk_CBW.bCBW_CDBLen=sizeof(REQUEST_SENSE_SPC);
151 1
152 1 /////////////////////////////////////
153 1 cdbRequestSenseSPC.OperationCode=SPC_CMD_REQUESTSENSE;
154 1 cdbRequestSenseSPC.Lun5to7=opLun<<5;
155 1 cdbRequestSenseSPC.Reserved[0]=0;
156 1 cdbRequestSenseSPC.Reserved[1]=0;
157 1 cdbRequestSenseSPC.AllocationLen=0x0e;
158 1 //////////////////////////////////////
159 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
160 1 return FALSE;
161 1
162 1 if(!epBulkRcv(DBUF,18))
163 1 return FALSE;
164 1
165 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
166 1 return FALSE;
167 1 /////////////////////////////
168 1 return TRUE;
169 1
170 1 #undef cdbRequestSenseSPC
171 1 }
172 unsigned char SPC_TestUnit(void)
173 {
174 1 #define cdbTestUnit RBC_CDB.SpcCdb_TestUnit
175 1 //unsigned char retStatus=FALSE;
176 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
C51 COMPILER V6.20c TPBULK 04/07/2005 10:50:49 PAGE 4
177 1 TPBulk_CBW.dCBW_Tag=0x60a624de;
178 1 TPBulk_CBW.dCBW_DataXferLen=0x00000000;
179 1 TPBulk_CBW.bCBW_Flag=0x00;
180 1 TPBulk_CBW.bCBW_LUN=opLun;
181 1 TPBulk_CBW.bCBW_CDBLen=sizeof(TEST_UNIT_SPC);
182 1 /////////////////////////////////////
183 1 cdbTestUnit.OperationCode=SPC_CMD_TESTUNITREADY;
184 1 cdbTestUnit.Lun5to7=opLun<<5;
185 1 //////////////////////////////////////
186 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
187 1 return FALSE;
188 1
189 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
190 1 return FALSE;
191 1 #undef cdbTestUnit
192 1 ////////////////////////////
193 1 return TRUE;
194 1 }
195 unsigned char SPC_LockMedia(void)
196 {
197 1 #define cdbLockSPC RBC_CDB.SpcCdb_Remove
198 1 //unsigned char retStatus=FALSE;
199 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
200 1 TPBulk_CBW.dCBW_Tag=0x60a624de;
201 1 TPBulk_CBW.dCBW_DataXferLen=0x00000000;
202 1 TPBulk_CBW.bCBW_Flag=0x00;
203 1 TPBulk_CBW.bCBW_LUN=opLun;
204 1 TPBulk_CBW.bCBW_CDBLen=sizeof(MEDIA_REMOVAL_SPC);
205 1 ///////////////////////////////////////////
206 1 cdbLockSPC.OperationCode=SPC_CMD_PRVENTALLOWMEDIUMREMOVAL;
207 1 cdbLockSPC.Lun5to7=opLun<<5;
208 1 cdbLockSPC.Prevent=1;
209 1 ///////////////////////////////////////////
210 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
211 1 return FALSE;
212 1
213 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
214 1 return FALSE;
215 1 #undef cdbLockSPC
216 1 /////////////////////////////
217 1 return TRUE;
218 1 }
219 unsigned char RBC_ReadCapacity(void)
220 {
221 1 #define cdbReadCap RBC_CDB.RbcCdb_ReadCapacity
222 1 //unsigned char retStatus=FALSE;
223 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
224 1 TPBulk_CBW.dCBW_Tag=0x60a624de;
225 1 TPBulk_CBW.bCBW_LUN=opLun;
226 1 TPBulk_CBW.dCBW_DataXferLen=0x08000000;
227 1 TPBulk_CBW.bCBW_Flag=0x80;
228 1
229 1 TPBulk_CBW.bCBW_CDBLen=sizeof(READ_CAPACITY_RBC);
230 1 /////////////////////////////////////
231 1 cdbReadCap.OperationCode=RBC_CMD_READCAPACITY;
232 1 cdbReadCap.Lun5to7=opLun<<5;
233 1 cdbReadCap.Reserved[0]=0;
234 1 cdbReadCap.Reserved[1]=0;
235 1 cdbReadCap.Reserved[2]=0;
236 1 cdbReadCap.Reserved[3]=0;
237 1 cdbReadCap.PMI=0;
238 1 /////////////////////////////////////
C51 COMPILER V6.20c TPBULK 04/07/2005 10:50:49 PAGE 5
239 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
240 1 return FALSE;
241 1
242 1 if(!epBulkRcv(DBUF,8))
243 1 return FALSE;
244 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
245 1 return FALSE;
246 1 #undef cdbReadCap
247 1 /////////////////////////////
248 1 return TRUE;
249 1 }
250 unsigned char RBC_Read(unsigned long lba,unsigned char len,unsigned char *pBuffer)
251 {
252 1 #define cdbRead RBC_CDB.RbcCdb_Read
253 1 //unsigned char retStatus=FALSE;
254 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
255 1 TPBulk_CBW.dCBW_Tag=0x60a624de;
256 1 TPBulk_CBW.dCBW_DataXferLen=SwapINT32(len*512);
257 1 TPBulk_CBW.bCBW_Flag=0x80;
258 1 TPBulk_CBW.bCBW_LUN=opLun;
259 1 TPBulk_CBW.bCBW_CDBLen=sizeof(READ_RBC);
260 1 /////////////////////////////////////
261 1 cdbRead.OperationCode=RBC_CMD_READ10;
262 1 cdbRead.VendorSpecific=opLun<<5;
263 1 cdbRead.LBA.LBA_W32=lba;
264 1 cdbRead.XferLength=len;
265 1 //////////////////////////////////////
266 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
267 1 return FALSE;
268 1
269 1 if(!epBulkRcv(pBuffer,len*512))
270 1 return FALSE;
271 1 //DelayMs(1);
272 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
273 1 return FALSE;
274 1 #undef cdbRead
275 1 /////////////////////////////
276 1 return TRUE;
277 1 }
278
279 unsigned char RBC_Write(unsigned long lba,unsigned char len,unsigned char *pBuffer)
280 {
281 1 #define cdbWrite RBC_CDB.RbcCdb_Write
282 1 TPBulk_CBW.dCBW_Signature=CBW_SIGNATURE;
283 1 TPBulk_CBW.dCBW_Tag=0xb4D977c1;
284 1 TPBulk_CBW.dCBW_DataXferLen=SwapINT32(len*512);
285 1 TPBulk_CBW.bCBW_Flag=0x0;
286 1 TPBulk_CBW.bCBW_LUN=opLun;
287 1 TPBulk_CBW.bCBW_CDBLen=sizeof(WRITE_RBC);
288 1 /////////////////////////////////////
289 1 cdbWrite.OperationCode=RBC_CMD_WRITE10;
290 1 cdbWrite.VendorSpecific=opLun<<5;
291 1 cdbWrite.LBA.LBA_W32=lba;
292 1 cdbWrite.XferLength=len;
293 1 cdbWrite.Reserved2=0;
294 1 cdbWrite.Control=0;
295 1 //////////////////////////////////////
296 1 if(!epBulkSend((unsigned char *)&TPBulk_CBW,31))
297 1 return FALSE;
298 1 //DelayMs(20);
299 1
300 1 if(!epBulkSend(pBuffer,len*512))
C51 COMPILER V6.20c TPBULK 04/07/2005 10:50:49 PAGE 6
301 1 return FALSE;
302 1 if(!epBulkRcv((unsigned char *)&TPBulk_CSW,13))
303 1 return FALSE;
304 1 #undef cdbWrite
305 1 /////////////////////////////
306 1 return TRUE;
307 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1369 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 31
IDATA SIZE = 27 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -