Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-окт-23 16:52

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 206 сообщений ]  На страницу 1 2 3 4 514 »
Автор Сообщение
 Заголовок сообщения: USB
СообщениеДобавлено: 2010-фев-24 21:50 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
При попытке запустить код из MK1986BE_VirtuaPort сразу же выяснилось, что циклится код
while ((SC_INTERRUPT_STATUS_REG & 0x04)!= 0x04) {}// wait RESET

То есть в SC_INTERRUPT_STATUS_REG не попадает состояние
сброса на шине USB...


Вернуться к началу
 Заголовок сообщения: Re: USB
СообщениеДобавлено: 2010-фев-25 11:04 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1318
Откуда: АО "ПКК Миландр"
J писал(а):
При попытке запустить код из MK1986BE_VirtuaPort сразу же выяснилось, что циклится код
while ((SC_INTERRUPT_STATUS_REG & 0x04)!= 0x04) {}// wait RESET

То есть в SC_INTERRUPT_STATUS_REG не попадает состояние
сброса на шине USB...
Рассылаемый ранее пример был предназначен для FPGA макета.
Для реального кристалла необходимо корректно запустить тактовые частоты для USB.

В аттаче main.c с работающим на кристалле кодом.
Добавлена инициализация USB_PLL для формирования 48 МГц от HSE генератора.

В заголовке дополнены новые регистры
#define PER_CLOCK 	(*((volatile unsigned long *)0x4002001C))
#define TIM_CLOCK 	(*((volatile unsigned long *)0x40020024))

#define CPU_CLOCK 		(*((volatile unsigned long *)0x4002000C))
#define CLOCK_STATUS 	(*((volatile unsigned long *)0x40020000))
#define PLL_CONTROL 	(*((volatile unsigned long *)0x40020004))
#define USB_CLOCK 		(*((volatile unsigned long *)0x40020010))
#define HS_CONTROL 	(*((volatile unsigned long *)0x40020008))
В теле main добавлена инициализация
	PER_CLOCK = 0xFFFFFFFF;

	HS_CONTROL  = 0x0001; // HSE on
	while (~CLOCK_STATUS & 0x04) {} //Wait Ready from HSE
	USB_CLOCK   = 0x0003; // Switch fosc on PLL
	PLL_CONTROL = 0x050; // USB Mul = 6 x 8 Mhz = 48 MHz
	PLL_CONTROL = 0x051; // USB on
	PLL_CONTROL = 0x053; // USB PLL reload 
	PLL_CONTROL = 0x051; // USB PLL work 
	while (~CLOCK_STATUS & 0x01) {} //Wait Ready from USB PLL
	USB_CLOCK   = 0x0106; // Switch on PLL
Вроде работает, но опять таки - это наш проектик был предназначен для проверки USB, т.е. пакеты ходят - работает. Реально код должен быть сложнее - должны обрабатываться программно различные сбойные ситуации - дата тогелинг, всевозможные перезапросы дискриптора и так далее.....


Вложения:
main.rar [2.49 КБ]
974 скачивания
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-фев-25 11:25 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Спасибо, буду пробовать.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-15 10:55 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Состояние RESET на шине ловится, но это и всё, чего удалось добиться...
Как вообще можно определить, что на endpoint0 пришел setup-пакет? Нет ни соответствующего флага, ни прерывания, все флаги/прерывания только по завершению передачи, да и те кучей, а не по endpointам.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-16 13:56 
Не в сети

Зарегистрирован: 2010-янв-22 14:20
Сообщения: 23
Откуда: АО "ПКК Миландр"
Если макет определяется как неизвестное устройство USB, то прблема, наверное, в отсутствии драйвера CDC-устройства в системе. Попробуйте выполнить обновления драйвера для неизвестного устройства USB.


Вложения:
Driver_USB_CDC.rar [14.82 КБ]
1022 скачивания
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-16 14:36 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
У меня установлена более поздняя версия драйвера.
И драйвер этот подсовывается, когда хост получает дескриптор, у меня же даже setup-транзакция на запрос дескриптора usb-контроллером не ловится


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-17 11:00 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Вот простейшя программка, которая устанавливает режим Device, full-speed, ждет ресета на шине, а затем проверяет флаг готовности данных (ждем request на endpoint0). Флаг готовности не появляется никогда, после некоторого времени винда говорит, что на шине обнаружено неправильно работающее устройство.
Плата запитана от внешнего источника, usb-кабель втыкается после запуска программы в отладчике.


