Перейти к содержанию
    

FatFs. LPC2388. MCI. Не работает

Взял последнюю версию 0.07с FatFs. Соответственно и пример применения на данную серию процов. Собственно к библиотеке FatFs вопросов нет.

Но есть чудный модуль MCI.c. Вроде перенес все нормально, да собственно и переносить там особо нечего. Регистры совпадают, только ножки переделать. Но не тут-то было. Инициализация карточки проходит без вопросов - вроде правильно все читается.

Show disk status...

Drive size: 59776 sectors

Sector size: 512

Erase block size: 32 sectors

MMC/SDC type: 2

CSD:

00000000 00 26 00 32 1F 59 81 D2 FE F9 CF FF 92 40 00 4A .&[email protected]

CID:

00000000 03 53 44 53 44 30 33 32 57 00 3E 26 E3 00 55 62 .SDSD032W.>&..Ub

OCR:

00000000 80 FF 80 00 ....

SD Status:

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

 

Но вот SD Status - похоже не тот.

 

Не проходит функция disk_read. А именно отваливается по условию в строчке 605.

Даже не знаю где копать - вроде все правильно по коду...

Частота контроллера урезана по самое нехочу.

карточка компом нормально видится, читается, пишется. Другая карточка - аналогичный эффект..

 

Кто что может посоветовать?

Или может кому не жалко работающего такого файлика? :rolleyes:

mci.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоже морочился с FatFs

 

тока у меня stm32 c SDIO контроллером.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не.. таймер таймаута я прошел. :)

Тоже впоролся - различные системы управления прерываниями в примерах и в моих проектах. Вроде работает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не.. таймер таймаута я прошел. :)

Тоже впоролся - различные системы управления прерываниями в примерах и в моих проектах. Вроде работает...

 

тогда у меня вопрос.

чебы я не делал, какого либа размера буффер не передавал, fatfs спускает вниз кусками максимум по 8 блоков что замедляет максимальную скорость записи. косяг в коде fatfs. пытался отладчиком ... плюнул. непонятно откуда эта цифра берется.

 

хочется застиавить чтоб мильтиблочная запись была большим числом блоков. тогда до 6 мегабайт в сек можно записывать в SD карту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 блоков - это же 4К? Размер кластера. После заполнения кластера приходится лезть в FAT, искать следующий свободный кластер, помечать его в двух копиях FAT как занятый, записывать номер следующего свободного кластера в FSINFO...

Так что непрерывно не получается:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это все здорово конечно. :) Но тема изначально несколько о другом... ;)

Неужто никто на 2388 не портировал эту системку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неужто никто на 2388 не портировал эту системку?

Там же в примерах у Чена есть порт на LPC2378 с MCI. Можно сравнить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так в том-то и дело, код из этого примера и используется. Но видимо есть еще какие-то ньюанусы... :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сразу скажу, что на LPC не запускал.

Бегло посмотрел код - там переменные XferStat и XferWp модифицируются в обработчике прерываний, а используется в фоне - возможно при выходе из while (604-я строка) по XferWp происходит модификация XferStat( хотя вероятность мала). И чему равно XferWp на 605-й строке?

Такое использование XferWp и XferStat, IMHO, небезопасно и я бы ввёл переменные для копий и читал бы в них в критической секции безотносительно данной задачи.

ЗЫ. В Isr_MCI модифицируются обе переменные, так что что там по логике получается, нужно разбираться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да вот-же. Хотелось побыстрее все запустить. Видимо не прокатит. Но пример-то рабочий... По крайней мере должен быть - он тянется еще с предыдущих версий FatFs. Да и как-то мутно все реализовано в этом файле. :07: Видимо придется все полностью переделывать. Что совсем не веселит...

Может таки у кого есть заведомо рабочий такой файлик?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоже морочился с FatFs

 

тока у меня stm32 c SDIO контроллером.

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

А что там за косяк с таймером таймаута?.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:rolleyes:

А что там за косяк с таймером таймаута?.

побольше значение ставить нада, иначе неработает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте др. карточку. Я портировал на LPC2478 EFSL и ChanFS, обе работают.

 

Да пробовал. В том-то и дело.

А файликом для MCI не поделитесь для FatFs? :rolleyes: Где-то похоже сидит какая-то мелочь - найти не могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...