|
AM1808 MMC/SD Controller |
|
|
|
Oct 31 2014, 14:09
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(kolobok0 @ Oct 31 2014, 16:39)  идёт скидывание внутреннего кэша в физическую память. там вроде как тайминг до 200 ms может быть (если я по памяти назвал вам верные цифры, но порядок такой). Лучше загляните на uSD карточки доки, там вроде как пробегало. Если можно по-подробнее. Данные в фифо mmcsd-контроллера записываю при условии, что фифо не полон циклом. После записи последних 4-х байт жду DATDNE. И вот тут в большинстве случаев DATDNE устанавливается через ~1,2 мс, но иногда более чем через 400 мс. Как понимаю, тупит mmcsd-контроллер.
|
|
|
|
|
Nov 5 2014, 14:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Переделал алгоритм записи: Цитата 0) Проверяю состояние памяти и жду пока установится State Transfer (tran) 1) Отправляю команду SET_BLOCKLEN 2) Настраиваю фифо на передачу 3) Заполняю фифо до упора 4) Отправляю команду WRITE_BLOCK 5) При наличии в фифо свободного места записываю все остальные данные
6) Жду установки DATDNE в MMCST0 Получаю, что иногда долго висит на 0 пункте, т.е. состояние у памяти Programming State (prg). Вопрос - как это обойти? Что-то не совсем понимаю каким образом большой буфер спасёт ситуацию. Может есть ещё какой-то способ?
|
|
|
|
|
Nov 6 2014, 08:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Копейкин @ Nov 5 2014, 13:07)  Даже если писать потоком, последовательные сектора, то 1-2 паузы в самом начале присутствуют. Далее, вроде всё быстро. Хотел это попробовать, но при отправке команды CMD20 (WRITE_DAT_UNTIL_STOP) память вообще дохнет, не отвечает R1. Нашёл в доке, что команда должна работать только в режиме шины 1х, но и это не помогло. Цитата(kolobok0 @ Oct 31 2014, 16:39)  идёт скидывание внутреннего кэша в физическую память. там вроде как тайминг до 200 ms может быть Почему получаем разное время записи физической памяти? Один раз буфер 512 байт записывается во внутреннюю NAND за 1.5 мс, а иногда BUSY держится целых 500 мс?
|
|
|
|
|
Nov 6 2014, 11:48
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Я, года 3 назад, проводил такой эксперимент. 1) SD/SDHC или MMC пишу по одному сектору последовательные адреса, 100 секторов 2) пишу по 1 сектору произвольные сектора по псевдослучайной таблице адресов,тоже 100 секторов Так вот время записи отличается на порядки, не шучу. Точных значений не помню, но помню, что неприятно удивило. Потом в документации на SD прочитал, что нужно быть готовым к состоянию карты - занято - до ~700мс. Причины я выше приводил. Поэтому я всегда, где требовалась скорость, через SPI или SDIO писал строго последовательные адреса. И то, при первой записи, почти всегда есть занятость 300-600мс. Наблюдал осциллографом. Далее идет равномерно. Кстати, есть современные карточки, в которых не предусматривается алгоритм перемешивания блоков и горячей подстановки сбойных секторов. Их признак - они придназначены только для exFAT. В них не должно быть таких пауз.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|