Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Allwinner A13 и др...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
mantech
Приветствую.

Мозги сломал об инициализацию УСБ хоста на данных камнях, доки кот наплакал, в исходниках линукса противоречащие даташиту и здравому смыслу функции.
В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!! Как это работает - наверно волшебство...

Может кто ковырял это дело и есть какие-то соображения, буду признателен.

Особенно интересует, как инициализировать Host PHY... В baremetal, разумеется rolleyes.gif
__inline__
Вы тут были? https://debugdump.com

Меня вежливо послали ковырять Linux BSP по моему вопросу: https://debugdump.com/viewtopic.php?id=900

Лучше уже не придумать. А ответов они не дали, потому что не умеют LCD по i8080 к v3s подрубать. И костылей тами много
aaarrr
Цитата(mantech @ Jul 17 2018, 13:09) *
В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!!

Код
USB_HCI0              0x01C14000
SW_PA_USB0_IO_BASE    0x01c13000

Тщательнее надо.
mantech
Цитата(aaarrr @ Jul 17 2018, 14:12) *
Код
USB_HCI0              0x01C14000
SW_PA_USB0_IO_BASE    0x01c13000

Тщательнее надо.


Из даташита:
USB OTG 0x01C1 3000---0x01C1 3FFF 4K
USB HCI 0x01C1 4000---0x01C1 4FFF 4K

Т.е. у них 0й порт не может работать в режиме хоста?? Не может такого быть, а если может, то в нем должно быть то же самое, что и в 1м + регистры, которые работают в режиме девайса, поэтому адрес 0х404 все-равно будет принадлежать OHCI 0.
Или там совсем все "по турецки" сделано??? Опять-же по этому в даташитах ни слова...

Цитата(__inline__ @ Jul 17 2018, 13:54) *
Вы тут были?
А ответов они не дали, потому что не умеют LCD по i8080 к v3s подрубать. И костылей тами много


Неа, я не силен в китайском biggrin.gif

А зачем к таким камням подключать такие дисплеи, когда в них есть хороший дисплейный контроллер RGB24, который к счастью хорошо описан в даташите??


ЗЫ. Кажется начинает доходить вся эта бредовая китайча... Правильно-ли я понимаю, в А13 есть 2 усб порта, первый, т.е. 0 - непойми чего, программнный порт, аля СТМ32, причем как в режиме девайса, так и хоста, как с ним работать - х.з. И какие там порты тоже непонятно, работа с ним похоже только в режиме фифо и т.п. PIO доступа, а вот второй порт т.е. 1 - это только хост, который совместим с EHCI специикацией, сам контроллер соотв. даташиту.
В этом случае вопрос, на первый порт я забью болт, т.к. даже вникать не хочу, как этот бред работает, а по второму - как настраивать его PHY ? Либо что-то писать в 0х404, но это вроде, как ОТГ порт, есть еще адрес 0х800, там вроде, как физика порта... Вообщем какой-то трэш crying.gif

Так, мысли вслух - уж ругаю я МХ6 за тормознутую память и нагрев, как плитки, но надо отдать должное - УСБ порт они сделали хороший, и описали его очень доступно - заработал с пол-оборота, тут - печаль, тоска...
aaarrr
Цитата(mantech @ Jul 17 2018, 16:04) *
Т.е. у них 0й порт не может работать в режиме хоста??

Может, но...

Цитата(mantech @ Jul 17 2018, 16:04) *
ЗЫ. Кажется начинает доходить вся эта бредовая китайча... Правильно-ли я понимаю, в А13 есть 2 усб порта, первый, т.е. 0 - непойми чего, программнный порт, аля СТМ32, причем как в режиме девайса, так и хоста, как с ним работать - х.з. И какие там порты тоже непонятно, работа с ним похоже только в режиме фифо и т.п. PIO доступа, а вот второй порт т.е. 1 - это только хост, который совместим с EHCI специикацией, сам контроллер соотв. даташиту.

Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть.

Цитата(mantech @ Jul 17 2018, 16:04) *
В этом случае вопрос, на первый порт я забью болт, т.к. даже вникать не хочу, как этот бред работает, а по второму - как настраивать его PHY ? Либо что-то писать в 0х404, но это вроде, как ОТГ порт, есть еще адрес 0х800, там вроде, как физика порта...

Все тут:
drivers/usb/host/sw_hci_sunxi.c

Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY.

Цитата(mantech @ Jul 17 2018, 16:04) *
Вообщем какой-то трэш

Дык сами выбрали такой путь sm.gif
mantech
Цитата(aaarrr @ Jul 17 2018, 18:29) *
Может, но...


Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть.


Все тут:
drivers/usb/host/sw_hci_sunxi.c

Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY.


Дык сами выбрали такой путь sm.gif


Суть в том, что EHCI совсем другая логика работы, через очереди и дескрипторы, а в этом трэше - надо поллить все это и перекачивать все пакеты, которые надо и не надо, соблюдать тайминги и пр... Вообщем ничего приятного...

Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ???

