Миландр

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

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 194 ]  На страницу 1, 2, 3, 4, 5 ... 13  След.
Автор Сообщение
 Заголовок сообщения: 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
Сообщения: 1282
Откуда: АО "ПКК Миландр"
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 КБ]
Скачиваний: 703
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 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 КБ]
Скачиваний: 738
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 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 КБ]
Скачиваний: 588
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 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 КБ]
Скачиваний: 547
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 2010-мар-17 18:12 
Не в сети

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


Вложения:
USB.rar [269.6 КБ]
Скачиваний: 892
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 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 КБ]
Скачиваний: 550
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Адресация device
СообщениеДобавлено: 2010-мар-18 13:13 
Не в сети

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

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

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


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


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

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


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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 194 ]  На страницу 1, 2, 3, 4, 5 ... 13  След.

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: Google [Bot] и гости: 3


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB