whycyhl
2022-05-05 94861120b14313f81fc666e612c48c9e8a81f1e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
/* ********************************************************************************************************************* */
#ifndef __CH376INC_H__
#define __CH376INC_H__
/* ********************************************************************************************************************* */
/* ********************************************************************************************************************* */
/* ********************************************************************************************************************* */
/* ********************************************************************************************************************* */
/* ³£ÓÃÀàÐͺͳ£Á¿¶¨Òå */
 
#ifndef        TRUE
#define        TRUE    1
#define        FALSE    0
#endif
#ifndef        NULL
#define        NULL    0
#endif
 
#ifndef UINT8
typedef unsigned char    UINT8;
#endif
#ifndef UINT16
typedef unsigned int    UINT16;
#endif
#ifndef UINT32
typedef unsigned long    UINT32;
#endif
#ifndef PUINT8
typedef unsigned char    *PUINT8;
#endif
#ifndef PINT8
typedef char            *PINT8;
#endif
#ifndef PUINT16
typedef unsigned int    *PUINT16;
#endif
#ifndef PUINT32
typedef unsigned long    *PUINT32;
#endif
#ifndef UINT8V
typedef unsigned char    UINT8V;
#endif
#ifndef PUINT8V
typedef unsigned char    *PUINT8V;
#endif
 
/* ********************************************************************************************************************* */
/* Ó²¼þÌØÐÔ */
 
#define    CH376_DAT_BLOCK_LEN    0x40            /* USBµ¥¸öÊý¾Ý°ü, Êý¾Ý¿éµÄ×î´ó³¤¶È, Ä¬ÈÏ»º³åÇøµÄ³¤¶È */
 
/* ********************************************************************************************************************* */
/* ÃüÁî´úÂë */
/* ²¿·ÖÃüÁî¼æÈÝCH375оƬ, µ«ÊÇÊäÈëÊý¾Ý»òÕßÊä³öÊý¾ÝµÄ¿ÉÄֲܾ¿²»Í¬) */
/* Ò»¸öÃüÁî²Ù×÷˳Ðò°üº¬:
          Ò»¸öÃüÁîÂë(¶ÔÓÚ´®¿Ú·½Ê½,ÃüÁîÂë֮ǰ»¹ÐèÒªÁ½¸öͬ²½Âë),
          Èô¸É¸öÊäÈëÊý¾Ý(¿ÉÒÔÊÇ0¸ö),
          ²úÉúÖжÏ֪ͨ »òÕß Èô¸É¸öÊä³öÊý¾Ý(¿ÉÒÔÊÇ0¸ö), ¶þѡһ, ÓÐÖжÏ֪ͨÔòÒ»¶¨Ã»ÓÐÊä³öÊý¾Ý, ÓÐÊä³öÊý¾ÝÔòÒ»¶¨²»²úÉúÖжÏ
       ½öCMD01_WR_REQ_DATAÃüÁîÀýÍâ, Ë³Ðò°üº¬: Ò»¸öÃüÁîÂë, Ò»¸öÊä³öÊý¾Ý, Èô¸É¸öÊäÈëÊý¾Ý
   ÃüÁîÂëÆðÃû¹æÔò: CMDxy_NAME
       ÆäÖеÄxºÍy¶¼ÊÇÊý×Ö, x˵Ã÷×îÉÙÊäÈëÊý¾Ý¸öÊý(×Ö½ÚÊý), y˵Ã÷×îÉÙÊä³öÊý¾Ý¸öÊý(×Ö½ÚÊý), yÈç¹ûÊÇHÔò˵Ã÷²úÉúÖжÏ֪ͨ,
       ÓÐЩÃüÁîÄܹ»ÊµÏÖ0µ½¶à¸ö×Ö½ÚµÄÊý¾Ý¿é¶Áд, Êý¾Ý¿é±¾ÉíµÄ×Ö½ÚÊýδ°üº¬ÔÚÉÏÊöx»òyÖ®ÄÚ */
/* ±¾ÎļþĬÈÏ»áͬʱÌṩÓëCH375оƬÃüÁîÂë¼æÈݵÄÃüÁîÂë¸ñʽ£¨¼´È¥µôxºÍyÖ®ºó), Èç¹û²»ÐèÒª, ÄÇô¿ÉÒÔ¶¨Òå_NO_CH375_COMPATIBLE_½ûÖ¹ */
 
/* ********************************************************************************************************************* */
/* Ö÷ÒªÃüÁî(ÊÖ²áÒ»), ³£Óà*/
 
#define    CMD01_GET_IC_VER    0x01            /* »ñȡоƬ¼°¹Ì¼þ°æ±¾ */
/* Êä³ö: °æ±¾ºÅ( Î»7Ϊ0, Î»6Ϊ1, Î»5~λ0Ϊ°æ±¾ºÅ ) */
/*           CH376·µ»Ø°æ±¾ºÅµÄֵΪ041H¼´°æ±¾ºÅΪ01H */
 
#define    CMD21_SET_BAUDRATE    0x02            /* ´®¿Ú·½Ê½: ÉèÖô®¿ÚͨѶ²¨ÌØÂÊ(Éϵç»òÕ߸´Î»ºóµÄĬÈϲ¨ÌØÂÊΪ9600bps,ÓÉD4/D5/D6Òý½ÅÑ¡Ôñ) */
/* ÊäÈë: ²¨ÌØÂÊ·ÖÆµÏµÊý, ²¨ÌØÂÊ·ÖÆµ³£Êý */
/* Êä³ö: ²Ù×÷״̬( CMD_RET_SUCCESS»òCMD_RET_ABORT, ÆäËüֵ˵Ã÷²Ù×÷δÍê³É ) */
 
#define    CMD00_ENTER_SLEEP    0x03            /* ½øÈë˯Ãß״̬ */
 
#define    CMD00_RESET_ALL        0x05            /* Ö´ÐÐÓ²¼þ¸´Î» */
 
#define    CMD11_CHECK_EXIST    0x06            /* ²âÊÔͨѶ½Ó¿ÚºÍ¹¤×÷״̬ */
/* ÊäÈë: ÈÎÒâÊý¾Ý */
/* Êä³ö: ÊäÈëÊý¾ÝµÄ°´Î»È¡·´ */
 
#define    CMD20_CHK_SUSPEND    0x0B            /* É豸·½Ê½: ÉèÖüì²éUSB×ÜÏß¹ÒÆð״̬µÄ·½Ê½ */
/* ÊäÈë: Êý¾Ý10H, ¼ì²é·½Ê½ */
/*           00H=²»¼ì²éUSB¹ÒÆð, 04H=ÒÔ50mSΪ¼ä¸ô¼ì²éUSB¹ÒÆð, 05H=ÒÔ10mSΪ¼ä¸ô¼ì²éUSB¹ÒÆð */
 
#define    CMD20_SET_SDO_INT    0x0B            /* SPI½Ó¿Ú·½Ê½: ÉèÖÃSPIµÄSDOÒý½ÅµÄÖжϷ½Ê½ */
/* ÊäÈë: Êý¾Ý16H, ÖжϷ½Ê½ */
/*           10H=½ûÖ¹SDOÒý½ÅÓÃÓÚÖжÏÊä³ö,ÔÚSCSƬѡÎÞЧʱÈý̬Êä³ö½ûÖ¹, 90H=SDOÒý½ÅÔÚSCSƬѡÎÞЧʱ¼æ×öÖжÏÇëÇóÊä³ö */
 
#define    CMD14_GET_FILE_SIZE    0x0C            /* Ö÷»úÎļþģʽ: »ñÈ¡µ±Ç°Îļþ³¤¶È */
/* ÊäÈë: Êý¾Ý68H */
/* Êä³ö: µ±Ç°Îļþ³¤¶È(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
 
#define    CMD50_SET_FILE_SIZE    0x0D            /* Ö÷»úÎļþģʽ: ÉèÖõ±Ç°Îļþ³¤¶È */
/* ÊäÈë: Êý¾Ý68H, µ±Ç°Îļþ³¤¶È(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
 
#define    CMD11_SET_USB_MODE    0x15            /* ÉèÖÃUSB¹¤×÷ģʽ */
/* ÊäÈë: Ä£Ê½´úÂë */
/*       00H=δÆôÓõÄÉ豸·½Ê½, 01H=ÒÑÆôÓõÄÉ豸·½Ê½²¢ÇÒʹÓÃÍⲿ¹Ì¼þģʽ(´®¿Ú²»Ö§³Ö), 02H=ÒÑÆôÓõÄÉ豸·½Ê½²¢ÇÒʹÓÃÄÚÖù̼þģʽ */
/*       03H=SD¿¨Ö÷»úģʽ/δÆôÓõÄÖ÷»úģʽ,ÓÃÓÚ¹ÜÀíºÍ´æÈ¡SD¿¨ÖеÄÎļþ */
/*       04H=δÆôÓõÄÖ÷»ú·½Ê½, 05H=ÒÑÆôÓõÄÖ÷»ú·½Ê½, 06H=ÒÑÆôÓõÄÖ÷»ú·½Ê½²¢ÇÒ×Ô¶¯²úÉúSOF°ü, 07H=ÒÑÆôÓõÄÖ÷»ú·½Ê½²¢ÇÒ¸´Î»USB×ÜÏß */
/* Êä³ö: ²Ù×÷״̬( CMD_RET_SUCCESS»òCMD_RET_ABORT, ÆäËüֵ˵Ã÷²Ù×÷δÍê³É ) */
 
#define    CMD01_GET_STATUS    0x22            /* »ñÈ¡ÖжÏ״̬²¢È¡ÏûÖжÏÇëÇó */
/* Êä³ö: ÖжÏ״̬ */
 
#define    CMD00_UNLOCK_USB    0x23            /* É豸·½Ê½: Êͷŵ±Ç°USB»º³åÇø */
 
#define    CMD01_RD_USB_DATA0    0x27            /* ´Óµ±Ç°USBÖжϵĶ˵㻺³åÇø»òÕßÖ÷»ú¶ËµãµÄ½ÓÊÕ»º³åÇø¶ÁÈ¡Êý¾Ý¿é */
/* Êä³ö: ³¤¶È, Êý¾ÝÁ÷ */
 
#define    CMD01_RD_USB_DATA    0x28            /* É豸·½Ê½: ´Óµ±Ç°USBÖжϵĶ˵㻺³åÇø¶ÁÈ¡Êý¾Ý¿é, ²¢ÊÍ·Å»º³åÇø, Ï൱ÓÚ CMD01_RD_USB_DATA0 + CMD00_UNLOCK_USB */
/* Êä³ö: ³¤¶È, Êý¾ÝÁ÷ */
 
#define    CMD10_WR_USB_DATA7    0x2B            /* É豸·½Ê½: ÏòUSB¶Ëµã2µÄ·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý¿é */
/* ÊäÈë: ³¤¶È, Êý¾ÝÁ÷ */
 
#define    CMD10_WR_HOST_DATA    0x2C            /* ÏòUSBÖ÷»ú¶ËµãµÄ·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý¿é */
/* ÊäÈë: ³¤¶È, Êý¾ÝÁ÷ */
 
#define    CMD01_WR_REQ_DATA    0x2D            /* ÏòÄÚ²¿Ö¸¶¨»º³åÇøÐ´ÈëÇëÇóµÄÊý¾Ý¿é */
/* Êä³ö: ³¤¶È */
/* ÊäÈë: Êý¾ÝÁ÷ */
 
#define    CMD20_WR_OFS_DATA    0x2E            /* ÏòÄÚ²¿»º³åÇøÖ¸¶¨Æ«ÒƵØÖ·Ð´ÈëÊý¾Ý¿é */
/* ÊäÈë: Æ«ÒÆ, ³¤¶È, Êý¾ÝÁ÷ */
 
#define    CMD10_SET_FILE_NAME    0x2F            /* Ö÷»úÎļþģʽ: ÉèÖý«Òª²Ù×÷µÄÎļþµÄÎļþÃû */
/* ÊäÈë: ÒÔ0½áÊøµÄ×Ö·û´®(º¬½áÊø·û0ÔÚÄÚ³¤¶È²»³¬¹ý14¸ö×Ö·û) */
 
/* ********************************************************************************************************************* */
/* Ö÷ÒªÃüÁî(ÊÖ²áÒ»), ³£ÓÃ, ÒÔÏÂÃüÁî×ÜÊÇÔÚ²Ù×÷½áÊøÊ±²úÉúÖжÏ֪ͨ, ²¢ÇÒ×ÜÊÇûÓÐÊä³öÊý¾Ý */
 
#define    CMD0H_DISK_CONNECT    0x30            /* Ö÷»úÎļþģʽ/²»Ö§³ÖSD¿¨: ¼ì²é´ÅÅÌÊÇ·ñÁ¬½Ó */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_MOUNT    0x31            /* Ö÷»úÎļþģʽ: ³õʼ»¯´ÅÅ̲¢²âÊÔ´ÅÅÌÊÇ·ñ¾ÍÐ÷ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_FILE_OPEN        0x32            /* Ö÷»úÎļþģʽ: ´ò¿ªÎļþ»òÕßĿ¼(Îļþ¼Ð),»òÕßö¾ÙÎļþºÍĿ¼(Îļþ¼Ð) */
/* Êä³öÖжϠ*/
 
#define    CMD0H_FILE_ENUM_GO    0x33            /* Ö÷»úÎļþģʽ: ¼ÌÐøÃ¶¾ÙÎļþºÍĿ¼(Îļþ¼Ð) */
/* Êä³öÖжϠ*/
 
#define    CMD0H_FILE_CREATE    0x34            /* Ö÷»úÎļþģʽ: Ð½¨Îļþ,Èç¹ûÎļþÒѾ­´æÔÚÄÇôÏÈɾ³ý */
/* Êä³öÖжϠ*/
 
#define    CMD0H_FILE_ERASE    0x35            /* Ö÷»úÎļþģʽ: É¾³ýÎļþ,Èç¹ûÒѾ­´ò¿ªÔòÖ±½Óɾ³ý,·ñÔò¶ÔÓÚÎļþ»áÏÈ´ò¿ªÔÙɾ³ý,×ÓĿ¼±ØÐëÏÈ´ò¿ª */
/* Êä³öÖжϠ*/
 
#define    CMD1H_FILE_CLOSE    0x36            /* Ö÷»úÎļþģʽ: ¹Ø±Õµ±Ç°ÒѾ­´ò¿ªµÄÎļþ»òÕßĿ¼(Îļþ¼Ð) */
/* ÊäÈë: ÊÇ·ñÔÊÐí¸üÐÂÎļþ³¤¶È */
/*          00H=½ûÖ¹¸ü㤶È, 01H=ÔÊÐí¸üг¤¶È */
/* Êä³öÖжϠ*/
 
#define    CMD1H_DIR_INFO_READ    0x37            /* Ö÷»úÎļþģʽ: ¶ÁÈ¡ÎļþµÄĿ¼ÐÅÏ¢ */
/* ÊäÈë: Ö¸¶¨ÐèÒª¶ÁÈ¡µÄĿ¼ÐÅÏ¢½á¹¹ÔÚÉÈÇøÄÚµÄË÷ÒýºÅ */
/*           Ë÷ÒýºÅ·¶Î§Îª00H~0FH, Ë÷ÒýºÅ0FFHÔòΪµ±Ç°ÒѾ­´ò¿ªµÄÎļþ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DIR_INFO_SAVE    0x38            /* Ö÷»úÎļþģʽ: ±£´æÎļþµÄĿ¼ÐÅÏ¢ */
/* Êä³öÖжϠ*/
 
#define    CMD4H_BYTE_LOCATE    0x39            /* Ö÷»úÎļþģʽ: ÒÔ×Ö½ÚΪµ¥Î»Òƶ¯µ±Ç°ÎļþÖ¸Õë */
/* ÊäÈë: Æ«ÒÆ×Ö½ÚÊý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
/* Êä³öÖжϠ*/
 
#define    CMD2H_BYTE_READ        0x3A            /* Ö÷»úÎļþģʽ: ÒÔ×Ö½ÚΪµ¥Î»´Óµ±Ç°Î»ÖöÁÈ¡Êý¾Ý¿é */
/* ÊäÈë: ÇëÇó¶ÁÈ¡µÄ×Ö½ÚÊý(×ܳ¤¶È16λ,µÍ×Ö½ÚÔÚǰ) */
/* Êä³öÖжϠ*/
 
#define    CMD0H_BYTE_RD_GO    0x3B            /* Ö÷»úÎļþģʽ: ¼ÌÐø×Ö½Ú¶Á */
/* Êä³öÖжϠ*/
 
#define    CMD2H_BYTE_WRITE    0x3C            /* Ö÷»úÎļþģʽ: ÒÔ×Ö½ÚΪµ¥Î»Ïòµ±Ç°Î»ÖÃдÈëÊý¾Ý¿é */
/* ÊäÈë: ÇëÇóдÈëµÄ×Ö½ÚÊý(×ܳ¤¶È16λ,µÍ×Ö½ÚÔÚǰ) */
/* Êä³öÖжϠ*/
 
#define    CMD0H_BYTE_WR_GO    0x3D            /* Ö÷»úÎļþģʽ: ¼ÌÐø×Ö½Úд */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_CAPACITY    0x3E            /* Ö÷»úÎļþģʽ: ²éѯ´ÅÅÌÎïÀíÈÝÁ¿ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_QUERY    0x3F            /* Ö÷»úÎļþģʽ: ²éѯ´ÅÅ̿ռäÐÅÏ¢ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DIR_CREATE    0x40            /* Ö÷»úÎļþģʽ: Ð½¨Ä¿Â¼(Îļþ¼Ð)²¢´ò¿ª,Èç¹ûĿ¼ÒѾ­´æÔÚÄÇôֱ½Ó´ò¿ª */
/* Êä³öÖжϠ*/
 
#define    CMD4H_SEC_LOCATE    0x4A            /* Ö÷»úÎļþģʽ: ÒÔÉÈÇøÎªµ¥Î»Òƶ¯µ±Ç°ÎļþÖ¸Õë */
/* ÊäÈë: Æ«ÒÆÉÈÇøÊý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
/* Êä³öÖжϠ*/
 
#define    CMD1H_SEC_READ        0x4B            /* Ö÷»úÎļþģʽ/²»Ö§³ÖSD¿¨: ÒÔÉÈÇøÎªµ¥Î»´Óµ±Ç°Î»ÖöÁÈ¡Êý¾Ý¿é */
/* ÊäÈë: ÇëÇó¶ÁÈ¡µÄÉÈÇøÊý */
/* Êä³öÖжϠ*/
 
#define    CMD1H_SEC_WRITE        0x4C            /* Ö÷»úÎļþģʽ/²»Ö§³ÖSD¿¨: ÒÔÉÈÇøÎªµ¥Î»ÔÚµ±Ç°Î»ÖÃдÈëÊý¾Ý¿é */
/* ÊäÈë: ÇëÇóдÈëµÄÉÈÇøÊý */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_BOC_CMD    0x50            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¶ÔUSB´æ´¢Æ÷Ö´ÐÐBulkOnly´«ÊäЭÒéµÄÃüÁî */
/* Êä³öÖжϠ*/
 
#define    CMD5H_DISK_READ        0x54            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ´ÓUSB´æ´¢Æ÷¶ÁÎïÀíÉÈÇø */
/* ÊäÈë: LBAÎïÀíÉÈÇøµØÖ·(×ܳ¤¶È32λ, µÍ×Ö½ÚÔÚǰ), ÉÈÇøÊý(01H~FFH) */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_RD_GO    0x55            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¼ÌÐøÖ´ÐÐUSB´æ´¢Æ÷µÄÎïÀíÉÈÇø¶Á²Ù×÷ */
/* Êä³öÖжϠ*/
 
#define    CMD5H_DISK_WRITE    0x56            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ÏòUSB´æ´¢Æ÷дÎïÀíÉÈÇø */
/* ÊäÈë: LBAÎïÀíÉÈÇøµØÖ·(×ܳ¤¶È32λ, µÍ×Ö½ÚÔÚǰ), ÉÈÇøÊý(01H~FFH) */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_WR_GO    0x57            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¼ÌÐøÖ´ÐÐUSB´æ´¢Æ÷µÄÎïÀíÉÈÇøÐ´²Ù×÷ */
/* Êä³öÖжϠ*/
 
/* ********************************************************************************************************************* */
/* ¸¨ÖúÃüÁî(ÊÖ²á¶þ), ²»Ì«³£ÓûòÕßÊÇΪÁËÓëCH375ºÍCH372¼æÈÝ */
 
#define    CMD10_SET_USB_SPEED    0x04            /* ÉèÖÃUSB×ÜÏßËÙ¶È, ÔÚÿ´ÎCMD11_SET_USB_MODEÉèÖÃUSB¹¤×÷ģʽʱ»á×Ô¶¯»Ö¸´µ½12MbpsÈ«ËÙ */
/* ÊäÈë: ×ÜÏßËÙ¶È´úÂë */
/*           00H=12MbpsÈ«ËÙFullSpeed£¨Ä¬ÈÏÖµ£©, 01H=1.5Mbps£¨½öÐÞ¸ÄÆµÂÊ£©, 02H=1.5MbpsµÍËÙLowSpeed */
 
#define    CMD11_GET_DEV_RATE    0x0A            /* Ö÷»ú·½Ê½: »ñÈ¡µ±Ç°Á¬½ÓµÄUSBÉ豸µÄÊý¾ÝËÙÂÊÀàÐÍ */
/* ÊäÈë: Êý¾Ý07H */
/* Êä³ö: Êý¾ÝËÙÂÊÀàÐÍ */
/*           Î»4Ϊ1ÔòÊÇ1.5MbpsµÍËÙUSBÉ豸, ·ñÔòÊÇ12MbpsÈ«ËÙUSBÉ豸 */
 
#define    CMD11_GET_TOGGLE    0x0A            /* »ñÈ¡OUTÊÂÎñµÄͬ²½×´Ì¬ */
/* ÊäÈë: Êý¾Ý1AH */
/* Êä³ö: Í¬²½×´Ì¬ */
/*           Î»4Ϊ1ÔòOUTÊÂÎñͬ²½, ·ñÔòOUTÊÂÎñ²»Í¬²½ */
 
