ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
275574 Топик полностью
Гудвин, волшебник (29.09.2011 21:46, просмотров: 124) ответил koyodza на вроде 400кГц положено
Может быть и не 100 - лень вспоминать/думать ;) Проще было найти заведомо рабочий кусок кода (мега тактируется от встроенного генератора 8 МГц): /*-----------------------------------------------------------------------*/ /* Initialize Disk Drive */ /*-----------------------------------------------------------------------*/ DSTATUS disk_initialize ( BYTE drv /* Physical drive nmuber (0) */ ) { BYTE n, ty, ocr[16]; SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); /* Enable SPI, Master, set clock rate fck/16 */ SPSR = 0b00000000; /* SPI.clk = SYSCLK/4 */ if (drv) return STA_NOINIT; /* Supports only single drive */ for (n = 10; n; n--) rcvr_spi(); /* 80 dummy clocks */ SELECT(); /* CS = L */ ty = 0; if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */ Timer1 = 100; /* Initialization timeout of 1000 msec */ if (send_cmd(CMD8, 0x1AA) == 1) { /* SDC Ver2+ */ for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */ do { if (send_cmd(CMD55, 0) <= 1 && send_cmd(CMD41, 1UL << 30) == 0) break; /* ACMD41 with HCS bit */ } while (Timer1); if (Timer1 && send_cmd(CMD58, 0) == 0) { /* Check CCS bit */ for (n = 0; n < 4; n++) ocr[n] = rcvr_spi(); ty = (ocr[0] & 0x40) ? 6 : 2; } } } else { /* SDC Ver1 or MMC */ ty = (send_cmd(CMD55, 0) <= 1 && send_cmd(CMD41, 0) <= 1) ? 2 : 1; /* SDC : MMC */ do { if (ty == 2) { if (send_cmd(CMD55, 0) <= 1 && send_cmd(CMD41, 0) == 0) break; /* ACMD41 */ } else { if (send_cmd(CMD1, 0) == 0) break; /* CMD1 */ } } while (Timer1); if (!Timer1 || send_cmd(CMD16, 512) != 0) /* Select R/W block length */ ty = 0; } } CardType = ty; DESELECT(); /* CS = H */ rcvr_spi(); /* Idle (Release DO) */ if (ty) { /* Initialization succeded */ Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */ } SPCR = 0b01010000; /* Initialize SPI port (Mode 0) */ SPSR = 0b00000001; /* SPI.clk = SYSCLK/2 */ return Stat; }