📄 usb_disk.lst
字号:
210 2 UEPNUM=0x00; UEPCONX=0x80;
211 2 UEPNUM=0x01; UEPCONX=0x86;
212 2 UEPNUM=0x02; UEPCONX=0x82;
213 2 USBCON|=CONFG;
214 2 WriteEp(0,0,0);
215 2 }
216 1 }
217
218 void Ep0()
219 {
220 1 unsigned char data DT[32]={0,};
221 1 unsigned char data i;
222 1 i = ReadEp(0,DT);
223 1 if (((DT[0] & 0x60)==0) && i)
224 1 {
225 2 switch (DT[1])
226 2 {
227 3 case set_address :Set_Address(DT[2]); break;
228 3 case get_descriptor :Get_Descriptor(DT[3],DT[6]); break;
229 3 case set_configuration :Set_Configuration(DT[2]); break;
230 3 default :; break;
231 3 }
232 2 }
233 1 else if(DT[0]==0xa1)
234 1 {
235 2 WriteEp(0,0,0);
236 2 }
237 1 }
238
239
240 void WriteEpBulk(unsigned char EpNum,unsigned char nLength,unsigned char *Data)
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 5
241 {
242 1 unsigned char data i;
243 1 UEPNUM=EpNum;
244 1 UEPSTAX|=DIR;
245 1 for(i=0;i<nLength;i++) UEPDATX=Data[i];
246 1 UEPSTAX|=TXRDY;
247 1 }
248
249 void TransmitCSW()
250 {
251 1 WriteEpBulk(1, sizeof(bulk_CSW), bulk_CSW);
252 1 while(!(UEPSTAX&TXCMP)) ;
253 1 UEPSTAX&=(~(TXCMP));
254 1 }
255
256 void main_txdone()
257 {
258 1 UEPSTAX&=(~(TXCMP));
259 1 TransmitCSW();
260 1 }
261
262 void SCSI_Mode_Sense()
263 {
264 1 if(bulk_CBW.CBWCB[2] == SCSI_MSPGCD_TPP) //Page Code=Timer and Potect Page
265 1 {WriteEpBulk(1, sizeof(B_Mode_Sense_TPP), B_Mode_Sense_TPP);}
266 1 else if(bulk_CBW.CBWCB[2] == SCSI_MSPGCD_RETALL) //Page Code=All
267 1 {WriteEpBulk(1, sizeof(B_Mode_Sense_ALL), B_Mode_Sense_ALL);}
268 1 else {WriteEpBulk(1, sizeof(B_Mode_Sense_ZERO), B_Mode_Sense_ZERO);}
269 1 }
270
271 void SCSI_Read_Format_Capacities()
272 {
273 1 if(bulk_CBW.CBWCB[7]==0 && bulk_CBW.CBWCB[8]==0)return;
274 1 WriteEpBulk(1, sizeof(B_Read_Format_capacities), B_Read_Format_capacities);
275 1 }
276
277 void SCSI_Read10()
278 {
279 1 unsigned char data i;
280 1 union
281 1 {
282 1 unsigned long Block;
283 1 unsigned char Addr[4];
284 1 }data BLK;
285 1 unsigned char length;
286 1
287 1 BLK.Addr[2] = bulk_CBW.CBWCB[4];
288 1 BLK.Addr[3] = bulk_CBW.CBWCB[5];
289 1
290 1 length = bulk_CBW.CBWCB[8];
291 1 while(length>0)
292 1 {
293 2
294 2 //K9F_FUN = COMMAND;
295 2 K9F_CS = 0;
296 2 K9F_CLE = 1;
297 2 K9F5608 = 0x00;
298 2 //K9F_FUN = ADDRESS;
299 2 K9F_CLE = 0;
300 2 K9F_ALE = 1;
301 2 K9F5608 = 0;
302 2 K9F5608 = BLK.Addr[3];
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 6
303 2 K9F5608 = BLK.Addr[2];
304 2
305 2 //K9F_FUN = D_DATA;
306 2 K9F_ALE = 0;
307 2 UEPNUM=0x01;
308 2 UEPSTAX|=DIR;
309 2 while(!K9F_RB);
310 2
311 2 for(i=0;i<8;i++)
312 2 {
313 3 ReadFlash();
314 3 UEPSTAX|=TXRDY;
315 3 while(!(UEPSTAX&TXCMP));
316 3 UEPSTAX&=(~(TXCMP));
317 3 }
318 2 K9F_CS = 1;;
319 2
320 2 length--;
321 2 BLK.Block ++;
322 2 }
323 1 TransmitCSW();
324 1 }
325
326 void delay()
327 {
328 1 unsigned char data i=20;
329 1 while(i-->0);
330 1 }
331
332 void SCSI_Write10()
333 {
334 1 union
335 1 {
336 1 unsigned long page;
337 1 unsigned char addr[4];
338 1 }data PG;
339 1
340 1 unsigned char data i=0,length=0,nBeginPage=0;
341 1
342 1
343 1 //K9F_FUN = COMMAND;
344 1 K9F_CS = 0;
345 1 K9F_CLE = 1;
346 1 K9F5608 = 0x60;
347 1 //K9F_FUN = ADDRESS;
348 1 K9F_CLE = 0;
349 1 K9F_ALE = 1;
350 1 K9F5608 = BuffBlock;
351 1 K9F5608 = 0xff;
352 1 //K9F_FUN = COMMAND;
353 1 K9F_ALE = 0;
354 1 K9F_CLE = 1;
355 1 K9F5608 = 0xd0;
356 1 //K9F_FUN = D_DATA;
357 1 K9F_CLE = 0;
358 1 delay();
359 1
360 1 while(!K9F_RB);
361 1
362 1 //K9F_FUN = COMMAND;
363 1 K9F_CLE = 1;
364 1 K9F5608 = 0x60;
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 7
365 1 //K9F_FUN = ADDRESS;
366 1 K9F_CLE = 0;
367 1 K9F_ALE = 1;
368 1 K9F5608 = BuffBlock|0x20;
369 1 K9F5608 = 0xff;
370 1 //K9F_FUN = COMMAND;
371 1 K9F_ALE = 0;
372 1 K9F_CLE = 1;
373 1 K9F5608 = 0xd0;
374 1 //K9F_FUN = D_DATA;
375 1 K9F_CLE = 0;
376 1
377 1 PG.addr[2] = bulk_CBW.CBWCB[4];
378 1 PG.addr[3] = bulk_CBW.CBWCB[5];
379 1
380 1 length = bulk_CBW.CBWCB[8];
381 1 nBeginPage = PG.addr[3]&0x1f;
382 1 UEPNUM = 0x02;
383 1 delay();
384 1 while(!K9F_RB);
385 1
386 1 if(nBeginPage>0)
387 1 {
388 2 for(i=0;i<nBeginPage;i++)
389 2 {
390 3 //K9F_FUN = COMMAND;
391 3 K9F_CLE = 1;
392 3 K9F5608 = 0x00;
393 3 //K9F_FUN = ADDRESS;
394 3 K9F_CLE = 0;
395 3 K9F_ALE = 1;
396 3 K9F5608 = 0; //A0-A7
397 3 K9F5608 = (PG.addr[3]&0xe0)|i; //A9-A16
398 3 K9F5608 = PG.addr[2]; //A17-A24
399 3 //K9F_FUN = D_DATA;
400 3 K9F_ALE = 0;
401 3 delay();
402 3 while(!K9F_RB);
403 3
404 3 //K9F_FUN = COMMAND;
405 3 K9F_CLE = 1;
406 3 K9F5608 = 0x8a;
407 3 //K9F_FUN = ADDRESS;
408 3 K9F_CLE = 0;
409 3 K9F_ALE = 1;
410 3 K9F5608 = 0; //A0-A7
411 3 K9F5608 = BuffBlock|(PG.addr[3]&0x20)|i; //A9-A16
412 3 K9F5608 = 0xff; //A17-A24
413 3 //K9F_FUN = D_DATA;
414 3 K9F_ALE = 0;
415 3 delay();
416 3 while(!K9F_RB);
417 3 }
418 2 nBeginPage=0;
419 2 }
420 1
421 1 while(length>0)
422 1 {
423 2 //K9F_FUN = COMMAND;
424 2 K9F_CLE = 1;
425 2 K9F5608 = 0x80;
426 2 //K9F_FUN = ADDRESS;
C51 COMPILER V7.50 USB_DISK 11/18/2005 21:31:23 PAGE 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -