|
FatFs. LPC2388. MCI. Не работает, На какие грабли наступил? |
|
|
|
Jul 24 2009, 16:40
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Взял последнюю версию 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 .&.2.Y.......@.J 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. Даже не знаю где копать - вроде все правильно по коду... Частота контроллера урезана по самое нехочу. карточка компом нормально видится, читается, пишется. Другая карточка - аналогичный эффект.. Кто что может посоветовать? Или может кому не жалко работающего такого файлика?
Прикрепленные файлы
mci.zip ( 7.17 килобайт )
Кол-во скачиваний: 220
|
|
|
|
|
Jul 24 2009, 20:29
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Цитата(EXeGLuMATOR @ Jul 24 2009, 23:14)  Не.. таймер таймаута я прошел. Тоже впоролся - различные системы управления прерываниями в примерах и в моих проектах. Вроде работает... тогда у меня вопрос. чебы я не делал, какого либа размера буффер не передавал, fatfs спускает вниз кусками максимум по 8 блоков что замедляет максимальную скорость записи. косяг в коде fatfs. пытался отладчиком ... плюнул. непонятно откуда эта цифра берется. хочется застиавить чтоб мильтиблочная запись была большим числом блоков. тогда до 6 мегабайт в сек можно записывать в SD карту.
|
|
|
|
|
Jul 25 2009, 06:12
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Это все здорово конечно.  Но тема изначально несколько о другом... Неужто никто на 2388 не портировал эту системку?
|
|
|
|
|
Jul 25 2009, 06:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата Неужто никто на 2388 не портировал эту системку? Там же в примерах у Чена есть порт на LPC2378 с MCI. Можно сравнить.
--------------------
aka Vit
|
|
|
|
|
Jul 25 2009, 08:12
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Да вот-же. Хотелось побыстрее все запустить. Видимо не прокатит. Но пример-то рабочий... По крайней мере должен быть - он тянется еще с предыдущих версий FatFs. Да и как-то мутно все реализовано в этом файле.  Видимо придется все полностью переделывать. Что совсем не веселит... Может таки у кого есть заведомо рабочий такой файлик?
|
|
|
|
|
Jul 26 2009, 21:14
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 27-06-05
Из: Киев
Пользователь №: 6 345

