📄 sdio.c
字号:
#include "c8051f310.h"
#include "SDIO.h"
unsigned char CMD_R[6]={0,0};
unsigned char OCR_REG[3]={0xff,0xc0,0xff}; //operation condition reg:2.7-3.6V
unsigned char RCA_REG[2]={0x00,0x01};
unsigned char Buffer_send[10]={0x00,0x00};
unsigned char Data_Receive[10]={0x00,0x00};
unsigned char Data_Send[10]={0x00};
unsigned short crc_16_result;
unsigned char Uart_Reg_IIR;
unsigned char Uart_Reg_Rv_Count;
unsigned char Int_Pending;
unsigned char CRC7_CAL;
unsigned char Adc_X,Adc_Y;
unsigned char Slave_Mode,Slave_state;
unsigned int Reg_address;
unsigned char Ini_Flag;
unsigned char Ini_Ready;
unsigned char index;
unsigned char Data_index;
unsigned char timer_index;
unsigned char debug_info;
unsigned char Acc_Request_Flag;
#define Inactive_State 0x00;
#define Initialization_State 0x01;
#define Standby_State 0x02;
#define Command_State 0x03;
#define Transfer_State 0x04;
#define CRC7_POLYNOMIAL 0x89
/*unsigned char code CRC16_CMD53[512]={0x0,0x0,0x10,0x21,0x20,0x42,0x30,0x63,0x40,0x84,0x50,0xa5,0x60,0xc6,0x70,0xe7,
0x81,0x8,0x91,0x29,0xa1,0x4a,0xb1,0x6b,0xc1,0x8c,0xd1,0xad,0xe1,0xce,0xf1,0xef,
0x12,0x31,0x2,0x10,0x32,0x73,0x22,0x52,0x52,0xb5,0x42,0x94,0x72,0xf7,0x62,0xd6,
0x93,0x39,0x83,0x18,0xb3,0x7b,0xa3,0x5a,0xd3,0xbd,0xc3,0x9c,0xf3,0xff,0xe3,0xde,
0x24,0x62,0x34,0x43,0x4,0x20,0x14,0x1,0x64,0xe6,0x74,0xc7,0x44,0xa4,0x54,0x85,
0xa5,0x6a,0xb5,0x4b,0x85,0x28,0x95,0x9,0xe5,0xee,0xf5,0xcf,0xc5,0xac,0xd5,0x8d,
0x36,0x53,0x26,0x72,0x16,0x11,0x6,0x30,0x76,0xd7,0x66,0xf6,0x56,0x95,0x46,0xb4,
0xb7,0x5b,0xa7,0x7a,0x97,0x19,0x87,0x38,0xf7,0xdf,0xe7,0xfe,0xd7,0x9d,0xc7,0xbc,
0x48,0xc4,0x58,0xe5,0x68,0x86,0x78,0xa7,0x8,0x40,0x18,0x61,0x28,0x2,0x38,0x23,
0xc9,0xcc,0xd9,0xed,0xe9,0x8e,0xf9,0xaf,0x89,0x48,0x99,0x69,0xa9,0xa,0xb9,0x2b,
0x5a,0xf5,0x4a,0xd4,0x7a,0xb7,0x6a,0x96,0x1a,0x71,0xa,0x50,0x3a,0x33,0x2a,0x12,
0xdb,0xfd,0xcb,0xdc,0xfb,0xbf,0xeb,0x9e,0x9b,0x79,0x8b,0x58,0xbb,0x3b,0xab,0x1a,
0x6c,0xa6,0x7c,0x87,0x4c,0xe4,0x5c,0xc5,0x2c,0x22,0x3c,0x3,0xc,0x60,0x1c,0x41,
0xed,0xae,0xfd,0x8f,0xcd,0xec,0xdd,0xcd,0xad,0x2a,0xbd,0xb,0x8d,0x68,0x9d,0x49,
0x7e,0x97,0x6e,0xb6,0x5e,0xd5,0x4e,0xf4,0x3e,0x13,0x2e,0x32,0x1e,0x51,0xe,0x70,
0xff,0x9f,0xef,0xbe,0xdf,0xdd,0xcf,0xfc,0xbf,0x1b,0xaf,0x3a,0x9f,0x59,0x8f,0x78,
0x91,0x88,0x81,0xa9,0xb1,0xca,0xa1,0xeb,0xd1,0xc,0xc1,0x2d,0xf1,0x4e,0xe1,0x6f,
0x10,0x80,0x0,0xa1,0x30,0xc2,0x20,0xe3,0x50,0x4,0x40,0x25,0x70,0x46,0x60,0x67,
0x83,0xb9,0x93,0x98,0xa3,0xfb,0xb3,0xda,0xc3,0x3d,0xd3,0x1c,0xe3,0x7f,0xf3,0x5e,
0x2,0xb1,0x12,0x90,0x22,0xf3,0x32,0xd2,0x42,0x35,0x52,0x14,0x62,0x77,0x72,0x56,
0xb5,0xea,0xa5,0xcb,0x95,0xa8,0x85,0x89,0xf5,0x6e,0xe5,0x4f,0xd5,0x2c,0xc5,0xd,
0x34,0xe2,0x24,0xc3,0x14,0xa0,0x4,0x81,0x74,0x66,0x64,0x47,0x54,0x24,0x44,0x5,
0xa7,0xdb,0xb7,0xfa,0x87,0x99,0x97,0xb8,0xe7,0x5f,0xf7,0x7e,0xc7,0x1d,0xd7,0x3c,
0x26,0xd3,0x36,0xf2,0x6,0x91,0x16,0xb0,0x66,0x57,0x76,0x76,0x46,0x15,0x56,0x34,
0xd9,0x4c,0xc9,0x6d,0xf9,0xe,0xe9,0x2f,0x99,0xc8,0x89,0xe9,0xb9,0x8a,0xa9,0xab,
0x58,0x44,0x48,0x65,0x78,0x6,0x68,0x27,0x18,0xc0,0x8,0xe1,0x38,0x82,0x28,0xa3,
0xcb,0x7d,0xdb,0x5c,0xeb,0x3f,0xfb,0x1e,0x8b,0xf9,0x9b,0xd8,0xab,0xbb,0xbb,0x9a,
0x4a,0x75,0x5a,0x54,0x6a,0x37,0x7a,0x16,0xa,0xf1,0x1a,0xd0,0x2a,0xb3,0x3a,0x92,
0xfd,0x2e,0xed,0xf,0xdd,0x6c,0xcd,0x4d,0xbd,0xaa,0xad,0x8b,0x9d,0xe8,0x8d,0xc9,
0x7c,0x26,0x6c,0x7,0x5c,0x64,0x4c,0x45,0x3c,0xa2,0x2c,0x83,0x1c,0xe0,0xc,0xc1,
0xef,0x1f,0xff,0x3e,0xcf,0x5d,0xdf,0x7c,0xaf,0x9b,0xbf,0xba,0x8f,0xd9,0x9f,0xf8,
0x6e,0x17,0x7e,0x36,0x4e,0x55,0x5e,0x74,0x2e,0x93,0x3e,0xb2,0xe,0xd1,0x1e,0xf0};*/
/*unsigned char code crc7_syndrome_table[256]={0x00,0x09,0x12,0x1b,0x24,0x2d,0x36,0x3f,
0x48,0x41,0x5a,0x53,0x6c,0x65,0x7e,0x77,
0x19,0x10,0x0b,0x02,0x3d,0x34,0x2f,0x26,
0x51,0x58,0x43,0x4a,0x75,0x7c,0x67,0x6e,
0x32,0x3b,0x20,0x29,0x16,0x1f,0x04,0x0d,
0x7a,0x73,0x68,0x61,0x5e,0x57,0x4c,0x45,
0x2b,0x22,0x39,0x30,0x0f,0x06,0x1d,0x14,
0x63,0x6a,0x71,0x78,0x47,0x4e,0x55,0x5c,
0x64,0x6d,0x76,0x7f,0x40,0x49,0x52,0x5b,
0x2c,0x25,0x3e,0x37,0x08,0x01,0x1a,0x13,
0x7d,0x74,0x6f,0x66,0x59,0x50,0x4b,0x42,
0x35,0x3c,0x27,0x2e,0x11,0x18,0x03,0x0a,
0x56,0x5f,0x44,0x4d,0x72,0x7b,0x60,0x69,
0x1e,0x17,0x0c,0x05,0x3a,0x33,0x28,0x21,
0x4f,0x46,0x5d,0x54,0x6b,0x62,0x79,0x70,
0x07,0x0e,0x15,0x1c,0x23,0x2a,0x31,0x38,
0x41,0x48,0x53,0x5a,0x65,0x6c,0x77,0x7e,
0x09,0x00,0x1b,0x12,0x2d,0x24,0x3f,0x36,
0x58,0x51,0x4a,0x43,0x7c,0x75,0x6e,0x67,
0x10,0x19,0x02,0x0b,0x34,0x3d,0x26,0x2f,
0x73,0x7a,0x61,0x68,0x57,0x5e,0x45,0x4c,
0x3b,0x32,0x29,0x20,0x1f,0x16,0x0d,0x04,
0x6a,0x63,0x78,0x71,0x4e,0x47,0x5c,0x55,
0x22,0x2b,0x30,0x39,0x06,0x0f,0x14,0x1d,
0x25,0x2c,0x37,0x3e,0x01,0x08,0x13,0x1a,
0x6d,0x64,0x7f,0x76,0x49,0x40,0x5b,0x52,
0x3c,0x35,0x2e,0x27,0x18,0x11,0x0a,0x03,
0x74,0x7d,0x66,0x6f,0x50,0x59,0x42,0x4b,
0x17,0x1e,0x05,0x0c,0x33,0x3a,0x21,0x28,
0x5f,0x56,0x4d,0x44,0x7b,0x72,0x69,0x60,
0x0e,0x07,0x1c,0x15,0x2a,0x23,0x38,0x31,
0x46,0x4f,0x54,0x5d,0x62,0x6b,0x70,0x79};*/
static unsigned short code crc16_table[256] = {
0X0000U, 0X1021U, 0X2042U, 0X3063U, 0X4084U, 0X50A5U, 0X60C6U, 0X70E7U,
0X8108U, 0X9129U, 0XA14AU, 0XB16BU, 0XC18CU, 0XD1ADU, 0XE1CEU, 0XF1EFU,
0X1231U, 0X0210U, 0X3273U, 0X2252U, 0X52B5U, 0X4294U, 0X72F7U, 0X62D6U,
0X9339U, 0X8318U, 0XB37BU, 0XA35AU, 0XD3BDU, 0XC39CU, 0XF3FFU, 0XE3DEU,
0X2462U, 0X3443U, 0X0420U, 0X1401U, 0X64E6U, 0X74C7U, 0X44A4U, 0X5485U,
0XA56AU, 0XB54BU, 0X8528U, 0X9509U, 0XE5EEU, 0XF5CFU, 0XC5ACU, 0XD58DU,
0X3653U, 0X2672U, 0X1611U, 0X0630U, 0X76D7U, 0X66F6U, 0X5695U, 0X46B4U,
0XB75BU, 0XA77AU, 0X9719U, 0X8738U, 0XF7DFU, 0XE7FEU, 0XD79DU, 0XC7BCU,
0X48C4U, 0X58E5U, 0X6886U, 0X78A7U, 0X0840U, 0X1861U, 0X2802U, 0X3823U,
0XC9CCU, 0XD9EDU, 0XE98EU, 0XF9AFU, 0X8948U, 0X9969U, 0XA90AU, 0XB92BU,
0X5AF5U, 0X4AD4U, 0X7AB7U, 0X6A96U, 0X1A71U, 0X0A50U, 0X3A33U, 0X2A12U,
0XDBFDU, 0XCBDCU, 0XFBBFU, 0XEB9EU, 0X9B79U, 0X8B58U, 0XBB3BU, 0XAB1AU,
0X6CA6U, 0X7C87U, 0X4CE4U, 0X5CC5U, 0X2C22U, 0X3C03U, 0X0C60U, 0X1C41U,
0XEDAEU, 0XFD8FU, 0XCDECU, 0XDDCDU, 0XAD2AU, 0XBD0BU, 0X8D68U, 0X9D49U,
0X7E97U, 0X6EB6U, 0X5ED5U, 0X4EF4U, 0X3E13U, 0X2E32U, 0X1E51U, 0X0E70U,
0XFF9FU, 0XEFBEU, 0XDFDDU, 0XCFFCU, 0XBF1BU, 0XAF3AU, 0X9F59U, 0X8F78U,
0X9188U, 0X81A9U, 0XB1CAU, 0XA1EBU, 0XD10CU, 0XC12DU, 0XF14EU, 0XE16FU,
0X1080U, 0X00A1U, 0X30C2U, 0X20E3U, 0X5004U, 0X4025U, 0X7046U, 0X6067U,
0X83B9U, 0X9398U, 0XA3FBU, 0XB3DAU, 0XC33DU, 0XD31CU, 0XE37FU, 0XF35EU,
0X02B1U, 0X1290U, 0X22F3U, 0X32D2U, 0X4235U, 0X5214U, 0X6277U, 0X7256U,
0XB5EAU, 0XA5CBU, 0X95A8U, 0X8589U, 0XF56EU, 0XE54FU, 0XD52CU, 0XC50DU,
0X34E2U, 0X24C3U, 0X14A0U, 0X0481U, 0X7466U, 0X6447U, 0X5424U, 0X4405U,
0XA7DBU, 0XB7FAU, 0X8799U, 0X97B8U, 0XE75FU, 0XF77EU, 0XC71DU, 0XD73CU,
0X26D3U, 0X36F2U, 0X0691U, 0X16B0U, 0X6657U, 0X7676U, 0X4615U, 0X5634U,
0XD94CU, 0XC96DU, 0XF90EU, 0XE92FU, 0X99C8U, 0X89E9U, 0XB98AU, 0XA9ABU,
0X5844U, 0X4865U, 0X7806U, 0X6827U, 0X18C0U, 0X08E1U, 0X3882U, 0X28A3U,
0XCB7DU, 0XDB5CU, 0XEB3FU, 0XFB1EU, 0X8BF9U, 0X9BD8U, 0XABBBU, 0XBB9AU,
0X4A75U, 0X5A54U, 0X6A37U, 0X7A16U, 0X0AF1U, 0X1AD0U, 0X2AB3U, 0X3A92U,
0XFD2EU, 0XED0FU, 0XDD6CU, 0XCD4DU, 0XBDAAU, 0XAD8BU, 0X9DE8U, 0X8DC9U,
0X7C26U, 0X6C07U, 0X5C64U, 0X4C45U, 0X3CA2U, 0X2C83U, 0X1CE0U, 0X0CC1U,
0XEF1FU, 0XFF3EU, 0XCF5DU, 0XDF7CU, 0XAF9BU, 0XBFBAU, 0X8FD9U, 0X9FF8U,
0X6E17U, 0X7E36U, 0X4E55U, 0X5E74U, 0X2E93U, 0X3EB2U, 0X0ED1U, 0X1EF0U
};
unsigned char code crc7_CMD52[256]={0xa1,0xb3,0x85,0x97,0xe9,0xfb,0xcd,0xdf,
0x31,0x23,0x15,0x07,0x79,0x6b,0x5d,0x4f,
0x93,0x81,0xb7,0xa5,0xdb,0xc9,0xff,0xed,
0x03,0x11,0x27,0x35,0x4b,0x59,0x6f,0x7d,
0xc5,0xd7,0xe1,0xf3,0x8d,0x9f,0xa9,0xbb,
0x55,0x47,0x71,0x63,0x1d,0x0f,0x39,0x2b,
0xf7,0xe5,0xd3,0xc1,0xbf,0xad,0x9b,0x89,
0x67,0x75,0x43,0x51,0x2f,0x3d,0x0b,0x19,
0x69,0x7b,0x4d,0x5f,0x21,0x33,0x05,0x17,
0xf9,0xeb,0xdd,0xcf,0xb1,0xa3,0x95,0x87,
0x5b,0x49,0x7f,0x6d,0x13,0x01,0x37,0x25,
0xcb,0xd9,0xef,0xfd,0x83,0x91,0xa7,0xb5,
0x0d,0x1f,0x29,0x3b,0x45,0x57,0x61,0x73,
0x9d,0x8f,0xb9,0xab,0xd5,0xc7,0xf1,0xe3,
0x3f,0x2d,0x1b,0x09,0x77,0x65,0x53,0x41,
0xaf,0xbd,0x8b,0x99,0xe7,0xf5,0xc3,0xd1,
0x23,0x31,0x70,0x15,0x6b,0x79,0x4f,0x5d,
0xb3,0xa1,0x97,0x85,0xfb,0xe9,0xdf,0xcd,
0x11,0x03,0x35,0x27,0x59,0x4b,0x7d,0x6f,
0x81,0x93,0xa5,0xb7,0xc9,0xdb,0xed,0xff,
0x47,0x55,0x63,0x71,0x0f,0x1d,0x2b,0x39,
0xd7,0xc5,0xf3,0xe1,0x9f,0x8d,0xbb,0xa9,
0x75,0x67,0x51,0x43,0x3d,0x2f,0x19,0x0b,
0xe5,0xf7,0xc1,0xd3,0xad,0xbf,0x89,0x9b,
0xeb,0xf9,0xcf,0xdd,0xa3,0xb1,0x87,0x95,
0x7b,0x69,0x5f,0x4d,0x33,0x21,0x17,0x05,
0xd9,0xcb,0xfd,0xef,0x91,0x83,0xb5,0xa7,
0x49,0x5b,0x6d,0x7f,0x01,0x13,0x25,0x37,
0x8f,0x9d,0xab,0xb9,0xc7,0xd5,0xe3,0xf1,
0x1f,0x0d,0x3b,0x29,0x57,0x45,0x73,0x61,
0xbd,0xaf,0x99,0x8b,0xf5,0xe7,0xd1,0xc3,
0x2d,0x3f,0x09,0x1b,0x65,0x77,0x41,0x53};
unsigned char code crc7_CMD53[256]={0xcd,0xdf,0xe9,0xfb,0x85,0x97,0xa1,0xb3,
0x5d,0x4f,0x79,0x6b,0x15,0x7,0x31,0x23,
0xff,0xed,0xdb,0xc9,0xb7,0xa5,0x93,0x81,
0x6f,0x7d,0x4b,0x59,0x27,0x35,0x3,0x11,
0xa9,0xbb,0x8d,0x9f,0xe1,0xf3,0xc5,0xd7,
0x39,0x2b,0x1d,0xf,0x71,0x63,0x55,0x47,
0x9b,0x89,0xbf,0xad,0xd3,0xc1,0xf7,0xe5,
0xb,0x19,0x2f,0x3d,0x43,0x51,0x67,0x75,
0x5,0x17,0x21,0x33,0x4d,0x5f,0x69,0x7b,
0x95,0x87,0xb1,0xa3,0xdd,0xcf,0xf9,0xeb,
0x37,0x25,0x13,0x1,0x7f,0x6d,0x5b,0x49,
0xa7,0xb5,0x83,0x91,0xef,0xfd,0xcb,0xd9,
0x61,0x73,0x45,0x57,0x29,0x3b,0xd,0x1f,
0xf1,0xe3,0xd5,0xc7,0xb9,0xab,0x9d,0x8f,
0x53,0x41,0x77,0x65,0x1b,0x9,0x3f,0x2d,
0xc3,0xd1,0xe7,0xf5,0x8b,0x99,0xaf,0xbd,
0x4f,0x5d,0x6b,0x79,0x7,0x15,0x23,0x31,
0xdf,0xcd,0xfb,0xe9,0x97,0x85,0xb3,0xa1,
0x7d,0x6f,0x59,0x4b,0x35,0x27,0x11,0x3,
0xed,0xff,0xc9,0xdb,0xa5,0xb7,0x81,0x93,
0x2b,0x39,0xf,0x1d,0x63,0x71,0x47,0x55,
0xbb,0xa9,0x9f,0x8d,0xf3,0xe1,0xd7,0xc5,
0x19,0xb,0x3d,0x2f,0x51,0x43,0x75,0x67,
0x89,0x9b,0xad,0xbf,0xc1,0xd3,0xe5,0xf7,
0x87,0x95,0xa3,0xb1,0xcf,0xdd,0xeb,0xf9,
0x17,0x5,0x33,0x21,0x5f,0x4d,0x7b,0x69,
0xb5,0xa7,0x91,0x83,0xfd,0xef,0xd9,0xcb,
0x25,0x37,0x1,0x13,0x6d,0x7f,0x49,0x5b,
0xe3,0xf1,0xc7,0xd5,0xab,0xb9,0x8f,0x9d,
0x73,0x61,0x57,0x45,0x3b,0x29,0x1f,0xd,
0xd1,0xc3,0xf5,0xe7,0x99,0x8b,0xbd,0xaf};
void delay_us(unsigned int time_count)
{
do
{
time_count--;
}
while (time_count>1);
}
void delay_s(unsigned int time_count)
{
unsigned int i;
for( i=0;i<time_count;time_count++)
delay_us(30);
}
void Oscillator_Init(void)
{
OSCICL=0x08; //Internal Oscillator programme to 24MHz.
OSCICN=0xC3; //Enable Internal oscilator and set dividor to 1
}
void Watchdog_close(void)
{
PCA0MD&=~0X40; //COSE WATCHDOG
}
void IO_Init(void)
{
P2MDOUT=0x08; //Config P2.0-P2.3(CLK,CMD,DATA0,led) as push_pull
P1MDOUT=0x00;
XBR1=0x60; //Crossbar enabled
P1MDIN&=~0x30;
Uart_Reg_Rv_Count=0;
Int_Pending=0;
Uart_Reg_IIR=0;
Data_index=0;
Acc_Request_Flag=0;
}
void ADC_Init(void)
{
AMX0P=0x04; //P1.5 x_axis
AMX0N=0x1F; //GND(ADC in single-ended mode)
ADC0CN=0xC0;
ADC0CF=0x38; //Right ajusted
REF0CN=0x0A; // Vdd used as voltage reference, internal temperature sensor off
}
void Interrupts_Init()
{
IE=0xA0; //Enabled T2 interrupt enabled all
}
void ADC(void)
{
AMX0P=0x05;
AD0BUSY=0X01;
while(AD0BUSY);
AD0BUSY=0X01;
while(AD0BUSY);
Data_Send[0]=ADC0H;
Data_Send[1]=ADC0L;
AMX0P=0x04;
AD0BUSY=0X01;
while(AD0BUSY);
AD0BUSY=0X01;
while(AD0BUSY);
Data_Send[2]=ADC0H;
Data_Send[3]=ADC0L;
}
void Timer_Init(void)
{
TMR2CN =0x04; //Timer2 enabled, clock is the system clock divided by 12
TMR2RLL=0x00;
TMR2RLH=0xc0;
TMR2L =0x00;
TMR2H =0xc0;
timer_index=0;
}
void Timer2_ISR (void) interrupt 5 using 1
{
//IE=0;
TMR2CN&=0x7F; // clear inturrupt overflow flag
//if(++timer_index==1)
//{
// timer_index=0;
SD_BUSY_LED^=1;
//SD_BUSY_LED=0;
//}
ADC();
}
unsigned char Read_Byte_SD(void) //MCU Data READ
{
unsigned char temp=0;
unsigned char i;
for (i=0; i<8; i++) //MSB First
{
while(SD_CLK_PIN==1) ; //WAITING Clock Impuls (Low)
temp=(temp<<1)|SD_DATA0_PIN; //read data from master
while(SD_CLK_PIN==0); //WAITING Clock Impuls (LOW)
}
return (temp);
}
unsigned char code mask[8]={0x80,0x40,0x20,0x10,8,4,2,1};
void Write_Res_SD_CMD53(unsigned char value1,unsigned char value2) //MCU CMD WRITE
{
unsigned char i;
for (i=0; i<8; i++)
{
while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
if((value1 & mask[i])!=0)
SD_CMD_PIN=1;
else SD_CMD_PIN=0;
if((value2 & mask[i])!=0)
SD_DATA0_PIN=1;
else SD_DATA0_PIN=0;
while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
}
}
void Write_Byte_SD(unsigned char value) //MCU Data WRITE
{
unsigned char i;
for (i=0; i<8; i++)
{
while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
if((value & mask[i])!=0)
SD_DATA0_PIN=1; //Send bit by bit(MSB First)
else SD_DATA0_PIN=0;
while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
}
}
void Write_Res_SD(unsigned char value) //MCU CMD WRITE
{
unsigned char i;
for (i=0; i<8; i++)
{
while(SD_CLK_PIN==0); //WAITING Clock Impuls (Low)
if((value&mask[i])!=0)
SD_CMD_PIN=1; //Send bit by bit(MSB First)
else SD_CMD_PIN=0;
while(SD_CLK_PIN==1); //WAITING Clock Impuls (High)
}
}
unsigned char Read_CMD_SD(void) //MCU CMD READ
{
unsigned char temp=0;
unsigned char i;
for (i=0; i<8; i++) //MSB First
{
while(SD_CLK_PIN==1) ; //WAITING Clock Impuls (Low)
temp=(temp<<1)|SD_CMD_PIN; //read data from master
while(SD_CLK_PIN==0); //WAITING Clock Impuls (High)
}
return (temp);
}
unsigned char CRC7(unsigned char * chr, int cnt)
{
unsigned int i,a;
unsigned char crc_7,Data;
crc_7=0;
for(a=0;a<cnt;a++)
{
Data=chr[a];
for (i=0;i<8;i++)
{
crc_7<<=1;
if((Data&0x80)^(crc_7&0x80))
crc_7^=0x09;
Data <<=1;
}
}
crc_7=(crc_7<<1)|1;
return(crc_7);
}
//ITU-T V.41
//x^16 + x^12 + x^15 + 1
unsigned short
sp_crc16(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -