|
|
  |
Atmel SAM3U4, Различные вопросы |
|
|
|
Dec 19 2011, 08:12
|
Гуру
     
Группа: Свой
Сообщений: 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 все просто - он знать ничего не знает об ошибках той периферии, которую обслуживает. То есть его придется при ошибках переконфигурировать полностью вручную.
|
|
|
|
|
Dec 20 2011, 10:30
|

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

|
Эмм... дошёл до конфигурирования DMA применительно к HSMCI. Поставил в тупик регистр DMAC_CFGx, конкретно - его поля DST_PER и SRC_PER. Где искать эти идентификаторы? Как понимаю, нужны ID для HSMCI и для MEMORY. Нашёл только табличку с ID на 43 странице мануала, но это по ходу не то  ... А, все, нашел, в другом разделе было  И имеет ли смысл что-то записывать в поле AHB_PROT? Так и не понял, для чего оно и чем отличаются его значения.
|
|
|
|
|
Dec 20 2011, 13:34
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sonycman @ Dec 20 2011, 14:30)  Нашёл только табличку с ID на 43 странице мануала, но это по ходу не то  ... Табличка есть на странице 28 (7.6 DMA Controller). Цитата(sonycman @ Dec 20 2011, 14:30)  И имеет ли смысл что-то записывать в поле AHB_PROT? Так и не понял, для чего оно и чем отличаются его значения. Ну, как минимум младший бит должен стоять, как я понимаю.
|
|
|
|
|
Dec 20 2011, 21:40
|

Любитель
    
Группа: Свой
Сообщений: 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, на который стоит забить?
|
|
|
|
|
Dec 20 2011, 23:37
|

Любитель
    
Группа: Свой
Сообщений: 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); Ничего не получилось В память записалась 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); Целостность данных в порядке, всё ровненько, флаги окончания установлены
|
|
|
|
|
Dec 22 2011, 13:05
|

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

|
Цитата(aaarrr @ Dec 22 2011, 16:56)  Хм, и правда. Возможно, с ним какая-то засада, раз уж пришлось изворачиваться с DMADONE/BLKE. Не помню уже  Односекторное чтение у меня работает вроде без проблем с XFRDONE. А BLKE/DMADONE, устанавливаются после каждого сектора?  Имхо, будет оптимальнее дергать проц по CBTC, когда не один сектор, а сразу цепочка обработалась, а на финише уже подождать XFRDONE. Попробую...
|
|
|
|
|
Dec 22 2011, 13:18
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sonycman @ Dec 22 2011, 17:05)  А BLKE/DMADONE, устанавливаются после каждого сектора?  Я и работаю только с одним сектором. Цитата(sonycman @ Dec 22 2011, 17:05)  Имхо, будет оптимальнее дергать проц по CBTC, когда не один сектор, а сразу цепочка обработалась, а на финише уже подождать XFRDONE. Попробую... Попробуйте. Только нужно еще учитывать, что внутри цепочки могут возникнуть ошибки. С одиночной передачей несколько удобнее. Посмотрел, как организована передача у меня: после инициализации ждем CBTC или тайм-аут данных (DTOE) + есть еще программный тайм-аут. После CBTC разрешаются DMADONE/BLKE.
|
|
|
|
|
Dec 28 2011, 16:34
|

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

|
Вроде доделал драйвер HSMCI для FatFS. Надо же, не все карточки MicroSD спецификации 2.0 поддерживают High Speed режим! SanDisk 1GB в ответ на CMD6 вернула как поддерживаемую только default function для группы 1! Function 1 (HS) не поддерживается...  Скорости получились такие, при чтении\записи блоков по 64 сектора, Kingston SDHC 4GB Class 4: Чтение: 18 MB/Sec, запись: 8,5 MB/Sec. При этом кардридер с этой же карточкой показал более высокий результат: Чтение: 19,6 MB/Sec, запись: 11,3 MB/Sec. Если по чтению практически одинаково, то вот с записью большое отставание. Возможно, ридер работает с блоками секторов гораздо большего размера, или используется какая-то оптимизация, вроде PRE-ERASE?
|
|
|
|
|
Dec 28 2011, 16:38
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sonycman @ Dec 28 2011, 20:34)  Если по чтению практически одинаково, то вот с записью большое отставание. Возможно, ридер работает с блоками секторов гораздо большего размера, или используется какая-то оптимизация, вроде PRE-ERASE? Ну, не такая уж большая разница (особенно если учесть, что контроллеру вообще затруднительно будет "перепахивать" такие потоки). Возможно, используют большие блоки. С PRE-ERASE в свое время экспериментировал, но сколько-нибудь значимого влияния на скорость записи никогда не наблюдал.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|