#define    CMD11_READ_VAR8        0x0A            /* ¶Áȡָ¶¨µÄ8λÎļþϵͳ±äÁ¿ */
/* ÊäÈë: ±äÁ¿µØÖ· */
/* Êä³ö: Êý¾Ý */
 
/*#define    CMD11_GET_MAX_LUN    = CMD11_READ_VAR8( VAR_UDISK_LUN )*/    /* Ö÷»ú·½Ê½: »ñÈ¡USB´æ´¢Æ÷×î´óºÍµ±Ç°Âß¼­µ¥ÔªºÅ */
 
#define    CMD20_SET_RETRY        0x0B            /* Ö÷»ú·½Ê½: ÉèÖÃUSBÊÂÎñ²Ù×÷µÄÖØÊÔ´ÎÊý */
/* ÊäÈë: Êý¾Ý25H, ÖØÊÔ´ÎÊý */
/*           Î»7Ϊ0ÔòÊÕµ½NAKʱ²»ÖØÊÔ, Î»7Ϊ1λ6Ϊ0ÔòÊÕµ½NAKʱÎÞÏÞÖØÊÔ, Î»7Ϊ1λ6Ϊ1ÔòÊÕµ½NAKʱ×î¶àÖØÊÔ3Ãë, Î»5~λ0Ϊ³¬Ê±ºóµÄÖØÊÔ´ÎÊý */
 
#define    CMD20_WRITE_VAR8    0x0B            /* ÉèÖÃÖ¸¶¨µÄ8λÎļþϵͳ±äÁ¿ */
/* ÊäÈë: ±äÁ¿µØÖ·, Êý¾Ý */
 
/*#define    CMD20_SET_DISK_LUN    = CMD20_WRITE_VAR8( VAR_UDISK_LUN )*/    /* Ö÷»ú·½Ê½: ÉèÖÃUSB´æ´¢Æ÷µÄµ±Ç°Âß¼­µ¥ÔªºÅ */
 
#define    CMD14_READ_VAR32    0x0C            /* ¶Áȡָ¶¨µÄ32λÎļþϵͳ±äÁ¿ */
/* ÊäÈë: ±äÁ¿µØÖ· */
/* Êä³ö: Êý¾Ý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
 
#define    CMD50_WRITE_VAR32    0x0D            /* ÉèÖÃÖ¸¶¨µÄ32λÎļþϵͳ±äÁ¿ */
/* ÊäÈë: ±äÁ¿µØÖ·, Êý¾Ý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
 
#define    CMD01_DELAY_100US    0x0F            /* ÑÓʱ100uS(´®¿Ú²»Ö§³Ö) */
/* Êä³ö: ÑÓʱÆÚ¼äÊä³ö0,ÑÓʱ½áÊøÊä³ö·Ç0 */
 
#define    CMD40_SET_USB_ID    0x12            /* É豸·½Ê½: ÉèÖÃUSB³§ÉÌVIDºÍ²úÆ·PID */
/* ÊäÈë: ³§ÉÌIDµÍ×Ö½Ú, ³§ÉÌID¸ß×Ö½Ú, ²úÆ·IDµÍ×Ö½Ú, ²úÆ·ID¸ß×Ö½Ú */
 
#define    CMD10_SET_USB_ADDR    0x13            /* ÉèÖÃUSBµØÖ· */
/* ÊäÈë: µØÖ·Öµ */
 
#define    CMD01_TEST_CONNECT    0x16            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¼ì²éUSBÉ豸Á¬½Ó״̬ */
/* Êä³ö: ×´Ì¬( USB_INT_CONNECT»òUSB_INT_DISCONNECT»òUSB_INT_USB_READY, ÆäËüֵ˵Ã÷²Ù×÷δÍê³É ) */
 
#define    CMD00_ABORT_NAK        0x17            /* Ö÷»ú·½Ê½: ·ÅÆúµ±Ç°NAKµÄÖØÊÔ */
 
#define    CMD10_SET_ENDP2        0x18            /* É豸·½Ê½(´®¿Ú²»Ö§³Ö): ÉèÖÃUSB¶Ëµã0µÄ½ÓÊÕÆ÷ */
/* ÊäÈë: ¹¤×÷·½Ê½ */
/*           Î»7Ϊ1Ôòλ6Ϊͬ²½´¥·¢Î», ·ñÔòͬ²½´¥·¢Î»²»±ä */
/*           Î»3~λ0ΪÊÂÎñÏìÓ¦·½Ê½:  0000-¾ÍÐ÷ACK, 1110-ÕýæNAK, 1111-´íÎóSTALL */
 
#define    CMD10_SET_ENDP3        0x19            /* É豸·½Ê½(´®¿Ú²»Ö§³Ö): ÉèÖÃUSB¶Ëµã0µÄ·¢ËÍÆ÷ */
/* ÊäÈë: ¹¤×÷·½Ê½ */
/*           Î»7Ϊ1Ôòλ6Ϊͬ²½´¥·¢Î», ·ñÔòͬ²½´¥·¢Î»²»±ä */
/*           Î»3~λ0ΪÊÂÎñÏìÓ¦·½Ê½:  0000~1000-¾ÍÐ÷ACK, 1110-ÕýæNAK, 1111-´íÎóSTALL */
 
#define    CMD10_SET_ENDP4        0x1A            /* É豸·½Ê½(´®¿Ú²»Ö§³Ö): ÉèÖÃUSB¶Ëµã1µÄ½ÓÊÕÆ÷ */
/* ÊäÈë: ¹¤×÷·½Ê½ */
/*           Î»7Ϊ1Ôòλ6Ϊͬ²½´¥·¢Î», ·ñÔòͬ²½´¥·¢Î»²»±ä */
/*           Î»3~λ0ΪÊÂÎñÏìÓ¦·½Ê½:  0000-¾ÍÐ÷ACK, 1110-ÕýæNAK, 1111-´íÎóSTALL */
 
#define    CMD10_SET_ENDP5        0x1B            /* É豸·½Ê½(´®¿Ú²»Ö§³Ö): ÉèÖÃUSB¶Ëµã1µÄ·¢ËÍÆ÷ */
/* ÊäÈë: ¹¤×÷·½Ê½ */
/*           Î»7Ϊ1Ôòλ6Ϊͬ²½´¥·¢Î», ·ñÔòͬ²½´¥·¢Î»²»±ä */
/*           Î»3~λ0ΪÊÂÎñÏìÓ¦·½Ê½:  0000~1000-¾ÍÐ÷ACK, 1110-ÕýæNAK, 1111-´íÎóSTALL */
 
#define    CMD10_SET_ENDP6        0x1C            /* ÉèÖÃUSB¶Ëµã2/Ö÷»ú¶ËµãµÄ½ÓÊÕÆ÷ */
/* ÊäÈë: ¹¤×÷·½Ê½ */
/*           Î»7Ϊ1Ôòλ6Ϊͬ²½´¥·¢Î», ·ñÔòͬ²½´¥·¢Î»²»±ä */
/*           Î»3~λ0ΪÊÂÎñÏìÓ¦·½Ê½:  0000-¾ÍÐ÷ACK, 1101-¾ÍÐ÷µ«²»·µ»ØACK, 1110-ÕýæNAK, 1111-´íÎóSTALL */
 
#define    CMD10_SET_ENDP7        0x1D            /* ÉèÖÃUSB¶Ëµã2/Ö÷»ú¶ËµãµÄ·¢ËÍÆ÷ */
/* ÊäÈë: ¹¤×÷·½Ê½ */
/*           Î»7Ϊ1Ôòλ6Ϊͬ²½´¥·¢Î», ·ñÔòͬ²½´¥·¢Î»²»±ä */
/*           Î»3~λ0ΪÊÂÎñÏìÓ¦·½Ê½:  0000-¾ÍÐ÷ACK, 1101-¾ÍÐ÷µ«ÎÞÐëÓ¦´ð, 1110-ÕýæNAK, 1111-´íÎóSTALL */
 
#define    CMD00_DIRTY_BUFFER    0x25            /* Ö÷»úÎļþģʽ: Çå³ýÄÚ²¿µÄ´ÅÅ̺ÍÎļþ»º³åÇø */
 
#define    CMD10_WR_USB_DATA3    0x29            /* É豸·½Ê½(´®¿Ú²»Ö§³Ö): ÏòUSB¶Ëµã0µÄ·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý¿é */
/* ÊäÈë: ³¤¶È, Êý¾ÝÁ÷ */
 
#define    CMD10_WR_USB_DATA5    0x2A            /* É豸·½Ê½(´®¿Ú²»Ö§³Ö): ÏòUSB¶Ëµã1µÄ·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý¿é */
/* ÊäÈë: ³¤¶È, Êý¾ÝÁ÷ */
 
/* ********************************************************************************************************************* */
/* ¸¨ÖúÃüÁî(ÊÖ²á¶þ), ²»Ì«³£ÓûòÕßÊÇΪÁËÓëCH375ºÍCH372¼æÈÝ, ÒÔÏÂÃüÁî×ÜÊÇÔÚ²Ù×÷½áÊøÊ±²úÉúÖжÏ֪ͨ, ²¢ÇÒ×ÜÊÇûÓÐÊä³öÊý¾Ý */
 
#define    CMD1H_CLR_STALL        0x41            /* Ö÷»ú·½Ê½: ¿ØÖÆ´«Êä-Çå³ý¶Ëµã´íÎó */
/* ÊäÈë: ¶ËµãºÅ */
/* Êä³öÖжϠ*/
 
#define    CMD1H_SET_ADDRESS    0x45            /* Ö÷»ú·½Ê½: ¿ØÖÆ´«Êä-ÉèÖÃUSBµØÖ· */
/* ÊäÈë: µØÖ·Öµ */
/* Êä³öÖжϠ*/
 
#define    CMD1H_GET_DESCR        0x46            /* Ö÷»ú·½Ê½: ¿ØÖÆ´«Êä-»ñÈ¡ÃèÊö·û */
/* ÊäÈë: ÃèÊö·ûÀàÐÍ */
/* Êä³öÖжϠ*/
 
#define    CMD1H_SET_CONFIG    0x49            /* Ö÷»ú·½Ê½: ¿ØÖÆ´«Êä-ÉèÖÃUSBÅäÖà*/
/* ÊäÈë: ÅäÖÃÖµ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_AUTO_SETUP    0x4D            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ×Ô¶¯ÅäÖÃUSBÉ豸 */
/* Êä³öÖжϠ*/
 
#define    CMD2H_ISSUE_TKN_X    0x4E            /* Ö÷»ú·½Ê½: ·¢³öͬ²½ÁîÅÆ, Ö´ÐÐÊÂÎñ, ¸ÃÃüÁî¿É´úÌæ CMD10_SET_ENDP6/CMD10_SET_ENDP7 + CMD1H_ISSUE_TOKEN */
/* ÊäÈë: Í¬²½±êÖ¾, ÊÂÎñÊôÐÔ */
/*           Í¬²½±êÖ¾µÄλ7ΪÖ÷»ú¶ËµãINµÄͬ²½´¥·¢Î», Î»6ΪÖ÷»ú¶ËµãOUTµÄͬ²½´¥·¢Î», Î»5~λ0±ØÐëΪ0 */
/*           ÊÂÎñÊôÐԵĵÍ4λÊÇÁîÅÆ, ¸ß4λÊǶ˵ãºÅ */
/* Êä³öÖжϠ*/
 