И еще вопросик, в догонку, работая с хостом в МХ6ом было сказано, что при подключении высокоскоростных устройств работает контроллер EHCI-совместимый, а низкоскоростных - EHCI аналог ОHCI контроллера с ремаппингом регистров, что я понял очень удобно, т.е. по-сути я работаю с одним контроллером, который выполняет функции скоростного и устаревшего с автопереключением, а как работать с раздельными? Переключение производить "вручную" или он сам переключает и мне надо только выбирать, с каким контроллером работать? Инициализировать их надо оба, как я понял...

И что делать с рутхабом? Он там есть вообще, судя по спецификации контроллеров - да, по факту - х.з.
aaarrr
Цитата(mantech @ Jul 17 2018, 20:11) *
Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ???

Три почти одинаковых PHY, один интерфейс - причем тут вещества? В 0x800 ничего не делается, его содержимое просто выводится в дебаг.
mantech
Цитата(aaarrr @ Jul 17 2018, 21:50) *
Три почти одинаковых PHY, один интерфейс - причем тут вещества? В 0x800 ничего не делается, его содержимое просто выводится в дебаг.


Так-то один ОТГ и один хост, не совсем чтобы одинаковые??

Вот эта функция вызывается при инициализации:

CODE
static void usb_passby(struct sw_hci_hcd *sw_hci, u32 enable)
{
unsigned long reg_value = 0;
unsigned long bits = 0;
static DEFINE_SPINLOCK(lock);
unsigned long flags = 0;

spin_lock_irqsave(&lock, flags);

bits = BIT(10) | /* AHB Master interface INCR8 enable */
BIT(9) | /* AHB Master interface burst type INCR4 enable */
BIT(8) | /* AHB Master interface INCRX align enable */
BIT(0); /* ULPI bypass enable */

reg_value = readl(sw_hci->usb_vbase + SW_USB_PMU_IRQ_ENABLE);

if (enable)
reg_value |= bits;
else
reg_value &= ~bits;

writel(reg_value, sw_hci->usb_vbase + SW_USB_PMU_IRQ_ENABLE);

spin_unlock_irqrestore(&lock, flags);

return;
}


А вот это "sw_hci->usb_vbase + SW_USB_PMU_IRQ_ENABLE" и есть адрес хоста +0х800 ...

В даташите на А13 об этом ни слова, а в V3s - "PHY Interface description..." на стр 390. И как это понимать??
aaarrr
Цитата(mantech @ Jul 17 2018, 22:59) *
Так-то один ОТГ и один хост, не совсем чтобы одинаковые??

Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY.

Цитата(mantech @ Jul 17 2018, 22:59) *
В даташите на А13 об этом ни слова, а в V3s - "PHY Interface description..." на стр 390. И как это понимать??

Как небольшие огрехи документации sm.gif Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное.

OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался,
как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить.
mantech
Цитата(aaarrr @ Jul 17 2018, 23:32) *
Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY.


Как небольшие огрехи документации sm.gif Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное.

OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался,
как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить.


Вот только б еще понять, что то, что "дернешь" из соседнего актуально и для того, с каким работаешь laughing.gif

Вот и дело то в том, что так же без проблем использовал да и по сей день пользуюсь усб стеком для МХ6, и поэтому решил и тут попробовать, но вот напоролся на грабли sad.gif

Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально..
mantech
Цитата(mantech @ Jul 18 2018, 08:35) *
Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально..


Выяснил, пока не включен клок OHCI регистры читаются (хотя х.з. читаются или нет - в результате одни нули, но не зависает) как только включаешь клок первое же чтение с адреса 0х404 и др. из пула OHCI - зависание...
Знатоки этих контроллеров, что это может быть такое, куда копать??
Genadi Zawidowski
по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort
mantech
Цитата(Genadi Zawidowski @ Jul 20 2018, 22:17) *
по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort


Вот почему нельзя?? Даже так, почему не виснет, при отключенном клоке? Вот просто сама суть процесса непонятна, я еще понимаю, если б писал в асинхронный регистр, где проц уходит в waitstate пока идет запись и т.к. что-то неправильно инициализировано, не выходит из него, но тут-то что??
Genadi Zawidowski
Да поставить печать чего-нибудбь внятного и вечный цикл в обработчики прерываний можете? Хоть убедитесь, по шине процессор держится или "ускакал" не туда...
mantech
Цитата(Genadi Zawidowski @ Jul 21 2018, 13:05) *
Да поставить печать чего-нибудбь внятного и вечный цикл в обработчики прерываний можете? Хоть убедитесь, по шине процессор держится или "ускакал" не туда...


С зависом разобрался, в китайском даташите был бит клока перепутан, поставил тот, что нужно стали читаться регистры, но статус не реагирует, когда вставляю флешку или мышку в порт, походу что-то не проинициализировано еще...
Вот не знаю, рутхаб надо каким-то образом инитить или достаточно того, что там по дефолту стоит?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.