Вложения:
Main.zip [2.04 КБ]
860 скачиваний
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-17 18:03 
Не в сети

Зарегистрирован: 2010-янв-22 14:20
Сообщения: 23
Откуда: АО "ПКК Миландр"
Подправил строки кода, в котрых выполняется инициализация регистра PLL_CONTROL. В результате их выполнения (в первоначальной редакции) PLL_CONTROL = 0x0305. Затирался коэффициент умножения UsbPLL.
PLL_CONTROL = (3 << 8) | (5 << 4);// в PLL умножение на 3+1
PLL_CONTROL = (3 << 8) | (5 << 4) | PLL_CPU_ON | PLL_USB_ON;//вкл PLL
PLL_CONTROL = (3 << 8) | (5 << 4) | PLL_CPU_ON | PLL_CPU_PLD | PLL_USB_ON | PLL_USB_PLD;
PLL_CONTROL = (3 << 8) | (5 << 4) | PLL_CPU_ON | PLL_USB_ON;
Теперь флаг выполнения транзакции устанавливается.


Вложения:
main.rar [2.7 КБ]
806 скачиваний
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-17 18:12 
Не в сети

Зарегистрирован: 2010-янв-22 14:20
Сообщения: 23
Откуда: АО "ПКК Миландр"
Новый вариант спецификации на Usb. Добавлено описание функционирования блока в режимах host и device. Надеюсь, что теперь будет понятней, что происходит в момент транзакций, какой пакет пришел и т.д.


Вложения:
USB.rar [269.6 КБ]
1245 скачиваний
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-17 18:22 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Спасибо большое! Надеюсь, теперь дело двинется :)


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-17 20:42 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
А вот теперь ой...
Число принятых байт в пакете оказывается не в
EP0_RX_FIFO_DATA_COUNT __attribute__((at(0x40010188))), как должен бы быть по документации,
а в
EP0_RX_FIFO_DATA_COUNTH _attribute__((at(0x4001018C)))

В EP0_RX_FIFO_DATA_COUNT лежит 0


Вернуться к началу
 Заголовок сообщения: Адресация device
СообщениеДобавлено: 2010-мар-18 12:51 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
На данный момент успешно получен и детектирован request на установку адреса устройства (в пакете адрес 1, что в общем-то логично).
После приема запроса на хост отправляется ZeroLength с DATA0, ACK от хоста приходит.
После этого полученный адрес записывается в регистр SC_ADDRESS, а дальше контроллер перестает подавать признаки активности, в регистре INTERRUPT_STATUS кроме 8, ничего больше не появляется... Ощущение такое, что все последующие пакеты он отфильтровывает как чужие.

К слову, в вашем примере, по крайней мере так он у меня оттрейсился, установка адреса производится в ответ на запрос дескриптора, а не установку адреса, а в том запросе второй байт нулевой...

Текст прилагаю, посмотрите, пожалуйста.
Заранее спасибо.


Вложения:
Main.zip [2.83 КБ]
805 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: Адресация device
СообщениеДобавлено: 2010-мар-18 13:13 
Не в сети

Зарегистрирован: 2009-май-22 09:01
Сообщения: 1318
Откуда: АО "ПКК Миландр"
J писал(а):
На данный момент успешно получен и детектирован request на установку адреса устройства (в пакете адрес 1, что в общем-то логично).
После приема запроса на хост отправляется ZeroLength с DATA0, ACK от хоста приходит.
После этого полученный адрес записывается в регистр SC_ADDRESS, а дальше контроллер перестает подавать признаки активности, в регистре INTERRUPT_STATUS кроме 8, ничего больше не появляется... Ощущение такое, что все последующие пакеты он отфильтровывает как чужие.

К слову, в вашем примере, по крайней мере так он у меня оттрейсился, установка адреса производится в ответ на запрос дескриптора, а не установку адреса, а в том запросе второй байт нулевой...

Текст прилагаю, посмотрите, пожалуйста.
Заранее спасибо.
Возможно дело в том, что после запроса адреса Host запрашивает нулевой пакет со старым 0х00 адресом ?


Вложения:
[ attachment ]
nullreq.JPG [ 122.39 КБ | 23734 просмотра ]
Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-18 13:25 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Zerolength-пакет был отправлен, и хост выдал на него ACK


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-18 13:54 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Так, а хост снова просит IN по нулевому адресу.
Может быть, я просто не понимаю, как послать пакет нулевой длины?


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 206 сообщений ]  На страницу 1 2 3 4 514 »

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB