реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Висяк ММС
zorromen
сообщение Apr 19 2007, 13:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Привет всем ... Зафигачил тут карту ММС ... Все хорошо, при обращении к конкретному адрессу и прочесть 512 байт все работает ... Если читать уже не один сектор, а несколько подряд, то уже на примерно 10 прочтении висяк while(SPI(0xff)!=0xFE); нема ответа 0xFE он че заснул чтоли?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Apr 19 2007, 17:21
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zorromen @ Apr 19 2007, 14:49) *
Привет всем ... Зафигачил тут карту ММС ... Все хорошо, при обращении к конкретному адрессу и прочесть 512 байт все работает ... Если читать уже не один сектор, а несколько подряд, то уже на примерно 10 прочтении висяк while(SPI(0xff)!=0xFE); нема ответа 0xFE он че заснул чтоли?

Вот эта конструкция не очень понятна SPI(0xff)!=0xFE

Скорее всего он не заснул а перешел в slave

У Вас SS сконфигурирован на вход или на выход ?
если на вход, подтяжка есть ?
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Apr 19 2007, 18:50
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(singlskv @ Apr 19 2007, 17:21) *
Вот эта конструкция не очень понятна SPI(0xff)!=0xFE

Скорее всего он не заснул а перешел в slave

У Вас SS сконфигурирован на вход или на выход ?
если на вход, подтяжка есть ?


SS лучше управлять вручную, так надежнее.
Попробуй этот кусок, у меня работает нормально.
Прикрепленные файлы
Прикрепленный файл  mmc2.zip ( 677 байт ) Кол-во скачиваний: 154
 
Go to the top of the page
 
+Quote Post
zorromen
сообщение Apr 19 2007, 18:52
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Извеняюсь за плохо выложенную проблемму... Значить так ... весит у меня на СПИ Экран и флешка ...
Еще я обнаружил интересны факт если отправить команду на блок 512 байт ... и потом читатьс адресса кратному 512 байт 0x200 все читается... если в адресс некратен то ваще не присылает ... ладно я и так читаю блоками в 512 байт ... тока если прочесть подрят гдето 10 блоков то карточка в недает ответ 0xFE начало блока данных... так я и думаю что он мож спит иль че ... Контроллер у меня мастер и молько мастер .. SS соответственно на выход ... тут точно карта глючить ... проверено та плате без экрана...
Go to the top of the page
 
+Quote Post
zorromen
сообщение Apr 22 2007, 15:21
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Скажите какие особенности при работе с Картой вам встричалить ... и какие нужно учитывать для нормальной безпроблеммной работы с картой ...
Go to the top of the page
 
+Quote Post
Max_Shaman
сообщение Apr 22 2007, 16:01
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 21-04-07
Из: Odessa
Пользователь №: 27 227



На сайте самсунга есть полная документация MMC стандарта как в работе по SPI так и в MMC режимах.

Спецификация гласит что так называемый TOKEN "синхронизирующий бит начала передачи", может появляться в любой момент тактов ожидания ответа, то-есть он может быть не кратен 8-ми циклам.
Решение проблемы: надо отлавливаить не код "FE" , а всего-лишь первый нулевой бит, и по нему уже синхронизироваться, он может появляется в любое время а не так как вы его ожидаете.
Я в интернете на зарубежных форумнаходил исходники с подобным неправильным способом работы с карточкой и так-же жалобы на неспособность работы некоторых карточек от некоторых производителей.
Поэтому пришлось написать полность свои функции. С обработкой токенов-ответов на разные там ошибки карты. Карточки с которыми я работал вот такие: APACER 512Mb, Kingston 1G, Transced 2G и пару каких-то неизвестных ( 5 вольтовых )производителей. И никаких проблем.
Написал функции обработки информационных структур (CCD, SCD - по моему их так зовут), для определения размерности карты и максимального рабочего пакета, без обработки этих структур в которых присутствует информация о максимальных размерах: входном пакете записи и пакете чтения.
Так же перед работой карточки надо установить командами размерность пакета, это как за правило.
Еще, можно пересекать границы адресов, но только не адресов которые кратны максимально заявленного размера блока передачи текущей карты.

Я думаю Вам надо переписать код, для того чтобы синхронизировать работу вашего SPI в микроконтролере Вы должны написать чисто програмный отлавливатель первого нулевого бита. Тогда у Вас не будут проблемы с несовместимостью Вашего устройства с карточками.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Apr 22 2007, 18:20
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Тогда получается если 0 бит будет в середине(апаратный SPI) допустим 4й бит, то все данные за ним нужно подвинуть на 4 влево? Тогда и вправду нада програмный SPI ...
Go to the top of the page
 
+Quote Post
Max_Shaman
сообщение Apr 25 2007, 05:10
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 21-04-07
Из: Odessa
Пользователь №: 27 227



Однозначно.
Почитай мануал с самсунга, поймешь что я не шучу.
Там есть так называемый на графиках обмена, период ожидания ( Ncr ) - и может принимать значение от 1 до 8, но обычное заявленное значение равно 8. В других мануалах максимальное значение и того больше.
И самое главное, обязательно: если будешь применять команды записи или чтения, то предварительно примени команду SET_BLOCKLEN (она же CMD16), с параметром удобного для тебя размером блока, но не больше заявленого в CSD.WRITE_BLK_LEN. И при чтении не пересекай адреса через границы кратные размерности CSD.WRITE_BLK_LEN или CSD.READ_BL_LEN.
Привет студентам. blink.gif
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Apr 25 2007, 11:22
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(Max_Shaman @ Apr 25 2007, 05:10) *
Однозначно.
Почитай мануал с самсунга, поймешь что я не шучу.
Там есть так называемый на графиках обмена, период ожидания ( Ncr ) - и может принимать значение от 1 до 8, но обычное заявленное значение равно 8. В других мануалах максимальное значение и того больше.

