7cdca9aeb67d463bcd9356916a7943c74609da93
[SCSI2SD.git] / software / SCSI2SD / SCSI2SD.cydsn / sd.h
1 //      Copyright (C) 2013 Michael McMaster <michael@codesrc.com>
2 //
3 //      This file is part of SCSI2SD.
4 //
5 //      SCSI2SD is free software: you can redistribute it and/or modify
6 //      it under the terms of the GNU General Public License as published by
7 //      the Free Software Foundation, either version 3 of the License, or
8 //      (at your option) any later version.
9 //
10 //      SCSI2SD is distributed in the hope that it will be useful,
11 //      but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //      GNU General Public License for more details.
14 //
15 //      You should have received a copy of the GNU General Public License
16 //      along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.
17 #ifndef SD_H
18 #define SD_H
19
20 typedef enum
21 {
22         SD_GO_IDLE_STATE = 0,
23         SD_SEND_OP_COND = 1,
24         SD_SEND_IF_COND = 8, // SD V2
25         SD_SEND_CSD = 9,
26         SD_STOP_TRANSMISSION = 12,
27         SD_SEND_STATUS = 13,
28         SD_SET_BLOCKLEN = 16,
29         SD_READ_MULTIPLE_BLOCK = 18,
30         SD_APP_SET_WR_BLK_ERASE_COUNT = 23,
31         SD_APP_SEND_OP_COND = 41,
32         SD_APP_CMD = 55,
33         SD_READ_OCR = 58,
34         SD_CRC_ON_OFF = 59
35 } SD_CMD;
36
37 typedef enum
38 {
39         SD_R1_IDLE = 1,
40         SD_R1_ERASE_RESET = 2,
41         SD_R1_ILLEGAL = 4,
42         SD_R1_CRC = 8,
43         SD_R1_ERASE_SEQ = 0x10,
44         SD_R1_ADDRESS = 0x20,
45         SD_R1_PARAMETER = 0x40
46 } SD_R1;
47
48 typedef struct
49 {
50         int version; // SDHC = version 2.
51         int ccs; // Card Capacity Status. 1 = SDHC or SDXC
52         uint32 capacity; // in 512 byte blocks
53 } SdDevice;
54
55 extern SdDevice sdDev;
56
57 int sdInit(void);
58 void sdPrepareWrite(void);
59 int sdWriteSector(void);
60 void sdCompleteWrite(void);
61
62 void sdPrepareRead(void);
63 void sdReadSector(void);
64 void sdCompleteRead(void);
65
66 #endif