sonycman 0 23 мая, 2017 Опубликовано 23 мая, 2017 · Жалоба Приветствую! Ковыряюсь с файловой системой на карте памяти, думаю задействовать DMA контроллера SD/MMC. Но вот требование к выравниванию памяти до 32-ух бит портит всю картину. Для файловой системы невозможно обеспечить выравнивание адреса буфера чтения/записи, соответственно DMA невозможно будет использовать в случае таких адресов. Может быть, тогда завести промежуточный выровненный буфер, с которым будет работать DMA, а потом копировать из/в него данные по месту назначения? Но тогда в чем цимес такого DMA, когда все равно приходится работать "ручками"? :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 15 июня, 2017 Опубликовано 15 июня, 2017 · Жалоба Сделал пока так, что DMA работает с выровненным промежуточным буфером в некешируемой области памяти, а я процессором копирую данные на нужный выровненный\невыровненный адрес. Можно, наверное, для промежуточного буфера использовать часть OnChip памяти, чтобы копирование через memcpy было эффективнее. Интересно, разве так трудно было сделать, чтобы DMA работало с невыровненными адресами? Всего-то использовать сигналы byte enable и, наверное, сдвиговый регистр. Может потом попробую свой модуль для этого написать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 15 июня, 2017 Опубликовано 15 июня, 2017 · Жалоба А почему не стали выровненные куски буферов копировать при помощи DMA, а остатки -- "ручками"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 16 июня, 2017 Опубликовано 16 июня, 2017 · Жалоба А почему не стали выровненные куски буферов копировать при помощи DMA, а остатки -- "ручками"? А как? Копировать надо из FIFO контроллера SD, к которому тоже доступ должен быть строго выровнен по 32 битам. С произвольным смещением данные забрать нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться