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

OMAP L137 - EDMA и NAND

Добрый день!

Прошу подсказать бывалых, в какую сторону копать в следующей ситуации:

Есть девайс с процессором OMAP L137, ARM-ядро не используется, только DSP. К процу через EMIFA подключена ПЛИС. ПЛИС периодически генерит данные, выставляет уровень на GPIO процессора, возникает прерывание, и процессор вычитывает данные из ПЛИС посредством EDMA3. Интервал генерации прерываний 5 мс. В прерывании от GPIO происходит старт EDMA-передачи (EDMA3_DRV_TRIG_MODE_MANUAL), далее данные из ПЛИС копируются в заданную область памяти. Все прекрасно работает, но только до тех пор, пока не пытаемся работать с NAND-flash (которая также подключена к процессору) в DMA-режиме. В отладке видно, что в дебрях драйвера NAND происходит ожидание окончания EDMA-передачи, которое никогда не наступает, и процессор зависает. В режиме работы NAND-драйвера без DMA зависания не происходит, но появляются потери данных при вычитке из ПЛИС, видимо, процессор "замирает" на время записи-чтения страницы.

Драйвер NAND используется стандартный от TI, biospsp_03_00_01_00 с незначительными модификациями под тип микросхемы памяти.

Если запуск вычитки данных из ПЛИС запускать не из прерывания, а из потока, то зависания не происходит, однако и в этом случае возникают потери данных из ПЛИС. Судя по всему, принудительный запуск вычитки из ПЛИС в прерывании нарушает алгоритм работы с EDMA в драйвере NAND. Почему это происходит, до конца не понятно - каналы EDMA3 для вычитки из ПЛИС и NAND разные, в документации не нашел явного запрета на запуск передачи из прерывания.

Идеальным решением было бы обеспечить бесперебойную вычитку данных из ПЛИС, работу с NAND можно еще более замедлить. Прошу совета, как можно модифицировать алгоритм NAND-драйвера или алгоритм вычитки из ПЛИС.

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


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

Прошу совета, как можно модифицировать алгоритм NAND-драйвера или алгоритм вычитки из ПЛИС.

Могу посоветовать: избавиться от "дебрей", прочитать даташит на периферию и написать самостоятельно работу и с EMIFA и с EDMA3. Сложного там ничего нет.

Ну или, раз работу с Flash можно замедлить, то зачем поставили параллельную? Может лучше было SPI-FLASH? И не было бы пересечения по EMIFA.

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


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

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

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

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

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

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

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

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

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

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