#define    CMD1H_ISSUE_TOKEN    0x4F            /* Ö÷»ú·½Ê½: ·¢³öÁîÅÆ, Ö´ÐÐÊÂÎñ, ½¨ÒéÓÃCMD2H_ISSUE_TKN_XÃüÁî */
/* ÊäÈë: ÊÂÎñÊôÐÔ */
/*           µÍ4λÊÇÁîÅÆ, ¸ß4λÊǶ˵ãºÅ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_INIT        0x51            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ³õʼ»¯USB´æ´¢Æ÷ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_RESET    0x52            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¿ØÖÆ´«Êä-¸´Î»USB´æ´¢Æ÷ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_SIZE        0x53            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: »ñÈ¡USB´æ´¢Æ÷µÄÈÝÁ¿ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_INQUIRY    0x58            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ²éѯUSB´æ´¢Æ÷ÌØÐÔ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_READY    0x59            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¼ì²éUSB´æ´¢Æ÷¾ÍÐ÷ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_R_SENSE    0x5A            /* Ö÷»ú·½Ê½/²»Ö§³ÖSD¿¨: ¼ì²éUSB´æ´¢Æ÷´íÎó */
/* Êä³öÖжϠ*/
 
#define    CMD0H_RD_DISK_SEC    0x5B            /* Ö÷»úÎļþģʽ: ´Ó´ÅÅ̶Áȡһ¸öÉÈÇøµÄÊý¾Ýµ½ÄÚ²¿»º³åÇø */
/* Êä³öÖжϠ*/
 
#define    CMD0H_WR_DISK_SEC    0x5C            /* Ö÷»úÎļþģʽ: ½«ÄÚ²¿»º³åÇøµÄÒ»¸öÉÈÇøµÄÊý¾ÝдÈë´ÅÅÌ */
/* Êä³öÖжϠ*/
 
#define    CMD0H_DISK_MAX_LUN    0x5D            /* Ö÷»ú·½Ê½: ¿ØÖÆ´«Êä-»ñÈ¡USB´æ´¢Æ÷×î´óÂß¼­µ¥ÔªºÅ */
/* Êä³öÖжϠ*/
 
/* ********************************************************************************************************************* */
/* ÒÔ϶¨ÒåÖ»ÊÇΪÁ˼æÈÝCH375µÄINCLUDEÎļþÖеÄÃüÁîÃû³Æ¸ñʽ */
 
#ifndef    _NO_CH375_COMPATIBLE_
#define    CMD_GET_IC_VER        CMD01_GET_IC_VER
#define    CMD_SET_BAUDRATE    CMD21_SET_BAUDRATE
#define    CMD_ENTER_SLEEP        CMD00_ENTER_SLEEP
#define    CMD_RESET_ALL        CMD00_RESET_ALL
#define    CMD_CHECK_EXIST        CMD11_CHECK_EXIST
#define    CMD_CHK_SUSPEND        CMD20_CHK_SUSPEND
#define    CMD_SET_SDO_INT        CMD20_SET_SDO_INT
#define    CMD_GET_FILE_SIZE    CMD14_GET_FILE_SIZE
#define    CMD_SET_FILE_SIZE    CMD50_SET_FILE_SIZE
#define    CMD_SET_USB_MODE    CMD11_SET_USB_MODE
#define    CMD_GET_STATUS        CMD01_GET_STATUS
#define    CMD_UNLOCK_USB        CMD00_UNLOCK_USB
#define    CMD_RD_USB_DATA0    CMD01_RD_USB_DATA0
#define    CMD_RD_USB_DATA        CMD01_RD_USB_DATA
#define    CMD_WR_USB_DATA7    CMD10_WR_USB_DATA7
#define    CMD_WR_HOST_DATA    CMD10_WR_HOST_DATA
#define    CMD_WR_REQ_DATA        CMD01_WR_REQ_DATA
#define    CMD_WR_OFS_DATA        CMD20_WR_OFS_DATA
#define    CMD_SET_FILE_NAME    CMD10_SET_FILE_NAME
#define    CMD_DISK_CONNECT    CMD0H_DISK_CONNECT
#define    CMD_DISK_MOUNT        CMD0H_DISK_MOUNT
#define    CMD_FILE_OPEN        CMD0H_FILE_OPEN
#define    CMD_FILE_ENUM_GO    CMD0H_FILE_ENUM_GO
#define    CMD_FILE_CREATE        CMD0H_FILE_CREATE
#define    CMD_FILE_ERASE        CMD0H_FILE_ERASE
#define    CMD_FILE_CLOSE        CMD1H_FILE_CLOSE
#define    CMD_DIR_INFO_READ    CMD1H_DIR_INFO_READ
#define    CMD_DIR_INFO_SAVE    CMD0H_DIR_INFO_SAVE
#define    CMD_BYTE_LOCATE        CMD4H_BYTE_LOCATE
#define    CMD_BYTE_READ        CMD2H_BYTE_READ
#define    CMD_BYTE_RD_GO        CMD0H_BYTE_RD_GO
#define    CMD_BYTE_WRITE        CMD2H_BYTE_WRITE
#define    CMD_BYTE_WR_GO        CMD0H_BYTE_WR_GO
#define    CMD_DISK_CAPACITY    CMD0H_DISK_CAPACITY
#define    CMD_DISK_QUERY        CMD0H_DISK_QUERY
#define    CMD_DIR_CREATE        CMD0H_DIR_CREATE
#define    CMD_SEC_LOCATE        CMD4H_SEC_LOCATE
#define    CMD_SEC_READ        CMD1H_SEC_READ
#define    CMD_SEC_WRITE        CMD1H_SEC_WRITE
#define    CMD_DISK_BOC_CMD    CMD0H_DISK_BOC_CMD
#define    CMD_DISK_READ        CMD5H_DISK_READ
#define    CMD_DISK_RD_GO        CMD0H_DISK_RD_GO
#define    CMD_DISK_WRITE        CMD5H_DISK_WRITE
#define    CMD_DISK_WR_GO        CMD0H_DISK_WR_GO
#define    CMD_SET_USB_SPEED    CMD10_SET_USB_SPEED
#define    CMD_GET_DEV_RATE    CMD11_GET_DEV_RATE
#define    CMD_GET_TOGGLE        CMD11_GET_TOGGLE
#define    CMD_READ_VAR8        CMD11_READ_VAR8
#define    CMD_SET_RETRY        CMD20_SET_RETRY
#define    CMD_WRITE_VAR8        CMD20_WRITE_VAR8
#define    CMD_READ_VAR32        CMD14_READ_VAR32
#define    CMD_WRITE_VAR32        CMD50_WRITE_VAR32
#define    CMD_DELAY_100US        CMD01_DELAY_100US
#define    CMD_SET_USB_ID        CMD40_SET_USB_ID
#define    CMD_SET_USB_ADDR    CMD10_SET_USB_ADDR
#define    CMD_TEST_CONNECT    CMD01_TEST_CONNECT
#define    CMD_ABORT_NAK        CMD00_ABORT_NAK
#define    CMD_SET_ENDP2        CMD10_SET_ENDP2
#define    CMD_SET_ENDP3        CMD10_SET_ENDP3
#define    CMD_SET_ENDP4        CMD10_SET_ENDP4
#define    CMD_SET_ENDP5        CMD10_SET_ENDP5
#define    CMD_SET_ENDP6        CMD10_SET_ENDP6
#define    CMD_SET_ENDP7        CMD10_SET_ENDP7
#define    CMD_DIRTY_BUFFER    CMD00_DIRTY_BUFFER
#define    CMD_WR_USB_DATA3    CMD10_WR_USB_DATA3
#define    CMD_WR_USB_DATA5    CMD10_WR_USB_DATA5
#define    CMD_CLR_STALL        CMD1H_CLR_STALL
#define    CMD_SET_ADDRESS        CMD1H_SET_ADDRESS
#define    CMD_GET_DESCR        CMD1H_GET_DESCR
#define    CMD_SET_CONFIG        CMD1H_SET_CONFIG
#define    CMD_AUTO_SETUP        CMD0H_AUTO_SETUP
#define    CMD_ISSUE_TKN_X        CMD2H_ISSUE_TKN_X
#define    CMD_ISSUE_TOKEN        CMD1H_ISSUE_TOKEN
#define    CMD_DISK_INIT        CMD0H_DISK_INIT
#define    CMD_DISK_RESET        CMD0H_DISK_RESET
#define    CMD_DISK_SIZE        CMD0H_DISK_SIZE
#define    CMD_DISK_INQUIRY    CMD0H_DISK_INQUIRY
#define    CMD_DISK_READY        CMD0H_DISK_READY
#define    CMD_DISK_R_SENSE    CMD0H_DISK_R_SENSE
#define    CMD_RD_DISK_SEC        CMD0H_RD_DISK_SEC
#define    CMD_WR_DISK_SEC        CMD0H_WR_DISK_SEC
#define    CMD_DISK_MAX_LUN    CMD0H_DISK_MAX_LUN
#endif
 
/* ********************************************************************************************************************* */
/* ²¢¿Ú·½Ê½, ×´Ì¬¶Ë¿Ú(¶ÁÃüÁî¶Ë¿Ú)µÄ붨Òå */
#ifndef    PARA_STATE_INTB
#define    PARA_STATE_INTB        0x80            /* ²¢¿Ú·½Ê½×´Ì¬¶Ë¿ÚµÄλ7: ÖжϱêÖ¾,µÍÓÐЧ */
#define    PARA_STATE_BUSY        0x10            /* ²¢¿Ú·½Ê½×´Ì¬¶Ë¿ÚµÄλ4: Ã¦±êÖ¾,¸ßÓÐЧ */
#endif
 
/* ********************************************************************************************************************* */
/* ´®¿Ú·½Ê½, ²Ù×÷ÃüÁîǰµÄÒýµ¼Í¬²½Âë */
#ifndef    SER_CMD_TIMEOUT
#define    SER_CMD_TIMEOUT        32                /* ´®¿ÚÃüÁʱʱ¼ä, µ¥Î»ÎªmS, Í¬²½ÂëÖ®¼ä¼°Í¬²½ÂëÓëÃüÁîÂëÖ®¼äµÄ¼ä¸ôÓ¦¸Ã¾¡Á¿¶Ì, ³¬Ê±ºóµÄ´¦Àí·½Ê½Îª¶ªÆú */
#define    SER_SYNC_CODE1        0x57            /* Æô¶¯²Ù×÷µÄµÚ1¸ö´®¿Úͬ²½Âë */
#define    SER_SYNC_CODE2        0xAB            /* Æô¶¯²Ù×÷µÄµÚ2¸ö´®¿Úͬ²½Âë */
#endif
 
/* ********************************************************************************************************************* */
/* ²Ù×÷״̬ */
 
#ifndef    CMD_RET_SUCCESS
#define    CMD_RET_SUCCESS        0x51            /* ÃüÁî²Ù×÷³É¹¦ */
#define    CMD_RET_ABORT        0x5F            /* ÃüÁî²Ù×÷ʧ°Ü */
#endif
 
/* ********************************************************************************************************************* */
/* USBÖжÏ״̬ */
 
#ifndef    USB_INT_EP0_SETUP
 
/* ÒÔÏÂ״̬´úÂëÎªÌØÊâʼþÖжÏ, Èç¹ûͨ¹ýCMD20_CHK_SUSPENDÆôÓÃUSB×ÜÏß¹ÒÆð¼ì²é, ÄÇô±ØÐë´¦ÀíUSB×ÜÏß¹ÒÆðºÍ˯Ãß»½ÐѵÄÖжÏ״̬ */
#define    USB_INT_USB_SUSPEND    0x05            /* USB×ÜÏß¹ÒÆðʼþ */
#define    USB_INT_WAKE_UP        0x06            /* ´Ó˯ÃßÖб»»½ÐÑʼþ */
 
/* ÒÔÏÂ״̬´úÂë0XHÓÃÓÚUSBÉ豸·½Ê½ */
/*   ÄÚÖù̼þģʽÏÂÖ»ÐèÒª´¦Àí: USB_INT_EP1_OUT, USB_INT_EP1_IN, USB_INT_EP2_OUT, USB_INT_EP2_IN */
/*   Î»7-λ4Ϊ0000 */
/*   Î»3-λ2ָʾµ±Ç°ÊÂÎñ, 00=OUT, 10=IN, 11=SETUP */
/*   Î»1-λ0ָʾµ±Ç°¶Ëµã, 00=¶Ëµã0, 01=¶Ëµã1, 10=¶Ëµã2, 11=USB×ÜÏ߸´Î» */
#define    USB_INT_EP0_SETUP    0x0C            /* USB¶Ëµã0µÄSETUP */
#define    USB_INT_EP0_OUT        0x00            /* USB¶Ëµã0µÄOUT */
#define    USB_INT_EP0_IN        0x08            /* USB¶Ëµã0µÄIN */
#define    USB_INT_EP1_OUT        0x01            /* USB¶Ëµã1µÄOUT */
#define    USB_INT_EP1_IN        0x09            /* USB¶Ëµã1µÄIN */
#define    USB_INT_EP2_OUT        0x02            /* USB¶Ëµã2µÄOUT */
#define    USB_INT_EP2_IN        0x0A            /* USB¶Ëµã2µÄIN */
/* USB_INT_BUS_RESET    0x0000XX11B */        /* USB×ÜÏ߸´Î» */
#define    USB_INT_BUS_RESET1    0x03            /* USB×ÜÏ߸´Î» */
#define    USB_INT_BUS_RESET2    0x07            /* USB×ÜÏ߸´Î» */
#define    USB_INT_BUS_RESET3    0x0B            /* USB×ÜÏ߸´Î» */
#define    USB_INT_BUS_RESET4    0x0F            /* USB×ÜÏ߸´Î» */
 
#endif
 
/* ÒÔÏÂ״̬´úÂë2XH-3XHÓÃÓÚUSBÖ÷»ú·½Ê½µÄͨѶʧ°Ü´úÂë */
/*   Î»7-λ6Ϊ00 */
/*   Î»5Ϊ1 */
/*   Î»4ָʾµ±Ç°½ÓÊÕµÄÊý¾Ý°üÊÇ·ñͬ²½ */
/*   Î»3-λ0ָʾµ¼ÖÂͨѶʧ°ÜʱUSBÉ豸µÄÓ¦´ð: 0010=ACK, 1010=NAK, 1110=STALL, 0011=DATA0, 1011=DATA1, XX00=³¬Ê± */
/* USB_INT_RET_ACK    0x001X0010B */            /* ´íÎó:¶ÔÓÚINÊÂÎñ·µ»ØACK */
/* USB_INT_RET_NAK    0x001X1010B */            /* ´íÎó:·µ»ØNAK */
/* USB_INT_RET_STALL    0x001X1110B */        /* ´íÎó:·µ»ØSTALL */
/* USB_INT_RET_DATA0    0x001X0011B */        /* ´íÎó:¶ÔÓÚOUT/SETUPÊÂÎñ·µ»ØDATA0 */
/* USB_INT_RET_DATA1    0x001X1011B */        /* ´íÎó:¶ÔÓÚOUT/SETUPÊÂÎñ·µ»ØDATA1 */
/* USB_INT_RET_TOUT    0x001XXX00B */            /* ´íÎó:·µ»Ø³¬Ê± */
/* USB_INT_RET_TOGX    0x0010X011B */            /* ´íÎó:¶ÔÓÚINÊÂÎñ·µ»ØÊý¾Ý²»Í¬²½ */
/* USB_INT_RET_PID    0x001XXXXXB */            /* ´íÎó:䶨Òå */
 
/* ÒÔÏÂ״̬´úÂë1XHÓÃÓÚUSBÖ÷»ú·½Ê½µÄ²Ù×÷״̬´úÂë */
#ifndef    USB_INT_SUCCESS
#define    USB_INT_SUCCESS        0x14            /* USBÊÂÎñ»òÕß´«Êä²Ù×÷³É¹¦ */
#define    USB_INT_CONNECT        0x15            /* ¼ì²âµ½USBÉ豸Á¬½Óʼþ, ¿ÉÄÜÊÇÐÂÁ¬½Ó»òÕß¶Ï¿ªºóÖØÐÂÁ¬½Ó */
#define    USB_INT_DISCONNECT    0x16            /* ¼ì²âµ½USBÉ豸¶Ï¿ªÊ¼þ */
#define    USB_INT_BUF_OVER    0x17            /* USB´«ÊäµÄÊý¾ÝÓÐÎó»òÕßÊý¾ÝÌ«¶à»º³åÇøÒç³ö */
#define    USB_INT_USB_READY    0x18            /* USBÉ豸ÒѾ­±»³õʼ»¯(ÒѾ­·ÖÅäUSBµØÖ·) */
#define    USB_INT_DISK_READ    0x1D            /* USB´æ´¢Æ÷ÇëÇóÊý¾Ý¶Á³ö */
#define    USB_INT_DISK_WRITE    0x1E            /* USB´æ´¢Æ÷ÇëÇóÊý¾ÝдÈë */
#define    USB_INT_DISK_ERR    0x1F            /* USB´æ´¢Æ÷²Ù×÷ʧ°Ü */
#endif
 
/* ÒÔÏÂ״̬´úÂëÓÃÓÚÖ÷»úÎļþģʽϵÄÎļþϵͳ´íÎóÂë */
#ifndef    ERR_DISK_DISCON
#define    ERR_DISK_DISCON        0x82            /* ´ÅÅÌÉÐδÁ¬½Ó,¿ÉÄÜ´ÅÅÌÒѾ­¶Ï¿ª */
#define    ERR_LARGE_SECTOR    0x84            /* ´ÅÅ̵ÄÉÈÇøÌ«´ó,Ö»Ö§³ÖÿÉÈÇø512×Ö½Ú */
#define    ERR_TYPE_ERROR        0x92            /* ´ÅÅÌ·ÖÇøÀàÐͲ»Ö§³Ö,Ö»Ö§³ÖFAT12/FAT16/BigDOS/FAT32,ÐèÒªÓÉ´ÅÅ̹ÜÀí¹¤¾ßÖØÐ·ÖÇø */
#define    ERR_BPB_ERROR        0xA1            /* ´ÅÅÌÉÐδ¸ñʽ»¯,»òÕß²ÎÊý´íÎó,ÐèÒªÓÉWINDOWS²ÉÓÃĬÈϲÎÊýÖØÐ¸ñʽ»¯ */
#define    ERR_DISK_FULL        0xB1            /* ´ÅÅÌÎļþÌ«Âú,Ê£Óà¿Õ¼äÌ«ÉÙ»òÕßÒѾ­Ã»ÓÐ,ÐèÒª´ÅÅÌÕûÀí */
#define    ERR_FDT_OVER        0xB2            /* Ä¿Â¼(Îļþ¼Ð)ÄÚÎļþÌ«¶à,ûÓпÕÏеÄĿ¼Ïî,FAT12/FAT16¸ùĿ¼ÏµÄÎļþÊýÓ¦¸ÃÉÙÓÚ512¸ö,ÐèÒª´ÅÅÌÕûÀí */
#define    ERR_FILE_CLOSE        0xB4            /* ÎļþÒѾ­¹Ø±Õ,Èç¹ûÐèҪʹÓÃ,Ó¦¸ÃÖØÐ´ò¿ªÎļþ */
#define    ERR_OPEN_DIR        0x41            /* Ö¸¶¨Â·¾¶µÄĿ¼(Îļþ¼Ð)±»´ò¿ª */
#define    ERR_MISS_FILE        0x42            /* Ö¸¶¨Â·¾¶µÄÎļþûÓÐÕÒµ½,¿ÉÄÜÊÇÎļþÃû³Æ´íÎó */
#define    ERR_FOUND_NAME        0x43            /* ËÑË÷µ½ÏàÆ¥ÅäµÄÎļþÃû,»òÕßÊÇÒªÇó´ò¿ªÄ¿Â¼(Îļþ¼Ð)¶øÊµ¼Ê½á¹ûÈ´´ò¿ªÁËÎļþ */
/* ÒÔÏÂÎļþϵͳ´íÎóÂëÓÃÓÚÎļþϵͳ×Ó³ÌÐò */
#define    ERR_MISS_DIR        0xB3            /* Ö¸¶¨Â·¾¶µÄij¸ö×ÓĿ¼(Îļþ¼Ð)ûÓÐÕÒµ½,¿ÉÄÜÊÇĿ¼Ãû³Æ´íÎó */
#define    ERR_LONG_BUF_OVER    0x48            /* ³¤Îļþ»º³åÇøÒç³ö */
#define    ERR_LONG_NAME_ERR    0x49            /* ¶ÌÎļþÃûûÓжÔÓ¦µÄ³¤ÎļþÃû»òÕß³¤ÎļþÃû´íÎó */
#define    ERR_NAME_EXIST        0x4A            /* Í¬ÃûµÄ¶ÌÎļþÒѾ­´æÔÚ,½¨ÒéÖØÐÂÉú³ÉÁíÍâÒ»¸ö¶ÌÎļþÃû */
#endif
 
/* ********************************************************************************************************************* */
/* ÒÔÏÂ״̬´úÂëÓÃÓÚÖ÷»úÎļþģʽϵĴÅÅ̼°Îļþ״̬, VAR_DISK_STATUS */
#ifndef    DEF_DISK_UNKNOWN
#define    DEF_DISK_UNKNOWN    0x00            /* ÉÐδ³õʼ»¯,δ֪״̬ */
#define    DEF_DISK_DISCONN    0x01            /* ´ÅÅÌûÓÐÁ¬½Ó»òÕßÒѾ­¶Ï¿ª */
#define    DEF_DISK_CONNECT    0x02            /* ´ÅÅÌÒѾ­Á¬½Ó,µ«ÊÇÉÐδ³õʼ»¯»òÕßÎÞ·¨Ê¶±ð¸Ã´ÅÅÌ */
#define    DEF_DISK_MOUNTED    0x03            /* ´ÅÅÌÒѾ­³õʼ»¯³É¹¦,µ«ÊÇÉÐδ·ÖÎöÎļþϵͳ»òÕßÎļþϵͳ²»Ö§³Ö */
#define    DEF_DISK_READY        0x10            /* ÒѾ­·ÖÎö´ÅÅ̵ÄÎļþϵͳ²¢ÇÒÄܹ»Ö§³Ö */
#define    DEF_DISK_OPEN_ROOT    0x12            /* ÒѾ­´ò¿ª¸ùĿ¼,ʹÓúó±ØÐë¹Ø±Õ,×¢ÒâFAT12/FAT16¸ùĿ¼Êǹ̶¨³¤¶È */
#define    DEF_DISK_OPEN_DIR    0x13            /* ÒѾ­´ò¿ª×ÓĿ¼(Îļþ¼Ð) */
#define    DEF_DISK_OPEN_FILE    0x14            /* ÒѾ­´ò¿ªÎļþ */
#endif
 
/* ********************************************************************************************************************* */
/* Îļþϵͳ³£Óö¨Òå */
 
#ifndef    DEF_SECTOR_SIZE
#define    DEF_SECTOR_SIZE        512                /* UÅÌ»òÕßSD¿¨Ä¬ÈϵÄÎïÀíÉÈÇøµÄ´óС */
#endif
 
#ifndef    DEF_WILDCARD_CHAR
#define    DEF_WILDCARD_CHAR    0x2A            /* Â·¾¶ÃûµÄͨÅä·û '*' */
#define    DEF_SEPAR_CHAR1        0x5C            /* Â·¾¶ÃûµÄ·Ö¸ô·û '\' */
#define    DEF_SEPAR_CHAR2        0x2F            /* Â·¾¶ÃûµÄ·Ö¸ô·û '/' */
#define    DEF_FILE_YEAR        2004            /* Ä¬ÈÏÎļþÈÕÆÚ: 2004Äê */
#define    DEF_FILE_MONTH        1                /* Ä¬ÈÏÎļþÈÕÆÚ: 1Ô */
#define    DEF_FILE_DATE        1                /* Ä¬ÈÏÎļþÈÕÆÚ: 1ÈÕ */
#endif
 
#ifndef    ATTR_DIRECTORY
 
/* FATÊý¾ÝÇøÖÐÎļþĿ¼ÐÅÏ¢ */
typedef struct _FAT_DIR_INFO {
    UINT8    DIR_Name[11];                    /* 00H,ÎļþÃû,¹²11×Ö½Ú,²»×ã´¦Ìî¿Õ¸ñ */
    UINT8    DIR_Attr;                        /* 0BH,ÎļþÊôÐÔ,²Î¿¼ºóÃæµÄ˵Ã÷ */
    UINT8    DIR_NTRes;                        /* 0CH */
    UINT8    DIR_CrtTimeTenth;                /* 0DH,Îļþ´´½¨µÄʱ¼ä,ÒÔ0.1Ã뵥λ¼ÆÊý */
    UINT8     DIR_CrtTime[2];                    /* 0EH,Îļþ´´½¨µÄʱ¼ä */
    UINT8     DIR_CrtDate[2];                    /* 10H,Îļþ´´½¨µÄÈÕÆÚ */
    UINT8     DIR_LstAccDate[2];                    /* 12H,×î½üÒ»´Î´æÈ¡²Ù×÷µÄÈÕÆÚ */
    UINT8     DIR_FstClusHI[2];                    /* 14H */
    UINT8     DIR_WrtTime[2];                    /* 16H,ÎļþÐÞ¸Äʱ¼ä,²Î¿¼Ç°ÃæµÄºêMAKE_FILE_TIME */
    UINT8     DIR_WrtDate[2];                    /* 18H,ÎļþÐÞ¸ÄÈÕÆÚ,²Î¿¼Ç°ÃæµÄºêMAKE_FILE_DATE */
    UINT8     DIR_FstClusLO[2];                    /* 1AH */
    UINT8     DIR_FileSize[4];                    /* 1CH,Îļþ³¤¶È */
} FAT_DIR_INFO, *P_FAT_DIR_INFO;            /* 20H */
 
/* ÎļþÊôÐÔ */
#define ATTR_READ_ONLY            0x01        /* ÎļþΪֻ¶ÁÊôÐÔ */
#define ATTR_HIDDEN            0x02        /* ÎļþΪÒþº¬ÊôÐÔ */
#define ATTR_SYSTEM            0x04        /* ÎļþΪϵͳÊôÐÔ */
#define ATTR_VOLUME_ID            0x08        /* ¾í±ê */
#define ATTR_DIRECTORY            0x10        /* ×ÓĿ¼(Îļþ¼Ð) */
#define ATTR_ARCHIVE            0x20        /* ÎļþΪ´æµµÊôÐÔ */
#define ATTR_LONG_NAME            ( ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID )    /* ³¤ÎļþÃûÊôÐÔ */
#define ATTR_LONG_NAME_MASK        ( ATTR_LONG_NAME | ATTR_DIRECTORY | ATTR_ARCHIVE )
/* ÎļþÊôÐÔ UINT8 */
/* bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 */
/*  Ö»   Òþ   Ïµ   ¾í   Ä¿   ´æ   Î´¶¨Òå   */
/*  ¶Á   ²Ø   Í³   ±ê   Â¼   µµ            */
/* Îļþʱ¼ä UINT16 */
/* Time = (Hour<<11) + (Minute<<5) + (Second>>1) */
#define MAKE_FILE_TIME( h, m, s )    ( (h<<11) + (m<<5) + (s>>1) )    /* Éú³ÉÖ¸¶¨Ê±·ÖÃëµÄÎļþʱ¼äÊý¾Ý */
/* ÎļþÈÕÆÚ UINT16 */
/* Date = ((Year-1980)<<9) + (Month<<5) + Day */
#define MAKE_FILE_DATE( y, m, d )    ( ((y-1980)<<9) + (m<<5) + d )    /* Éú³ÉÖ¸¶¨ÄêÔÂÈÕµÄÎļþÈÕÆÚÊý¾Ý */
 
#define LONE_NAME_MAX_CHAR        510    //(255*2)        /* ³¤ÎļþÃû×î¶à×Ö·ûÊý/×Ö½ÚÊý */
#define LONG_NAME_PER_DIR        26    /* ³¤ÎļþÃûÔÚÿ¸öÎļþĿ¼ÐÅÏ¢½á¹¹ÖеÄ×Ö·ûÊý/×Ö½ÚÊý */
 
#endif
 
/* ********************************************************************************************************************* */
/* SCSIÃüÁîºÍÊý¾ÝÊäÈëÊä³ö½á¹¹ */
 
#ifndef    SPC_CMD_INQUIRY
 
/* SCSIÃüÁîÂë */
#define SPC_CMD_INQUIRY            0x12
#define SPC_CMD_READ_CAPACITY    0x25
#define SPC_CMD_READ10            0x28
#define SPC_CMD_WRITE10            0x2A
#define SPC_CMD_TEST_READY        0x00
#define SPC_CMD_REQUEST_SENSE    0x03
#define SPC_CMD_MODESENSE6        0x1A
#define SPC_CMD_MODESENSE10        0x5A
#define SPC_CMD_START_STOP        0x1B
 
/* BulkOnlyЭÒéµÄÃüÁî¿é */
typedef struct _BULK_ONLY_CBW {
    UINT32    CBW_Sig;
    UINT32    CBW_Tag;
    UINT8    CBW_DataLen0;                    /* 08H,ÊäÈë: Êý¾Ý´«Ê䳤¶È,¶ÔÓÚÊäÈëÊý¾ÝÆäÓÐЧֵÊÇ0µ½48,¶ÔÓÚÊä³öÊý¾ÝÆäÓÐЧֵΪ0µ½33 */
    UINT8    CBW_DataLen1;
    UINT16    CBW_DataLen2;
    UINT8    CBW_Flag;                        /* 0CH,ÊäÈë: ´«Êä·½ÏòµÈ±êÖ¾,λ7Ϊ1ÔòÊäÈëÊý¾Ý,λΪ0ÔòÊä³öÊý¾Ý»òÕßûÓÐÊý¾Ý */
    UINT8    CBW_LUN;
    UINT8    CBW_CB_Len;                        /* 0EH,ÊäÈë: ÃüÁî¿éµÄ³¤¶È,ÓÐЧֵÊÇ1µ½16 */
    UINT8    CBW_CB_Buf[16];                    /* 0FH,ÊäÈë: ÃüÁî¿é,¸Ã»º³åÇø×î¶àΪ16¸ö×Ö½Ú */
} BULK_ONLY_CBW, *P_BULK_ONLY_CBW;            /* BulkOnlyЭÒéµÄÃüÁî¿é, ÊäÈëCBW½á¹¹ */
 
/* INQUIRYÃüÁîµÄ·µ»ØÊý¾Ý */
typedef struct _INQUIRY_DATA {
    UINT8    DeviceType;                    /* 00H, É豸ÀàÐÍ */
    UINT8    RemovableMedia;                /* 01H, Î»7Ϊ1˵Ã÷ÊÇÒÆ¶¯´æ´¢ */
    UINT8    Versions;                    /* 02H, Ð­Òé°æ±¾ */
    UINT8    DataFormatAndEtc;            /* 03H, Ö¸¶¨·µ»ØÊý¾Ý¸ñʽ */
    UINT8    AdditionalLength;            /* 04H, ºóÐøÊý¾ÝµÄ³¤¶È */
    UINT8    Reserved1;
    UINT8    Reserved2;
    UINT8    MiscFlag;                    /* 07H, Ò»Ð©¿ØÖƱêÖ¾ */
    UINT8    VendorIdStr[8];                /* 08H, ³§ÉÌÐÅÏ¢ */
    UINT8    ProductIdStr[16];            /* 10H, ²úÆ·ÐÅÏ¢ */
    UINT8    ProductRevStr[4];            /* 20H, ²úÆ·°æ±¾ */
} INQUIRY_DATA, *P_INQUIRY_DATA;        /* 24H */
 
/* REQUEST SENSEÃüÁîµÄ·µ»ØÊý¾Ý */
typedef struct _SENSE_DATA {
    UINT8    ErrorCode;                    /* 00H, ´íÎó´úÂë¼°ÓÐЧλ */
    UINT8    SegmentNumber;
    UINT8    SenseKeyAndEtc;                /* 02H, Ö÷¼üÂë */
    UINT8    Information0;
    UINT8    Information1;
    UINT8    Information2;
    UINT8    Information3;
    UINT8    AdditSenseLen;                /* 07H, ºóÐøÊý¾ÝµÄ³¤¶È */
    UINT8    CmdSpecInfo[4];
    UINT8    AdditSenseCode;                /* 0CH, ¸½¼Ó¼üÂë */
    UINT8    AddSenCodeQual;                /* 0DH, ÏêϸµÄ¸½¼Ó¼üÂë */
    UINT8    FieldReplaUnit;
    UINT8    SenseKeySpec[3];
} SENSE_DATA, *P_SENSE_DATA;            /* 12H */
 
