Jump to content

    

EMMC 5.0 запись данных

Здравствуйте.

Имеется плата с плис spartan6 и micron 8SA17 JZ086, emmc 5.0, 64Gb, питание - 3.3V.

EMMC заведен в плис - clk, reset, cmd, data(8bit). Питание на микросхеме есть.

В плис реализован host emmc.

В железе при инициализации девайса делаю как в документации Embedded Multi-Media Card (e•MMC) Electrical Standard (5.0).

- подаю питание;

- подаю клок 400кГц;

- жду 1.1 мс;

- отправляю CMD0;

- жду 64 такта;

- отправляю CMD1 с аргументом 0xC0FF8080;

- получаю ответ с аргументом 0xC0FF8080 - ОК;

- отправляю CMD2 с аргументом 0x00000000;

- получаю ответ OK;

- отправляю CMD3 с аргументом 0x00000002;

- получаю ответ OK; поднимаю частоту до 25МГрц;

Далее отправляю CMD9, CMD7 - ответы положительные;

Далее конфигурирую CMD6 с аргументом 0x03B70200 - ответ положительный, и CMD6 с аргументом 0x03B90100 - ответ положительный, поднимаю частоту до 50МГрц;

Далее  CMD13 - конечный статус девайса - 0x00000900 - OK;

Далее пытаюсь записать один блок данных 512байт командой CMD25 c аргументом 0x00000000;

Ответа по шине CMD положительный, но после записи блока жду статуса CRC на DAT0,

статус не приходит, только сбрасывается в ноль DAT0 и все, статус девайса по прежнему 0x00000900...

 

Подскажите, может кто-нибудь в курсе в чем проблема? 

Благодарю.

Edited by Kostochkin

Share this post


Link to post
Share on other sites

Тема актуальна, вопрос так и не решил.

Кол-во байт для записи проверил, верно:

- 1 байт - стартовый(x00),

- 512 байт - данные,

- 16 байт - crc16,

- 1 байт - стоповый(xFF).

Проблема еще в том, что нет возможности подключиться осциллографом...

Благодарю.

Edited by Kostochkin

Share this post


Link to post
Share on other sites
3 hours ago, Kostochkin said:

 

 

А попробуйте после записи запросить число записанных блоков.

И еще, уходит ли mmc в состояние busy?

Share this post


Link to post
Share on other sites
21 hours ago, Viktuar said:

И еще, уходит ли mmc в состояние busy?

Ответ R1 на команду записи CMD25 приходит со статусом 0x00000900.

Ответ R1 на команду стоп CMD12 также приходит со статусом 0x00000900.

Как проверить состояние busy? Если по шине DAT0, то DAT0 сваливается в ноль, а статус CRC так и не приходит.

И как запросить число записанных блоков?

Благодарю.

 

Edited by Kostochkin

Share this post


Link to post
Share on other sites

Проблему так и не решил.

Девайс успешно прошел BUS TEST командами CMD19 и CMD14 с шириной шины данных 8 бит.

Получается конфигурация верная, шина работает, а crc token почему-то не приходит, после данных с командами CMD24 или CMD25.

Благодарю.

Share this post


Link to post
Share on other sites

Проблема решилась, дело было в схемотехнике.

У меня  другой вопрос о emmc.

Замерил время записи одного блока данных 512b в девайс. 

Это время оказалось примерно равно 100000 тактов в обычном режиме.

Почему так долго? Я нигде не нашел в документации, сколько времени занимает у девайса записать один блок.

Подскажите, 100000 тактов (при частоте 12мгц это примерно 8мс) это нормально для девайса emmc 5.0?

Замеряю время после получения токена crc, пока DAT0 в нуле.

Благодарю.

Edited by Kostochkin

Share this post


Link to post
Share on other sites
21 minutes ago, Kostochkin said:

Почему так долго?

Запись единичных блоков всегда неэффективна.

Share this post


Link to post
Share on other sites

А если записывать, допустим, 100 блоков, то это время будет меньше на каждый блок?

Share this post


Link to post
Share on other sites
12 minutes ago, aaarrr said:

Да, грубо говоря, получите те же 8 мс на 100 блоков.

Не понимаю.

Но я ведь жду готовности девайса после каждой записи одного блока. Блок записал, жду пока девайс запрограммируется, и опять блок записал, жду пока девайс запрограммируется... Как тогда это время может уменьшиться? Или я что-то не понимаю... Девайс же может и не знать кол-во записываемых блоков.

Edited by Kostochkin

Share this post


Link to post
Share on other sites

При записи группы блоков busy будет устанавливаться не после каждого, а раз в N блоков и в конце записи.

Share this post


Link to post
Share on other sites
23 minutes ago, aaarrr said:

Да, грубо говоря, получите те же 8 мс на 100 блоков.

Наверно вы правы, посмотрел внимательно документацию, ждать запрограммирования устройства надо только после последнего переданного блока.

Благодарю.

ps.jpg

Share this post


Link to post
Share on other sites

Записал 8 блоков командой CMD25, стартовый адрес = X"0100". после 1 блока, долго жду подъема DAT0 - эти же 100000 тактов, после остальных блоков, кроме последнего, DAT0 поднимается в течение 10 тактов... Пробовал задавать кол-во блоков командой CMD23, CMD25 - результат тот же.

Вопрос, почему после записи первого блока 512b девайс так долго занят?

Share this post


Link to post
Share on other sites
47 minutes ago, Kostochkin said:

Вопрос, почему после записи первого блока 512b девайс так долго занят?

Стиранием, например, занят. Вообще, тут полагаться на какую-то определенность в поведении нельзя - гарантируется только средняя скорость.

Share this post


Link to post
Share on other sites
22 hours ago, aaarrr said:

Стиранием, например, занят. Вообще, тут полагаться на какую-то определенность в поведении нельзя - гарантируется только средняя скорость.

Благодарю.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this