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

 
 
11 страниц V  « < 5 6 7 8 9 > »   
Reply to this topicStart new topic
> Atmel SAM3U4, Различные вопросы
aaarrr
сообщение Dec 19 2011, 08:12
Сообщение #91


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Dec 17 2011, 05:39) *
То есть хост определяет, отдаёт карта данные, или нет с точностью до байта.

Тут некоторая путаница в понятиях получается. Чисто гипотетически предположим, что хост считывает 16 байт, а на деле карта возвращает 8.
В этом случае будут нормально приняты старт, первые 8 байт, а вместо остальных будут приняты 0xff, что повлечет ошибку CRC.
Понятно, что хост не знает, сколько на самом деле было передано картой.

Цитата(sonycman @ Dec 17 2011, 05:39) *
Но это касается работы без DMA, с ним, возможно, будет несколько иначе...

С DMA все просто - он знать ничего не знает об ошибках той периферии, которую обслуживает. То есть его придется при ошибках переконфигурировать полностью вручную.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 20 2011, 10:30
Сообщение #92


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Эмм... дошёл до конфигурирования DMA применительно к HSMCI.
Поставил в тупик регистр DMAC_CFGx, конкретно - его поля DST_PER и SRC_PER.
Где искать эти идентификаторы?

Как понимаю, нужны ID для HSMCI и для MEMORY.
Нашёл только табличку с ID на 43 странице мануала, но это по ходу не то sad.gif...

А, все, нашел, в другом разделе было sm.gif

И имеет ли смысл что-то записывать в поле AHB_PROT? Так и не понял, для чего оно и чем отличаются его значения.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 20 2011, 13:34
Сообщение #93


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Dec 20 2011, 14:30) *
Нашёл только табличку с ID на 43 странице мануала, но это по ходу не то sad.gif...

Табличка есть на странице 28 (7.6 DMA Controller).

Цитата(sonycman @ Dec 20 2011, 14:30) *
И имеет ли смысл что-то записывать в поле AHB_PROT? Так и не понял, для чего оно и чем отличаются его значения.

Ну, как минимум младший бит должен стоять, как я понимаю.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 20 2011, 14:12
Сообщение #94


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Dec 20 2011, 17:34) *
Табличка есть на странице 28 (7.6 DMA Controller).

Ну, как минимум младший бит должен стоять, как я понимаю.

Спасибо! Усиленно искал таблицу в разделе DMAC, к которому она и относится, а они ее почему-то засунули в общий DMA...

Поэкспериментирую с различными по ширине режимами доступа (WORD/BYTE), может, получится что нибудь интересное sm.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 20 2011, 21:40
Сообщение #95


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



В мануале в примерах программирования DMA под HSMCI присутствуют поля регистров DMAC, такие, как:
Цитата
DIF and SIF are set with their respective layer ID. If SIF is different from DIF, the
DMA controller is able to prefetch data and write HSMCI simultaneously.

Цитата
DST_REP is set to zero meaning that address are contiguous.

Цитата
Program LLI_W.DMAC_DSCRx with the address of LLI_B descriptor. And set
DSCRx_IF to the AHB Layer ID.

которые отсутствуют в описании самих регистров.
Очередной copy\paste, на который стоит забить?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 20 2011, 22:13
Сообщение #96


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Dec 21 2011, 01:40) *
Очередной copy\paste, на который стоит забить?

Ага. Просто у некоторых атмелов есть DMAC с двумя AHB-интерфейсами. Эти поля относятся к нему.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 20 2011, 23:37
Сообщение #97


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Попробовал запрограммировать DMAC на чтение из HSMCI 512 байтового сектора с доступом BYTE для записи в не выравненный буфер:
Код
HDMA_CTRLA = AT_HDMA_SRC_WIDTH_BYTE | AT_HDMA_DST_WIDTH_BYTE | AT_HDMA_SCSIZE_1 | AT_HDMA_DCSIZE_1 | AT_HDMA_BTSIZE(512);

Ничего не получилось crying.gif
В память записалась 1/4 часть данных (128 байт, вместо 512), всё вперемешку, флаги окончания передачи DMA не выставились.
Видимо, читать из фифо побайтно оно не может, хватает сразу слово и получается мешанина...

Получилось так:
Код
HDMA_CTRLA = AT_HDMA_SRC_WIDTH_WORD | AT_HDMA_DST_WIDTH_BYTE | AT_HDMA_SCSIZE_1 |     AT_HDMA_DCSIZE_1 | AT_HDMA_BTSIZE(128);

Целостность данных в порядке, всё ровненько, флаги окончания установлены sm.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 22 2011, 12:05
Сообщение #98


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



По поводу мультисекторной записи - в примерах в мануале обрабатываются три флага готовности: окончание обработки цепочки буферов DMA CBTC, проверка FIFO на пусто FIFOEMPTY и XFRDONE.
Думается, про фифо это совершенно лишнее?
Зачем ждать его опустошения, когда есть флаг XFRDONE?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2011, 12:14
Сообщение #99


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Мутный момент. Я смотрю DMADONE при чтении и BLKE при записи.

XFRDONE относится к командам, а не к данным.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 22 2011, 12:41
Сообщение #100


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Dec 22 2011, 16:14) *
XFRDONE относится к командам, а не к данным.

Разве к командам?
Это комплексный флаг, который сбрасывается при подаче команды и устанавливается только после того, как все данные прошли и выставился NOTBUSY.
Если верить мануалу sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2011, 12:56
Сообщение #101


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Хм, и правда. Возможно, с ним какая-то засада, раз уж пришлось изворачиваться с DMADONE/BLKE. Не помню уже sad.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 22 2011, 13:05
Сообщение #102


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Dec 22 2011, 16:56) *
Хм, и правда. Возможно, с ним какая-то засада, раз уж пришлось изворачиваться с DMADONE/BLKE. Не помню уже sad.gif

Односекторное чтение у меня работает вроде без проблем с XFRDONE.

А BLKE/DMADONE, устанавливаются после каждого сектора? sad.gif

Имхо, будет оптимальнее дергать проц по CBTC, когда не один сектор, а сразу цепочка обработалась, а на финише уже подождать XFRDONE.
Попробую...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2011, 13:18
Сообщение #103


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Dec 22 2011, 17:05) *
А BLKE/DMADONE, устанавливаются после каждого сектора? sad.gif

Я и работаю только с одним сектором.

Цитата(sonycman @ Dec 22 2011, 17:05) *
Имхо, будет оптимальнее дергать проц по CBTC, когда не один сектор, а сразу цепочка обработалась, а на финише уже подождать XFRDONE.
Попробую...

Попробуйте. Только нужно еще учитывать, что внутри цепочки могут возникнуть ошибки. С одиночной передачей несколько удобнее.
Посмотрел, как организована передача у меня: после инициализации ждем CBTC или тайм-аут данных (DTOE) + есть еще программный тайм-аут. После CBTC разрешаются DMADONE/BLKE.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Dec 28 2011, 16:34
Сообщение #104


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Вроде доделал драйвер HSMCI для FatFS.

Надо же, не все карточки MicroSD спецификации 2.0 поддерживают High Speed режим!
SanDisk 1GB в ответ на CMD6 вернула как поддерживаемую только default function для группы 1!
Function 1 (HS) не поддерживается... sad.gif

Скорости получились такие, при чтении\записи блоков по 64 сектора, Kingston SDHC 4GB Class 4:
Чтение: 18 MB/Sec, запись: 8,5 MB/Sec.

При этом кардридер с этой же карточкой показал более высокий результат:
Чтение: 19,6 MB/Sec, запись: 11,3 MB/Sec.

Если по чтению практически одинаково, то вот с записью большое отставание.
Возможно, ридер работает с блоками секторов гораздо большего размера, или используется какая-то оптимизация, вроде PRE-ERASE?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 28 2011, 16:38
Сообщение #105


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Dec 28 2011, 20:34) *
Если по чтению практически одинаково, то вот с записью большое отставание.
Возможно, ридер работает с блоками секторов гораздо большего размера, или используется какая-то оптимизация, вроде PRE-ERASE?

Ну, не такая уж большая разница (особенно если учесть, что контроллеру вообще затруднительно будет "перепахивать" такие потоки). Возможно, используют большие блоки. С PRE-ERASE в свое время экспериментировал, но сколько-нибудь значимого влияния на скорость записи никогда не наблюдал.
Go to the top of the page
 
+Quote Post

11 страниц V  « < 5 6 7 8 9 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:58
Рейтинг@Mail.ru


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