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

 
 
 
Reply to this topicStart new topic
> FatFS файловая система от ChaN, Портирование на IAR для LPC2364
Tanker
сообщение Feb 15 2010, 14:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Здравствуйте!
Портировал 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-памяти), ведь основной хватает. Могло ли это повлиять?
Буду рад полезной информации на данную тему.

Сообщение отредактировал rezident - Feb 15 2010, 15:32
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
skripach
сообщение Feb 15 2010, 15:31
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



http://www.siwawi.arubi.uni-kl.de/avr_proj...anfat_lpc2k_mci


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
M_Andrey
сообщение Feb 15 2010, 15:42
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



Цитата(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)

Сообщение отредактировал M_Andrey - Feb 15 2010, 15:46
Go to the top of the page
 
+Quote Post
Tanker
сообщение Feb 15 2010, 19:38
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Благодарю за подсказку
написал так
Код
/* 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
Go to the top of the page
 
+Quote Post

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

 


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


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