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

 
 
 
Reply to this topicStart new topic
Dron_Gus
сообщение Apr 13 2009, 14:49
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Вопрос в том, можно ли использовать для работы с OHCI-контроллером (для списков EP, передач и т.д.) память вне "USB RAM". Как я понимаю эта пямять имеет отношение только к USB-device и списку DMA descriptor для него же? Другими словами, OHCI-контроллер имеет доступ ко всему адресному пространству?


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2009, 16:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dron_Gus @ Apr 13 2009, 16:49) *
Как я понимаю эта пямять имеет отношение только к USB-device...

Нет, до нее и MACDMA дотягивается (у меня в нее MAC фреймы складываются, дабы потом GPDMA в интерфейс внешней памяти мог заслать), и для GPDMA она как родная, ну и само собой для USBDMA. Не пробовал, но не вижу причин, дабы USBDMA не работала с основной и внешней памятью, т.е. со всей, кроме как с MAC памятью - там бридж ассиммертичный.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Apr 13 2009, 17:58
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Спасибо. Меня больше интересует, нужно ли структуры для OHCI класть в эту память или можно класть их куда угодно? Просто в примере UsbHostLite от NPX есть такая дурацкая конструкция:
Код
    Hcca       = (volatile  HCCA       *)0x7FD00000;
    TDHead     = (volatile  HCTD       *)0x7FD00100;
    TDTail     = (volatile  HCTD       *)0x7FD00110;
    EDCtrl     = (volatile  HCED       *)0x7FD00120;
    EDBulkIn   = (volatile  HCED       *)0x7FD00130;
    EDBulkOut  = (volatile  HCED       *)0x7FD00140;
    TDBuffer   = (volatile  USB_INT08U *)0x7FD00150;
    FATBuffer  = (volatile  USB_INT08U *)0x7FD001D0;
    UserBuffer = (volatile  USB_INT08U *)0x7FD01000;

Т.е. эти структуры кладуться именно в USB Ram. сама по себе конструкция убогая. А чтобы сделать нормально нужно задавать новый сегмент и т.д. Лень.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 13 2009, 18:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dron_Gus @ Apr 13 2009, 19:58) *
Меня больше интересует...

Ну так попробовать - либо DMA с ошибкой вылетит, либо нет smile.gif. Я USB почти не занимаюсь - совсем не мой интерфейс...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Apr 17 2009, 20:49
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Цитата(zltigo @ Apr 13 2009, 22:51) *
Ну так попробовать - либо DMA с ошибкой вылетит, либо нет smile.gif . Я USB почти не занимаюсь - совсем не мой интерфейс...


И буферы и все списки должны лежать в USB RAM. При этом если буфер вне этой памяти, действительно вылетает с ошибкой. Если же и какие-либо дескрипторы вне этой памяти, то полный ступор.

Это так. Мало ли кому пригодится.

Решил таким дефайном
Код
#define USB_RAM   __attribute__ ((section(".usbram"))) __attribute__ ((aligned(16)))


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 20 2009, 11:51
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



А почему aligned 16 ??
Требования к выравниванию буфера же нет?
Да и Isochronous Transfer Descriptor must be aligned to a 32-byte boundary
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Apr 20 2009, 12:57
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Это для Endpoint Descriptor и Transfer Descriptors. Привел в качестве примера. Структура Host Controller Communications Area вообще должна быть выравнена на 256 байт.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 10:39
Рейтинг@Mail.ru


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