|
Цитата(klen @ Jul 24 2009, 21:26)  тоже морочился с FatFs
тока у меня stm32 c SDIO контроллером. ничем помоч не могу но если пройдете этот этап то обращаю внимание на другой возможный косяг, можете наступить на грабли с таймером таймаута. я день угробил пока понял. А что там за косяк с таймером таймаута?.
--------------------
Если в сердце дверь закрыта - надо в печень постучать..
|
|
|
|
|
Jul 27 2009, 13:21
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Цитата(skripach @ Jul 27 2009, 13:25)  Попробуйте др. карточку. Я портировал на LPC2478 EFSL и ChanFS, обе работают. Да пробовал. В том-то и дело. А файликом для MCI не поделитесь для FatFs?  Где-то похоже сидит какая-то мелочь - найти не могу.
|
|
|
|
|
Jul 28 2009, 06:30
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата А файликом для MCI не поделитесь для FatFs? А чегож не поделится, поделюсь.
Прикрепленные файлы
mci2.rar ( 15.29 килобайт )
Кол-во скачиваний: 138
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 29 2009, 07:41
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата Да, это одно и то-же. Об этом и речь. Так в чем проблема, модуль MCI я выдрал из рабочего проекта где работает именно ФС по ссылке выше, всё должно работать. По идее вам только файл переименовать с MCI2 на MCI.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 29 2009, 08:32
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Не совсем.  эта файловая система работает по функциям определенным в diskio.h А именно: DSTATUS disk_initialize (BYTE); DSTATUS disk_status (BYTE); DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE); DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); DRESULT disk_ioctl (BYTE, BYTE, void*); Вот тут-то и приходится извращаться. Поскольку то, что в примере с этой системой работать отказывается.
|
|
|
|
|
Jul 29 2009, 09:00
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Ладно, углубимся... Смотрим для примера функцию disk_initialize: Вот эта функция в dickio.c Код /*-----------------------------------------------------------------------*/ /* Initialize a Drive */
DSTATUS disk_initialize (BYTE drv) /* Physical drive nmuber (0..) */ { if ( drv != 0 ) return STA_NOINIT;
if ( MCI_disk_initialize() ) { // error occured Stat |= STA_NOINIT; power_off(); } else { Stat &= ~STA_NOINIT; // cardtype mci.h to chan cardtype - (maybe redundant) switch ( MCI_CardType ) { case SDHC_CARD : TERMf((tbuf,TXT("\r\nCardType-SDHC"))); CardType = 4; break; case MMC_CARD : TERMf((tbuf,TXT("\r\nCardType-MMC"))); CardType = 1; break; case SD_CARD : TERMf((tbuf,TXT("\r\nCardType-SD"))); CardType = 2; break; default : TERMf((tbuf,TXT("\r\nCardType-0"))); CardType = 0; } } return Stat; } Видим что из функции disk_initialize вызывается только одна функция MCI_disk_initialize которая и находится в пристёгнутом архиве выше. Цитата Поскольку то, что в примере с этой системой работать отказывается. Разумеется что-то может и не заработать из примера, но есть же отладчик и терминал. Ещё раз повторяю модуль MCI выдрал из РАБОЧЕГО проекта.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 29 2009, 11:08
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
В общем все заработало. Всем спасибо за помощь.  Просто в комплекте от мистера Чана идут не совсем корректные, IMHO, примеры под LPC. Взял пример от Мартина Томаса вот здесьмалость переработал и собсно все заработало. Довести до ума осталось, но в целом вроде все работает. Будем посмотреть. Надеюсь кому-нибудь пригодится это все.
|
|
|
|
|
Jul 29 2009, 11:21
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата Дело в том, что в том архиве нету такой функции. Каюсь, не искал её там, думал коль её у вас нету то должна быть там. Рад что у вас всё заработало.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 29 2009, 13:22
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(EXeGLuMATOR @ Jul 29 2009, 16:08)  В общем все заработало. Всем спасибо за помощь.  Просто в комплекте от мистера Чана идут не совсем корректные, IMHO, примеры под LPC. Взял пример от Мартина Томаса вот здесьмалость переработал и собсно все заработало. Довести до ума осталось, но в целом вроде все работает. Будем посмотреть. Надеюсь кому-нибудь пригодится это все. О! Спасибо за ссылку! Проект сделан под кейловский компилятор - но при компиляции выдает ошибку: Код drivers_mthomas\diskio.c(520): error: #167: argument of type "volatile BYTE *" is incompatible with parameter of type "const void *restrict" в функции DRESULT disk_read на строчку memcpy(buff, ReadBlock, 512);как исправить?
Сообщение отредактировал Ivan Kuznetzov - Jul 29 2009, 13:23
--------------------
Разработчик
|
|
|
|
|
Jul 29 2009, 17:37
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305

|
Цитата(Ivan Kuznetzov @ Jul 29 2009, 17:22)  О! Спасибо за ссылку! Проект сделан под кейловский компилятор - но при компиляции выдает ошибку: Код drivers_mthomas\diskio.c(520): error: #167: argument of type "volatile BYTE *" is incompatible with parameter of type "const void *restrict" в функции DRESULT disk_read на строчку memcpy(buff, ReadBlock, 512);как исправить? memcpy(buff, (BYTE*)ReadBlock, 512); Аналогично и во втором месте, где выдаст такую ошибку.
|
|
|
|
|
Jul 31 2009, 04:04
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата memcpy(buff, (BYTE*)ReadBlock, 512); Аналогично и во втором месте, где выдаст такую ошибку. Спасибо, подкорректировал, ошибка исчезла! Протестировал исходник на Olimex LPC2378 платке - с карточками до 1 Гб пашет отлично, инициализирует фс-ку и читает файлики с нее Но есть один непонятный момент - SDHC карточки инициализировать не хочет, хотя в diskio.c уже есть ветвление на SD/SDHC карты (сохраняет тип в переменную CardType)... Включил дебаг в diskio.c - обнаружилось, что вываливается на MCI_Check_CID()Код MCI DMA enabled Check_CID failed Set_Address failed Send_CSD failed Select_Card failed Set_BlockLen failed Set_BlockLen o.k. dump_status: Send_Status INVALID_RESPONSE
SELECT Select_Card failed - retry SELECT timeout changeing to trans dump_status: Send_Status INVALID_RESPONSE wait_ready: Send_Status INVALID_RESPONSE wait_ready: timeout stby or trans DESELCT timeout waiting trans or stby
Сообщение отредактировал Ivan Kuznetzov - Jul 31 2009, 04:09
--------------------
Разработчик
|
|
|
|
|
Jul 31 2009, 13:01
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 3-01-07
Из: Germany
Пользователь №: 24 071

|
Адаптировал пример к платине Keil MCB2387 - всё работало отлично. В функции MCI_Init() возможно нужно ещё PINSELx для LPC2388 правильно изменить.
|
|
|
|
|
Aug 3 2009, 08:33
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 3-01-07
Из: Germany
Пользователь №: 24 071

|
Цитата(Ivan Kuznetzov @ Aug 3 2009, 09:48)  Кто-нить пробывал эти исходники с картами больше 1Гб? У меня почему-то не работает... Исходники пробовал с: SanDisk 256MB, ProMax 2GB, SanDisk 4GB SDHC
|
|
|
|
|
Aug 4 2009, 06:58
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
усе заработало, после всовывания карточки, кнопочку RESET на отладочной платке жму - проходит, причем интересно, с SD картами можно такого не проделывать, только с SDHC...  обновил ff.c и ff.h на последние (0.07с), добавил ccsbcs.c для поддержки LFN, включил поддержку LFN в ff.h, но при выводе списка файлов имена все равно в формате 8.3...
Сообщение отредактировал Ivan Kuznetzov - Aug 4 2009, 07:53
--------------------
Разработчик
|
|
|
|
|
Aug 4 2009, 08:18
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
переделал немного fat_mci_demo.c - теперь глинные имена кажет  в архиве для LPC2368 (протестировано на LPC2378) P.S. Простите за оффтоп, но может у кого есть такой-же проектик для LPC2148 или LPC2138 на кейловском родном компиляторе?
Сообщение отредактировал Ivan Kuznetzov - Aug 4 2009, 08:30
--------------------
Разработчик
|
|
|
|
|
Aug 23 2009, 21:07
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 20-05-08
Из: Санкт-Петербург
Пользователь №: 37 681

|
 Народ, подскажите пожалуйста, как определить какой функции main() передается управление в данном проекте ? (имеется ввиду пост сразу перед моим вопросом) там в файле Sturtup.s написано: IMPORT __main LDR R0, =__main BX R0 Если воспользоваться "find in files", то вылезает три функции main() в файлах - mcitest.c, rtctest.c, tmrtest.c, а ни один из этих файлов в проект не включен ... или все же включен ?  Вопрос снят. Управление передается функции int main (void) в первом файле fat_mci_demo.c  (у меня она почему-то не находилась поиском, нашел при шагании симулятором) (как удалить сообщение не знаю.  )
Сообщение отредактировал poq12 - Aug 23 2009, 21:32
|
|
|
|
|
Oct 4 2010, 12:33
|
Группа: Новичок
Сообщений: 5
Регистрация: 30-11-09
Из: Смоленск
Пользователь №: 53 961

|
Доброго времени суток. Помогите разобраться с инициализацией microSD карты. Пытаюсь запустить проект lpc23xx_chan на процессоре lpc2468. Карта соединена с процессором следующим образом P1[2] CLK P1[3] CMD P1[5] питание через полевик на PWR P1[6] DAT0 P1[7] DAT1 P1[11] DAT2 P1[12] DAT3 исправил в проекте инициализацию в соответствии с подключением карты Код PINSEL2 &= ~((3 << 4) | (3 << 6) | (3 << 10) | (3 << 12) | (3 << 14) | (3 << 22) | (3 << 24)); PINSEL2 |= (1 << 5) | (1 << 7) | (1 << 11) | (1 << 13) | (1 << 15) | (1 << 23) | (1 << 25); при попытке инициализации выводится Цитата MCI_INIT ok timout CMD8 -> SD-Card<Version 2.0 or MMC MCI_Send_ACMD failed -> MMC, invalid power-range or no card MCI_POWER 0x00000000 rc=1 при выполнении функции MCI_GetCmdResp в регистре MCI_STATUS установлен бит CMD_TIMEOUT пробовал на картах micro sd kingston 4GB sdhc и apacer 1GB Питание и тактирование появляется на карте при попытке инициализации. Подскажите в какую сторону копать.
|
|
|
|
|
Oct 5 2010, 10:57
|
Группа: Новичок
Сообщений: 5
Регистрация: 30-11-09
Из: Смоленск
Пользователь №: 53 961

|
С питанием все нормально. Случайно обнаружилась следующая странность. Подключаю щуп осциллографа к линии CLK, и древняя 16 МБ карта инициализируется нормально. Работает с fat нормально. Отключаю щуп, симптомы как в предыдущем посте. Пробовал резистор 10к повесить на подтяжку на CLK и остальные линии повесить, не помогает. Работает только с подключенным щупом. Не конденсатор же вещать на CLK
|
|
|
|
|
Oct 6 2010, 15:51
|
Участник

Группа: Участник
Сообщений: 34
Регистрация: 8-12-09
Пользователь №: 54 123

|
вы работаете в spi моде, а если полярность clk перевернуть?
|
|
|
|
|
Oct 6 2010, 16:35
|
Группа: Новичок
Сообщений: 5
Регистрация: 30-11-09
Из: Смоленск
Пользователь №: 53 961

|
Я работаю в sd mode. Пробовал ставить подтяжку, резисторы 33 Ом на линии ставить. Не помогает.
|
|
|
|
|
Oct 6 2010, 17:04
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата С питанием все нормально. Тоже так казалось.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Oct 7 2010, 10:56
|
Группа: Новичок
Сообщений: 5
Регистрация: 30-11-09
Из: Смоленск
Пользователь №: 53 961

|
Поставил 100 pF конденсатор на CLK. В разрыв линий включены резисторы 30 Ом. Инициализируется со второго, третьего раза. После инициализации работает вроде нормально. Голову уже сломал.
|
|
|
|
|
Oct 7 2010, 11:35
|
Группа: Новичок
Сообщений: 5
Регистрация: 30-11-09
Из: Смоленск
Пользователь №: 53 961

|
Физически карта сидит в слоте припаяном на шлейф около 20 мм длиной. На плате зеркально площадки под слот развел, пока другая плата придет, повесил навесным  До площадок на слоте дорожки длиной около 30 мм. Рядом с дорожками только земляной полигон. Только что попробовал карту на 1 GB. Инициализируется с первого раза.
Сообщение отредактировал madnik - Oct 7 2010, 11:36
|
|
|
|
|
Jan 13 2011, 12:24
|
Группа: Новичок
Сообщений: 1
Регистрация: 26-10-09
Из: Россия. г. Ульяновск
Пользователь №: 53 218

|
Доброго времени суток. Подскажите пожалуйста как подключить FATFS(или что-то наподобие для работы с micro-SD) к TNKERNEL v2.5. Две недели уже бьюсь над этим вопросом. Не могу понять почему контроллер зависает при открытии файла.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|