#endif
 
/* ********************************************************************************************************************* */
/* Ö÷»úÎļþģʽϵÄÊý¾ÝÊäÈëºÍÊä³ö½á¹¹ */
 
#ifndef    MAX_FILE_NAME_LEN
 
#define MAX_FILE_NAME_LEN        (13+1)        /* ÎļþÃû×î´ó³¤¶È,×î´ó³¤¶ÈÊÇ1¸ö¸ùĿ¼·û+8¸öÖ÷ÎļþÃû+1¸öСÊýµã+3¸öÀàÐÍÃû+½áÊø·û=14 */
/*
// ÃüÁîµÄÊäÈëÊý¾ÝºÍÊä³öÊý¾Ý /
typedef union _CH376_CMD_DATA {
    struct {
        UINT8    mBuffer[ MAX_FILE_NAME_LEN ];
    } Default;
 
    INQUIRY_DATA    DiskMountInq;            // ·µ»Ø: INQUIRYÃüÁîµÄ·µ»ØÊý¾Ý 
    // CMD0H_DISK_MOUNT: ³õʼ»¯´ÅÅ̲¢²âÊÔ´ÅÅÌÊÇ·ñ¾ÍÐ÷,Ê×´ÎÖ´ÐÐʱ 
 
    FAT_DIR_INFO    OpenDirInfo;            // ·µ»Ø: Ã¶¾Ùµ½µÄÎļþĿ¼ÐÅÏ¢ 
     CMD0H_FILE_OPEN: Ã¶¾ÙÎļþºÍĿ¼(Îļþ¼Ð) 
 
    FAT_DIR_INFO    EnumDirInfo;            // ·µ»Ø: Ã¶¾Ùµ½µÄÎļþĿ¼ÐÅÏ¢ 
                                            
    // CMD0H_FILE_ENUM_GO: ¼ÌÐøÃ¶¾ÙÎļþºÍĿ¼(Îļþ¼Ð) 
 
    struct {
        UINT8    mUpdateFileSz;                // ÊäÈë²ÎÊý: ÊÇ·ñÔÊÐí¸üÐÂÎļþ³¤¶È, 0Ôò½ûÖ¹¸üг¤¶È 
    } FileCLose;                        // CMD1H_FILE_CLOSE: ¹Ø±Õµ±Ç°ÒѾ­´ò¿ªµÄÎļþ 
 
    struct {
        UINT8    mDirInfoIndex;                // ÊäÈë²ÎÊý: Ö¸¶¨ÐèÒª¶ÁÈ¡µÄĿ¼ÐÅÏ¢½á¹¹ÔÚÉÈÇøÄÚµÄË÷ÒýºÅ, 0FFHÔòΪµ±Ç°ÒѾ­´ò¿ªµÄÎļþ 
    } DirInfoRead;                        // CMD1H_DIR_INFO_READ: ¶ÁÈ¡ÎļþµÄĿ¼ÐÅÏ¢ 
 
    union {
        UINT32    mByteOffset;                // ÊäÈë²ÎÊý: Æ«ÒÆ×Ö½ÚÊý,ÒÔ×Ö½ÚΪµ¥Î»µÄÆ«ÒÆÁ¿(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
        UINT32    mSectorLba;                // ·µ»Ø: µ±Ç°ÎļþÖ¸Õë¶ÔÓ¦µÄ¾ø¶ÔÏßÐÔÉÈÇøºÅ,0FFFFFFFFHÔòÒѵ½Îļþβ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
    } ByteLocate;                        // CMD4H_BYTE_LOCATE: ÒÔ×Ö½ÚΪµ¥Î»Òƶ¯µ±Ç°ÎļþÖ¸Õë 
 
    struct {
        UINT16    mByteCount;                // ÊäÈë²ÎÊý: ÇëÇó¶ÁÈ¡µÄ×Ö½ÚÊý(×ܳ¤¶È16λ,µÍ×Ö½ÚÔÚǰ) 
    } ByteRead;                        // CMD2H_BYTE_READ: ÒÔ×Ö½ÚΪµ¥Î»´Óµ±Ç°Î»ÖöÁÈ¡Êý¾Ý¿é 
 
    struct {
        UINT16    mByteCount;                // ÊäÈë²ÎÊý: ÇëÇóдÈëµÄ×Ö½ÚÊý(×ܳ¤¶È16λ,µÍ×Ö½ÚÔÚǰ) 
    } ByteWrite;                        // CMD2H_BYTE_WRITE: ÒÔ×Ö½ÚΪµ¥Î»Ïòµ±Ç°Î»ÖÃдÈëÊý¾Ý¿é 
 
    union {
        UINT32    mSectorOffset;                // ÊäÈë²ÎÊý: Æ«ÒÆÉÈÇøÊý,ÒÔÉÈÇøÎªµ¥Î»µÄÆ«ÒÆÁ¿(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
        UINT32    mSectorLba;                // ·µ»Ø: µ±Ç°ÎļþÖ¸Õë¶ÔÓ¦µÄ¾ø¶ÔÏßÐÔÉÈÇøºÅ,0FFFFFFFFHÔòÒѵ½Îļþβ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
    } SectorLocate;                        // CMD4H_SEC_LOCATE: ÒÔÉÈÇøÎªµ¥Î»Òƶ¯µ±Ç°ÎļþÖ¸Õë 
 
    struct {
        UINT8    mSectorCount;                // ÊäÈë²ÎÊý: ÇëÇó¶ÁÈ¡µÄÉÈÇøÊý 
        // ·µ»Ø: ÔÊÐí¶ÁÈ¡µÄÉÈÇøÊý 
        UINT8    mReserved1;
        UINT8    mReserved2;
        UINT8    mReserved3;
        UINT32    mStartSector;                // ·µ»Ø: ÔÊÐí¶ÁÈ¡µÄÉÈÇø¿éµÄÆðʼ¾ø¶ÔÏßÐÔÉÈÇøºÅ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
    } SectorRead;                        // CMD1H_SEC_READ: ÒÔÉÈÇøÎªµ¥Î»´Óµ±Ç°Î»ÖöÁÈ¡Êý¾Ý¿é 
 
    struct {
        UINT8    mSectorCount;                // ÊäÈë²ÎÊý: ÇëÇóдÈëµÄÉÈÇøÊý 
        // ·µ»Ø: ÔÊÐíдÈëµÄÉÈÇøÊý 
        UINT8    mReserved1;
        UINT8    mReserved2;
        UINT8    mReserved3;
        UINT32    mStartSector;                // ·µ»Ø: ÔÊÐíдÈëµÄÉÈÇø¿éµÄÆðʼ¾ø¶ÔÏßÐÔÉÈÇøºÅ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
    } SectorWrite;                        // CMD1H_SEC_WRITE: ÒÔÉÈÇøÎªµ¥Î»ÔÚµ±Ç°Î»ÖÃдÈëÊý¾Ý¿é 
 
    struct {
        UINT32    mDiskSizeSec;                // ·µ»Ø: Õû¸öÎïÀí´ÅÅ̵Ä×ÜÉÈÇøÊý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
    } DiskCapacity;                        // CMD0H_DISK_CAPACITY: ²éѯ´ÅÅÌÎïÀíÈÝÁ¿ 
 
    struct {
        UINT32    mTotalSector;                // ·µ»Ø: µ±Ç°Âß¼­Å̵Ä×ÜÉÈÇøÊý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
        UINT32    mFreeSector;                // ·µ»Ø: µ±Ç°Âß¼­Å̵ÄÊ£ÓàÉÈÇøÊý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
        UINT8    mDiskFat;                // ·µ»Ø: µ±Ç°Âß¼­Å̵ÄFATÀàÐÍ,1-FAT12,2-FAT16,3-FAT32 
    } DiskQuery;                        // CMD_DiskQuery, ²éѯ´ÅÅÌÐÅÏ¢ 
 
    BULK_ONLY_CBW    DiskBocCbw;                // ÊäÈë²ÎÊý: CBWÃüÁî½á¹¹ 
    // CMD0H_DISK_BOC_CMD: ¶ÔUSB´æ´¢Æ÷Ö´ÐÐBulkOnly´«ÊäЭÒéµÄÃüÁî 
 
    struct {
        UINT8    mMaxLogicUnit;                // ·µ»Ø: USB´æ´¢Æ÷µÄ×î´óÂß¼­µ¥ÔªºÅ 
    } DiskMaxLun;                        // CMD0H_DISK_MAX_LUN: ¿ØÖÆ´«Êä-»ñÈ¡USB´æ´¢Æ÷×î´óÂß¼­µ¥ÔªºÅ 
 
    INQUIRY_DATA    DiskInitInq;            // ·µ»Ø: INQUIRYÃüÁîµÄ·µ»ØÊý¾Ý 
                                            // CMD0H_DISK_INIT: ³õʼ»¯USB´æ´¢Æ÷ 
 
    INQUIRY_DATA    DiskInqData;            // ·µ»Ø: INQUIRYÃüÁîµÄ·µ»ØÊý¾Ý 
                                            //CMD0H_DISK_INQUIRY: ²éѯUSB´æ´¢Æ÷ÌØÐÔ 
 
    SENSE_DATA        ReqSenseData;            // ·µ»Ø: REQUEST SENSEÃüÁîµÄ·µ»ØÊý¾Ý 
    // CMD0H_DISK_R_SENSE: ¼ì²éUSB´æ´¢Æ÷´íÎó 
 
    struct {
        UINT32    mDiskSizeSec;                // ·µ»Ø: Õû¸öÎïÀí´ÅÅ̵Ä×ÜÉÈÇøÊý(×ܳ¤¶È32λ,¸ß×Ö½ÚÔÚǰ) 
    } DiskSize;                        // CMD0H_DISK_SIZE: »ñÈ¡USB´æ´¢Æ÷µÄÈÝÁ¿ 
 
    struct {
        UINT32    mStartSector;                // ÊäÈë²ÎÊý: LBAÉÈÇøµØÖ·(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
        UINT8    mSectorCount;                // ÊäÈë²ÎÊý: ÇëÇó¶ÁÈ¡µÄÉÈÇøÊý 
    } DiskRead;                        // CMD5H_DISK_READ: ´ÓUSB´æ´¢Æ÷¶ÁÊý¾Ý¿é(ÒÔÉÈÇøÎªµ¥Î») 
 
    struct {
        UINT32    mStartSector;                // ÊäÈë²ÎÊý: LBAÉÈÇøµØÖ·(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) 
        UINT8    mSectorCount;                // ÊäÈë²ÎÊý: ÇëÇóдÈëµÄÉÈÇøÊý 
    } DiskWrite;                        // CMD5H_DISK_WRITE: ÏòUSB´æ´¢Æ÷дÊý¾Ý¿é(ÒÔÉÈÇøÎªµ¥Î») 
} CH376_CMD_DATA, *P_CH376_CMD_DATA;
 */
#endif
 
/* ********************************************************************************************************************* */
/* Ö÷»úÎļþģʽϵÄÎļþϵͳ±äÁ¿µÄµØÖ· */
 
