mirror of
https://github.com/wiiu-env/libfat.git
synced 2024-11-26 11:54:13 +01:00
118 lines
4.2 KiB
C
118 lines
4.2 KiB
C
/*
|
|
io_sd_common.h
|
|
|
|
By chishm (Michael Chisholm)
|
|
|
|
Common SD card routines
|
|
|
|
SD routines partially based on sd.s by Romman
|
|
|
|
Copyright (c) 2006 Michael "Chishm" Chisholm
|
|
|
|
Redistribution and use in source and binary forms, with or without modification,
|
|
are permitted provided that the following conditions are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright notice,
|
|
this list of conditions and the following disclaimer.
|
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
this list of conditions and the following disclaimer in the documentation and/or
|
|
other materials provided with the distribution.
|
|
3. The name of the author may not be used to endorse or promote products derived
|
|
from this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
|
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
2006-07-11 - Chishm
|
|
* Original release
|
|
|
|
2006-07-28 - Chishm
|
|
* Changed voltage range that the SD card can use
|
|
|
|
2006-11-14 - Chishm
|
|
* Reduced voltage range again. Hopefully fixes MicroSD cards.
|
|
*/
|
|
|
|
#ifndef IO_SD_COMMON_H
|
|
#define IO_SD_COMMON_H
|
|
|
|
#include "../disc.h"
|
|
|
|
/* SD commands */
|
|
#define GO_IDLE_STATE 0
|
|
#define ALL_SEND_CID 2
|
|
#define SEND_RELATIVE_ADDR 3
|
|
#define SELECT_CARD 7
|
|
#define SEND_CSD 9
|
|
#define STOP_TRANSMISSION 12
|
|
#define SEND_STATUS 13
|
|
#define GO_INACTIVE_STATE 15
|
|
#define SET_BLOCKLEN 16
|
|
#define READ_SINGLE_BLOCK 17
|
|
#define READ_MULTIPLE_BLOCK 18
|
|
#define WRITE_BLOCK 24
|
|
#define WRITE_MULTIPLE_BLOCK 25
|
|
#define APP_CMD 55
|
|
|
|
/* SD App commands */
|
|
#define SET_BUS_WIDTH 6
|
|
#define SD_APP_OP_COND 41
|
|
|
|
/* OCR (Operating Conditions Register) send value */
|
|
#define SD_OCR_VALUE 0x00030000 /* 2.8V to 3.0V */
|
|
//#define SD_OCR_VALUE 0x003F8000 /* 2.7V to 3.4V */
|
|
//#define SD_OCR_VALUE 0x00FC0000
|
|
|
|
/* SD Data repsonses */
|
|
#define SD_CARD_BUSY 0xff
|
|
|
|
/* SD states */
|
|
#define SD_STATE_IDLE 0 // Idle state, after power on or GO_IDLE_STATE command
|
|
#define SD_STATE_READY 1 // Ready state, after card replies non-busy to SD_APP_OP_COND
|
|
#define SD_STATE_IDENT 2 // Identification state, after ALL_SEND_CID
|
|
#define SD_STATE_STBY 3 // Standby state, when card is deselected
|
|
#define SD_STATE_TRAN 4 // Transfer state, after card is selected and ready for data transfer
|
|
#define SD_STATE_DATA 5 //
|
|
#define SD_STATE_RCV 6 // Receive data state
|
|
#define SD_STATE_PRG 7 // Programming state
|
|
#define SD_STATE_DIS 8 // Disconnect state
|
|
#define SD_STATE_INA 9 // Inactive state, after GO_INACTIVE_STATE
|
|
|
|
#define READY_FOR_DATA 1 // bit 8 in card status
|
|
|
|
/*
|
|
Calculate the CRC7 of a command and return it preshifted with
|
|
an end bit added
|
|
*/
|
|
extern u8 _SD_CRC7(u8* data, int size);
|
|
|
|
/*
|
|
Calculate the CRC16 of a block of data, ready for transmission on
|
|
four data lines at once
|
|
*/
|
|
extern void _SD_CRC16 (u8* buff, int buffLength, u8* crc16buff);
|
|
|
|
typedef bool (*_SD_FN_CMD_6BYTE_RESPONSE) (u8* responseBuffer, u8 command, u32 data);
|
|
typedef bool (*_SD_FN_CMD_17BYTE_RESPONSE) (u8* responseBuffer, u8 command, u32 data);
|
|
|
|
/*
|
|
Initialise the SD card, after it has been sent into an Idle state
|
|
cmd_6byte_response: a pointer to a function that sends the SD card a command and gets a 6 byte response
|
|
cmd_17byte_response: a pointer to a function that sends the SD card a command and gets a 17 byte response
|
|
use4bitBus: initialise card to use a 4 bit data bus when communicating with the card
|
|
RCA: a pointer to the location to store the card's Relative Card Address, preshifted up by 16 bits.
|
|
*/
|
|
extern bool _SD_InitCard (_SD_FN_CMD_6BYTE_RESPONSE cmd_6byte_response,
|
|
_SD_FN_CMD_17BYTE_RESPONSE cmd_17byte_response,
|
|
bool use4bitBus,
|
|
u32 *RCA);
|
|
|
|
#endif // define IO_SD_COMMON_H
|