Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MMC (eMMC)
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
doom13
Парочку вопросов задавал тут, ответа не получил.
Проблема осталась, решил создать свою тему.

Есть микросхема N2M400FDB (eMMC флэш память 4 GB) совместимая с JEDEC/MMC standard v4.41.
Возникли вопросы по инициализации (идентификации eMMC) памяти.
Всё делаю согласно документации.
1) Устанавливаю тактовую частоту 400 кГц.
2) Далее отправляю команду GO_IDLE_STATE (CMD0). Память должна перейти в режим ожидания.
3) Отправляю SEND_OP_CMD (CMD1). В ответ должны получить R3.

В ответ на SEND_OP_CMD (CMD1) в регистре ответа вижу значение 0x00FF 8080. В даташите есть строки:
Цитата
the e•MMC devices shall respond with a fixed pattern of either 0x00FF 8080 (capacity less than or equal to 2GB) or 0x40FF 8080 (capacity greater than 2GB) if device is busy, and they shall not move into Inactive state.

Т.е. полученный ответ не соответствует объёму используемой флэш-памяти, почему???
Судя по ответу девайс находится в состоянии "бизи", что можно сделать, чтоб вывести его из этого состояния??? Как работать с памятью дальше при таком "epic fail"???
doom13
Нашёл решение проблемы, после GO_IDLE_STATE (CMD0) надо несколько раз посылать SEND_OP_CMD (CMD1) и ждать пока в ответе R3 в OCR флаг BUSY установится в 1.
Данный бит как-то непонятно работает, после перехода в состояние IDLE надо несколько раз послать SEND_OP_CMD (CMD1) (на второй раз даёт нормальный ответ с BUSY равным 1), чтобы получить ответ, что память готова. От времени, которое прошло после подачи питания он никак не зависит.
doom13
На рисунках показаны осциллограммы для шины данных eMMC (зелёный - DAT0, жёлтый - DAT3, фиолетовый - DAT7):
1) Bus mode - x1.
2) Bus mode - x4.
3) Bus mode - x8.
Во всех случаях записывается 512 байт, почему время записи для x4 и x8 получилось одинаковым?
doom13
Нашёл, что одинаковое время записи для x4 и х8 обусловлено работой MMC контроллера. DMA пока не использую, поэтому на время заполнения фифо данными на шине отсутствует тактирование (поправте, если что-то неправильно понимаю). На осциллограммах: жёлтый - CLK, зелёный - DAT0, голубой - DAT3, фиолетовый - DAT7.
1) Режим x4
2) Режим х8
doom13
Может быть кто подскажет, какую частоту CLK (для SDR) потянет память???
Характеристики памяти ниже, нужно пояснение, что означают параметры в таблице?
sergeystm32
Подскажите как задать контроллеру eMMC переход на 4bit BUS или 8 bit BUS

SDIO_CmdInitStructure.Argument = 0x03B70100;
SDIO_CmdInitStructure.CmdIndex = SDMMC_CMD_HS_SWITCH;
SDIO_CmdInitStructure.Response = SDMMC_RESPONSE_SHORT;
SDIO_CmdInitStructure.WaitForInterrupt = SDMMC_WAIT_NO;
SDIO_CmdInitStructure.CPSM = SDMMC_CPSM_ENABLE;

SDMMC_SendCommand(SDMMC1, &SDIO_CmdInitStructure);

Отправляю команду вот так, правильно ли это?
doom13
Как-то так было:
CODE

void EmmcMem::SetBusWidth(unsigned int width)
{
CardStatus status;
unsigned long arg;
MmcCmdReg cmdreg;

BusWidth(width);

switch(width)
{
case BUS_WIDTH_1X:
arg = 0x03B70000;
break;
case BUS_WIDTH_4X:
arg = 0x03B70100;
break;
case BUS_WIDTH_8X:
arg = 0x03B70200;
break;
default :
break;
}

status.all = GetStatus();
while((status.bit.CURRENT_STATE) != TRAN)
{
status.all = GetStatus();
}

cmdreg.all = 0;
cmdreg.bit.CMD = 6;
cmdreg.bit.RSPFMT = 1;
cmdreg.bit.BSYEXP = 1;

SendCmd(cmdreg, arg);

Resp_R1();

while(BusyDetected())
;
}
sergeystm32
CMD7 перехожу в Transfer State
CMD6 c arg=0x03B90100; для перехода на более высокую тактовую
CMD6 c arg=0x03B70100; для включения шины в 4bit
SD_Init4bit24mhz(); настраиваю sdio в stm32 на 4bit bus и 24МГц
CMD25 WRITE_MULT_BLOCK
и теперь смотрю на d0-d3 осциллографом но ничего нет(

в чем может быть ошибка? чего не хватает?
Viktuar
Цитата(sergeystm32 @ Aug 9 2018, 09:21) *
CMD7 перехожу в Transfer State
CMD6 c arg=0x03B90100; для перехода на более высокую тактовую
CMD6 c arg=0x03B70100; для включения шины в 4bit
SD_Init4bit24mhz(); настраиваю sdio в stm32 на 4bit bus и 24МГц
CMD25 WRITE_MULT_BLOCK
и теперь смотрю на d0-d3 осциллографом но ничего нет(

в чем может быть ошибка? чего не хватает?

Может не хватает самих данных biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.