Не пугайте людей, в spi все что происходит должно быть кратно 8 битам, иначе это уже не spi.

while(((r1 = mmc_spi(0xff)) & 0x80) && --retry); // wait for response
return r1; // if more than 8 retries, card has timed-out
это ожидание после посылки команды, никаких сдвигов.
почитайте вложение в мой предыдущий пост, перепробовано на 20 разных карточках.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Apr 25 2007, 11:34
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Ну често сказать то я больше согласен с товарищем Max_Shaman на счет того что начало блока данных т.е. бит 0 мож выскочить где попало ... а согласен потому, что когда у меня висяк, то 0 был уже не 0-м битом а 1-м ... так я думаю что и вправду нада программный SPI ему ... это первое, и сразу созрел у меня еще вопрос ... на счет скорости чтения ... вот посмотрим тесты чтения с разных карточек и у всех она разная ... вот как это понимать ... ведь когда мы читаем из карточкм то скоростью клока определяется скорость чтения данных из нее ... вот если напримен 8Мгц клок это уже 1мегабайт у сек ... но карточка по тестам допустим неможет так быстро читать ... короче если без этой воды ... что определяет скорость чтения из карточки ... ведь есть же разница между карточками ...
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Apr 26 2007, 16:32
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



С программным spi нормальную скорость уже не получите smile.gif
А скорость разная потому что после посылки команды "чтение сектора" карточка отвечает кодом MMC_STARTBLOCK_READ (0xFE) не сразу и эта задержка у всех разная.
Go to the top of the page
 
+Quote Post
Max_Shaman
сообщение Apr 26 2007, 20:05
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 21-04-07
Из: Odessa
Пользователь №: 27 227



В структуре CSD или OSD не помню уже как конкретно она зовется. Есть информация о максимально граничных частотах CLK, но там как минимум 20 мгц, я эти данные просматривал даже у старых 5 вольтовых карточек, у MMC+ заявленая СLK как правило до 50мгц доходит .

AlexBoy - спецификация, она и в африке спецификация, а SPI тут не причем. cheers.gif
MMC_STARTBLOCK_READ - это константа заявленная в скачаном где-то хеадере как FE. И такие исходники не по спецификации, я их просматривал и жалобы на них тоже. Поэтому и решил поискать спецификацию.
Go to the top of the page
 
+Quote Post
Calculator
сообщение Apr 28 2007, 14:01
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 45
Регистрация: 19-04-07
Пользователь №: 27 172



Цитата(zorromen @ Apr 22 2007, 21:20) *
Тогда получается если 0 бит будет в середине(апаратный SPI) допустим 4й бит, то все данные за ним нужно подвинуть на 4 влево? Тогда и вправду нада програмный SPI ...

Цитата
Однозначно.
Почитай мануал с самсунга, поймешь что я не шучу

Не все так мрачно. Нулевой бит может придти любым, но это не значит, что нужно двигать данные на 4 бита smile.gif java script:emoticon(':)', 'smid_2')
У меня проверка выглядит так:
do Res=ShiftSPI(0xFF); while((Res==0xFF) && --cnt;
Работает примерно с 20 разными типами MMC и SD на аппаратном SPI 16 МГц (не в AVR правда, а в ARM, но это без разницы)
Go to the top of the page
 
+Quote Post
TinyQ
сообщение Apr 29 2007, 13:24
Сообщение #14


Участник
*

Группа: Свой
Сообщений: 33
Регистрация: 29-04-07
Из: Минск
Пользователь №: 27 397



Max_Shaman - боюсь вы невнимательно читали документацию.

Я использовал:
MultiMediaCard Product Manual, Rev. 5.2 © 2002/2003 SANDISK CORPORATION

А там есть таблица "Table 5-9. Timing Constants definitions" в которой NCR от 1 до 8 при этом единица измерения равна 8 clock cycles.

Мой MP3 плейер на ATmega отлично считывает файлы как с MMC так и с SD карточек и ни разу проблем с чтением не наблюдал.
Go to the top of the page
 
+Quote Post
Max_Shaman
сообщение Apr 29 2007, 17:03
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 21-04-07
Из: Odessa
Пользователь №: 27 227



Цитата(TinyQ @ Apr 29 2007, 13:24) *
Max_Shaman - боюсь вы невнимательно читали документацию.

Я использовал:
MultiMediaCard Product Manual, Rev. 5.2 © 2002/2003 SANDISK CORPORATION

А там есть таблица "Table 5-9. Timing Constants definitions" в которой NCR от 1 до 8 при этом единица измерения равна 8 clock cycles.

Мой MP3 плейер на ATmega отлично считывает файлы как с MMC так и с SD карточек и ни разу проблем с чтением не наблюдал.


Ты сам себе противоречишь. Привет вечным студентам.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01467 секунд с 7
ELECTRONIX ©2004-2016