Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FatFS файловая система от ChaN
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Tanker
Здравствуйте!
Портировал FatFS на IAR для LPC2364.
Смог прочитать CID и CSD карты disk_initialize, карты инициализируются нормально, делаю выводы о правильности хардваре и софтваре.

Перехожу к чтению 0-сектора SD-карты, через disc_read, там есть участок кода:
Код
ready_reception(count, 512);            /* Ready to receive data blocks */
cmd = (count > 1) ? CMD18 : CMD17;        /* Transfer type: Single block or Multiple block */
if (send_cmd(cmd, sector, 1, &resp)        /* Start to read */
    && !(resp & 0xC0580000)) {
      rp = 0;
        do {
            while ((rp == XferWp) && !(XferStat & 0xC)) {    /* Wait for block arrival */
            }
            if (XferStat & 0xC); break;/* Abort if any error has occured */ СЮДА СТАБИЛЬНО ВЫПАДАЮ!!!

Поскольку XferStat изменяется в прерывании DMA (которое срабатывает, там стоит счётчик и я вижу что он увеличивается при попытках что-то прочитать из секторов карты) делаю вывод, что что-то неправильно у меня в настройке DMA.
Неужели придётся разбираться с DMA ?!! там же чёрт ногу сломит (какие-то связанные списки и др. муть) а я начинающий ;-)
В экзампле от FatFS, буферы для DMA находятся в USB-memory, я указал "обычную память" (вернее убрал атрибут того что массив находится в области usb-памяти), ведь основной хватает. Могло ли это повлиять?
Буду рад полезной информации на данную тему.
M_Andrey
Цитата(Tanker @ Feb 15 2010, 17:21) *
В экзампле от FatFS, буферы для DMA находятся в USB-memory, я указал "обычную память" (вернее убрал атрибут того что массив находится в области usb-памяти), ведь основной хватает. Могло ли это повлиять?
Буду рад полезной информации на данную тему.


Вот как-раз зря это сделал! DMA работает только с определенными областями памяти, USB-memory как раз в их числе!
См. "user.manual.lpc23xx.pdf" стр. 628:
Memory region Address range Memory Type
On-chip RAM 0x7FD0 0000 - 0x7FD0 1FFF USB RAM (8 kB)
Tanker
Благодарю за подсказку
написал так
Код
/* Block transfer buffer (located in USB RAM) */
__no_init DWORD DmaBuff[N_BUF][128] @ "USB_DMA_RAM"; // Block transfer FIFO
__no_init DWORD LinkList[N_BUF][4] @ "USB_DMA_RAM";  // DMA link list

и заработало... но не сразу, там ещё есть интересные функции блочной записи/чтения данных написанные на AS (Store_Block и Load_Block) На Store_Block прога вешалась, не стал в асме разбираться (скорее всего портак допустил при портировании из GCC в IAR) заменил на memcpy, после чего пошли сектора читаться.
Теперь (как любитель лёгкой жизни) жду от добрых людей портированные на IAR функции Store_Block и Load_Block
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.