#ifndef    VAR_FILE_SIZE
 
/* 8λ/µ¥×Ö½Ú±äÁ¿ */
#define    VAR_SYS_BASE_INFO    0x20            /* µ±Ç°ÏµÍ³µÄ»ù±¾ÐÅÏ¢ */
/*           Î»6ÓÃÓÚָʾUSB´æ´¢É豸µÄ×ÓÀà±ðSubClass-Code, Î»6Ϊ0Ôò˵Ã÷×ÓÀà±ðΪ6, Î»6Ϊ1Ôò˵Ã÷×ÓÀà±ðÊÇ·Ç6µÄÆäËüÖµ */
/*           Î»5ÓÃÓÚָʾUSBÉ豸·½Ê½ÏµÄUSBÅäÖÃ״̬ºÍUSBÖ÷»ú·½Ê½ÏµÄUSBÉ豸Á¬½Ó״̬ */
/*                USBÉ豸·½Ê½ÏÂ, Î»5Ϊ1ÔòUSBÅäÖÃÍê³É, Î»5λ0ÔòÉÐδÅäÖà*/
/*                USBÖ÷»ú·½Ê½ÏÂ, Î»5Ϊ1ÔòUSB¶Ë¿Ú´æÔÚUSBÉ豸, Î»5λ0ÔòUSB¶Ë¿ÚûÓÐUSBÉ豸 */
/*           Î»4ÓÃÓÚָʾUSBÉ豸·½Ê½ÏµĻº³åÇøËø¶¨×´Ì¬, Î»4Ϊ1Ôò˵Ã÷USB»º³åÇø´¦ÓÚËø¶¨×´Ì¬, Î»6Ϊ1Ôò˵Ã÷ÒѾ­ÊÍ·Å */
/*           ÆäËüλ, ±£Áô,ÇëÎðÐ޸Ġ*/
#define    VAR_RETRY_TIMES        0x25            /* USBÊÂÎñ²Ù×÷µÄÖØÊÔ´ÎÊý */
/*           Î»7Ϊ0ÔòÊÕµ½NAKʱ²»ÖØÊÔ, Î»7Ϊ1λ6Ϊ0ÔòÊÕµ½NAKʱÎÞÏÞÖØÊÔ(¿ÉÒÔÓÃCMD_ABORT_NAKÃüÁî·ÅÆúÖØÊÔ), Î»7Ϊ1λ6Ϊ1ÔòÊÕµ½NAKʱ×î¶àÖØÊÔ3Ãë */
/*           Î»5~λ0Ϊ³¬Ê±ºóµÄÖØÊÔ´ÎÊý */
#define    VAR_FILE_BIT_FLAG    0x26            /* Ö÷»úÎļþģʽϵÄλ±êÖ¾ */
/*           Î»1ºÍλ0, Âß¼­Å̵ÄFATÎļþϵͳ±êÖ¾, 00-FAT12, 01-FAT16, 10-FAT32, 11-·Ç·¨ */
/*           Î»2, µ±Ç°»º³åÇøÖеÄFAT±íÊý¾ÝÊÇ·ñ±»Ð޸ıêÖ¾, 0-δÐÞ¸Ä, 1-ÒÑÐ޸Ġ*/
/*           Î»3, Îļþ³¤¶ÈÐèÒªÐ޸ıêÖ¾, µ±Ç°Îļþ±»×·¼ÓÊý¾Ý, 0-δ׷¼ÓÎÞÐèÐÞ¸Ä, 1-ÒÑ×·¼ÓÐèÒªÐ޸Ġ*/
/*           ÆäËüλ, ±£Áô,ÇëÎðÐ޸Ġ*/
#define    VAR_DISK_STATUS        0x2B            /* Ö÷»úÎļþģʽϵĴÅÅ̼°Îļþ״̬ */
#define    VAR_SD_BIT_FLAG        0x30            /* Ö÷»úÎļþģʽÏÂSD¿¨µÄλ±êÖ¾ */
/*           Î»0, SD¿¨°æ±¾, 0-Ö»Ö§³ÖSDµÚÒ»°æ,1-Ö§³ÖSDµÚ¶þ°æ */
/*           Î»1, ×Ô¶¯Ê¶±ð, 0-SD¿¨, 1-MMC¿¨ */
/*           Î»2, ×Ô¶¯Ê¶±ð, 0-±ê×¼ÈÝÁ¿SD¿¨, 1-´óÈÝÁ¿SD¿¨(HC-SD) */
/*           Î»4, ACMD41ÃüÁʱ */
/*           Î»5, CMD1ÃüÁʱ */
/*           Î»6, CMD58ÃüÁʱ */
/*           ÆäËüλ, ±£Áô,ÇëÎðÐ޸Ġ*/
#define    VAR_UDISK_TOGGLE    0x31            /* USB´æ´¢É豸µÄBULK-IN/BULK-OUT¶ËµãµÄͬ²½±êÖ¾ */
/*           Î»7, Bulk-In¶ËµãµÄͬ²½±êÖ¾ */
/*           Î»6, Bulk-In¶ËµãµÄͬ²½±êÖ¾ */
/*           Î»5~λ0, ±ØÐëΪ0 */
#define    VAR_UDISK_LUN        0x34            /* USB´æ´¢É豸µÄÂß¼­µ¥ÔªºÅ */
/*           Î»7~λ4, USB´æ´¢É豸µÄµ±Ç°Âß¼­µ¥ÔªºÅ,CH376³õʼ»¯USB´æ´¢É豸ºó,ĬÈÏÊÇ·ÃÎÊ0#Âß¼­µ¥Ôª */
/*           Î»3~λ0, USB´æ´¢É豸µÄ×î´óÂß¼­µ¥ÔªºÅ,¼Ó1ºóµÈÓÚÂß¼­µ¥ÔªÊý */
#define    VAR_SEC_PER_CLUS    0x38            /* Âß¼­Å̵Äÿ´ØÉÈÇøÊý */
#define    VAR_FILE_DIR_INDEX    0x3B            /* µ±Ç°ÎļþĿ¼ÐÅÏ¢ÔÚÉÈÇøÄÚµÄË÷ÒýºÅ */
#define    VAR_CLUS_SEC_OFS    0x3C            /* µ±Ç°ÎļþÖ¸ÕëÔÚ´ØÄÚµÄÉÈÇøÆ«ÒÆ,Ϊ0xFFÔòÖ¸ÏòÎļþĩβ,´Ø½áÊø */
 
/* 32λ/4×Ö½Ú±äÁ¿ */
#define    VAR_DISK_ROOT        0x44            /* ¶ÔÓÚFAT16ÅÌΪ¸ùĿ¼ռÓÃÉÈÇøÊý,¶ÔÓÚFAT32ÅÌΪ¸ùĿ¼Æðʼ´ØºÅ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_DSK_TOTAL_CLUS    0x48            /* Âß¼­Å̵Ä×Ü´ØÊý(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_DSK_START_LBA    0x4C            /* Âß¼­ÅÌµÄÆðʼ¾ø¶ÔÉÈÇøºÅLBA(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_DSK_DAT_START    0x50            /* Âß¼­Å̵ÄÊý¾ÝÇøÓòµÄÆðʼLBA(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_LBA_BUFFER        0x54            /* µ±Ç°´ÅÅÌÊý¾Ý»º³åÇøµÄÊý¾Ý¶ÔÓ¦µÄLBA(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_LBA_CURRENT        0x58            /* µ±Ç°¶ÁдµÄ´ÅÅÌÆðʼLBAµØÖ·(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_FAT_DIR_LBA        0x5C            /* µ±Ç°ÎļþĿ¼ÐÅÏ¢ËùÔÚµÄÉÈÇøLBAµØÖ·(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_START_CLUSTER    0x60            /* µ±Ç°Îļþ»òÕßĿ¼(Îļþ¼Ð)µÄÆðʼ´ØºÅ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_CURRENT_CLUST    0x64            /* µ±Ç°ÎļþµÄµ±Ç°´ØºÅ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_FILE_SIZE        0x68            /* µ±Ç°ÎļþµÄ³¤¶È(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
#define    VAR_CURRENT_OFFSET    0x6C            /* µ±Ç°ÎļþÖ¸Õë,µ±Ç°¶ÁдλÖõÄ×Ö½ÚÆ«ÒÆ(×ܳ¤¶È32λ,µÍ×Ö½ÚÔÚǰ) */
 
#endif
 
/* ********************************************************************************************************************* */
/* ³£ÓÃUSB¶¨Òå */
 
/* USBµÄ°ü±êʶPID, Ö÷»ú·½Ê½¿ÉÄÜÓõ½ */
#ifndef    DEF_USB_PID_SETUP
#define    DEF_USB_PID_NULL    0x00            /* ±£ÁôPID, Î´¶¨Òå */
#define    DEF_USB_PID_SOF        0x05
#define    DEF_USB_PID_SETUP    0x0D
#define    DEF_USB_PID_IN        0x09
#define    DEF_USB_PID_OUT        0x01
#define    DEF_USB_PID_ACK        0x02
#define    DEF_USB_PID_NAK        0x0A
#define    DEF_USB_PID_STALL    0x0E
#define    DEF_USB_PID_DATA0    0x03
#define    DEF_USB_PID_DATA1    0x0B
#define    DEF_USB_PID_PRE        0x0C
#endif
 
/* USBÇëÇóÀàÐÍ, ÍâÖù̼þģʽ¿ÉÄÜÓõ½ */
#ifndef    DEF_USB_REQ_TYPE
#define    DEF_USB_REQ_READ    0x80            /* ¿ØÖƶÁ²Ù×÷ */
#define    DEF_USB_REQ_WRITE    0x00            /* ¿ØÖÆÐ´²Ù×÷ */
#define    DEF_USB_REQ_TYPE    0x60            /* ¿ØÖÆÇëÇóÀàÐÍ */
#define    DEF_USB_REQ_STAND    0x00            /* ±ê×¼ÇëÇó */
#define    DEF_USB_REQ_CLASS    0x20            /* É豸ÀàÇëÇó */
#define    DEF_USB_REQ_VENDOR    0x40            /* ³§ÉÌÇëÇó */
#define    DEF_USB_REQ_RESERVE    0x60            /* ±£ÁôÇëÇó */
#endif
 
/* USB±ê×¼É豸ÇëÇó, RequestTypeµÄλ6λ5=00(Standard), ÍâÖù̼þģʽ¿ÉÄÜÓõ½ */
#ifndef    DEF_USB_GET_DESCR
#define    DEF_USB_CLR_FEATURE    0x01
#define    DEF_USB_SET_FEATURE    0x03
#define    DEF_USB_GET_STATUS    0x00
#define    DEF_USB_SET_ADDRESS    0x05
#define    DEF_USB_GET_DESCR    0x06
#define    DEF_USB_SET_DESCR    0x07
#define    DEF_USB_GET_CONFIG    0x08
#define    DEF_USB_SET_CONFIG    0x09
#define    DEF_USB_GET_INTERF    0x0A
#define    DEF_USB_SET_INTERF    0x0B
#define    DEF_USB_SYNC_FRAME    0x0C
#endif
 
/* ********************************************************************************************************************* */
 
#endif