|
|
  |
Allwinner A13 и др..., Описание или исходники инициализации USB |
|
|
|
Jul 17 2018, 10:54
|

Местный
  
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126

|
Вы тут были? https://debugdump.comМеня вежливо послали ковырять Linux BSP по моему вопросу: https://debugdump.com/viewtopic.php?id=900Лучше уже не придумать. А ответов они не дали, потому что не умеют LCD по i8080 к v3s подрубать. И костылей тами много
|
|
|
|
|
Jul 17 2018, 11:12
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(mantech @ Jul 17 2018, 13:09)  В качестве примера - запись в регистры PHY производится по адресу базовый адрес контроллера+0x404, притом, как в даташите - это регистр OHCI !!! Код USB_HCI0 0x01C14000 SW_PA_USB0_IO_BASE 0x01c13000 Тщательн ее надо.
|
|
|
|
|
Jul 17 2018, 13:04
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(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 подрубать. И костылей тами много Неа, я не силен в китайском А зачем к таким камням подключать такие дисплеи, когда в них есть хороший дисплейный контроллер RGB24, который к счастью хорошо описан в даташите?? ЗЫ. Кажется начинает доходить вся эта бредовая китайча... Правильно-ли я понимаю, в А13 есть 2 усб порта, первый, т.е. 0 - непойми чего, программнный порт, аля СТМ32, причем как в режиме девайса, так и хоста, как с ним работать - х.з. И какие там порты тоже непонятно, работа с ним похоже только в режиме фифо и т.п. PIO доступа, а вот второй порт т.е. 1 - это только хост, который совместим с EHCI специикацией, сам контроллер соотв. даташиту. В этом случае вопрос, на первый порт я забью болт, т.к. даже вникать не хочу, как этот бред работает, а по второму - как настраивать его PHY ? Либо что-то писать в 0х404, но это вроде, как ОТГ порт, есть еще адрес 0х800, там вроде, как физика порта... Вообщем какой-то трэш  Так, мысли вслух - уж ругаю я МХ6 за тормознутую память и нагрев, как плитки, но надо отдать должное - УСБ порт они сделали хороший, и описали его очень доступно - заработал с пол-оборота, тут - печаль, тоска...
Сообщение отредактировал mantech - Jul 17 2018, 13:33
|
|
|
|
|
Jul 17 2018, 15:29
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(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)  Вообщем какой-то трэш  Дык сами выбрали такой путь
|
|
|
|
|
Jul 17 2018, 17:11
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(aaarrr @ Jul 17 2018, 18:29)  Может, но... Да, нулевой порт отличается, а-ля STM. DMA там тоже есть, да не суть. Все тут: drivers/usb/host/sw_hci_sunxi.c Нетрудно заметить, что все пишется через 0x404 - это общий интерфейс к PHY. Дык сами выбрали такой путь  Суть в том, что EHCI совсем другая логика работы, через очереди и дескрипторы, а в этом трэше - надо поллить все это и перекачивать все пакеты, которые надо и не надо, соблюдать тайминги и пр... Вообщем ничего приятного... Да, я тоже догадывался, что общий, под какими веществами китаезы это придумывали непонятно, но не суть, а вот что тогда делается в 0х800 ??? И еще вопросик, в догонку, работая с хостом в МХ6ом было сказано, что при подключении высокоскоростных устройств работает контроллер EHCI-совместимый, а низкоскоростных - EHCI аналог ОHCI контроллера с ремаппингом регистров, что я понял очень удобно, т.е. по-сути я работаю с одним контроллером, который выполняет функции скоростного и устаревшего с автопереключением, а как работать с раздельными? Переключение производить "вручную" или он сам переключает и мне надо только выбирать, с каким контроллером работать? Инициализировать их надо оба, как я понял... И что делать с рутхабом? Он там есть вообще, судя по спецификации контроллеров - да, по факту - х.з.
Сообщение отредактировал mantech - Jul 17 2018, 17:20
|
|
|
|
|
Jul 17 2018, 19:59
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(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. И как это понимать??
Сообщение отредактировал mantech - Jul 17 2018, 20:04
|
|
|
|
|
Jul 17 2018, 20:32
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(mantech @ Jul 17 2018, 22:59)  Так-то один ОТГ и один хост, не совсем чтобы одинаковые?? Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY. Цитата(mantech @ Jul 17 2018, 22:59)  В даташите на А13 об этом ни слова, а в V3s - "PHY Interface description..." на стр 390. И как это понимать?? Как небольшие огрехи документации  Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное. OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался, как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить.
|
|
|
|
|
Jul 18 2018, 05:35
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(aaarrr @ Jul 17 2018, 23:32)  Так я и написал - почти. Вполне возможно, что и совсем одинаковые. Это же PHY. Как небольшие огрехи документации  Потому и коллекционирую даташиты на AW - иногда из соседнего можно почерпнуть что-то полезное. OFF: ох уж этот baremetal! Верите ли, до сегодняшнего дня в хвост и гриву использовал USB в режиме хоста и девайса, и даже не задумывался, как оно внутри устроено. Разве что конфигурацию endpoint'ов у устройства подстроил, чтобы нужную конфигурацию гаджета запустить. Вот только б еще понять, что то, что "дернешь" из соседнего актуально и для того, с каким работаешь Вот и дело то в том, что так же без проблем использовал да и по сей день пользуюсь усб стеком для МХ6, и поэтому решил и тут попробовать, но вот напоролся на грабли  Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально..
Сообщение отредактировал mantech - Jul 18 2018, 08:22
|
|
|
|
|
Jul 20 2018, 13:31
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(mantech @ Jul 18 2018, 08:35)  Кстати, есть-ли у кого мысли, что может "мешать" чтению OHCI регистров? Читаю с адреса база+0х00 - 0х50 все норм, а с адреса +0х400 и выше - виснет? Далее, регистры физики 0х800 и т.д. читаются нормально.. Выяснил, пока не включен клок OHCI регистры читаются (хотя х.з. читаются или нет - в результате одни нули, но не зависает) как только включаешь клок первое же чтение с адреса 0х404 и др. из пула OHCI - зависание... Знатоки этих контроллеров, что это может быть такое, куда копать??
|
|
|
|
|
Jul 21 2018, 06:23
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Genadi Zawidowski @ Jul 20 2018, 22:17)  по опыту с Cortex-A9: чтение откуда нельзя вызывает трап, например Data Abort Вот почему нельзя?? Даже так, почему не виснет, при отключенном клоке? Вот просто сама суть процесса непонятна, я еще понимаю, если б писал в асинхронный регистр, где проц уходит в waitstate пока идет запись и т.к. что-то неправильно инициализировано, не выходит из него, но тут-то что??
|
|
|
|
|
Jul 21 2018, 11:42
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

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