Перейти к содержанию
    

USB HID device на SAM7S256

Привет всем :laughing: и с наступающим Новым годом.

 

Решил разобраться с USB на этом камне, пока в STM32F4 на базе Discovery потихоньку въезжаю :rolleyes: .

Сделал аналог девайса, в принципе, нормально работающего на меге 8 и USB ObDev. Железка функционально достаточно примитивна - включает-выключает нагрузку ~220в по командам с компа. Плюс разные таймерные навороты типа включить/выключить через указанное время.

Управляющая прога на компе одна и та же, т.к. PID, VID, все команды/ответы и прочее я специально скопировал один-в-один из AVR-овского варианта.

 

Взял за основу IAR-овский пример usb-device-hid-transfer-project, выкинул из него требуху (моргание светодиодиками, спячку и проч.). Pullup на D+ у меня сейчас фиксированный (ног проца не хватает :rolleyes: ), поэтому соответствующий ногодрыг тоже нашёл и выкинул.

Прошил, включил - повисло наглухо. Даже часики на дисплее не тикают. Комп, естественно, его не опознал.

 

Но это уже проходили - виной всему макросы TRACE_XXX, коих там как у собаки блох. Они вызывают printf, которая и виснет. Хотя DBGU включён, сконфигурирован и нормально работает на моих самописных функциях. Короче, все эти TRACE-ы я прикрыл, железяка ожила, комп её увидел и без проблем опознал.

Так что завелось почти с пол-оборота :rolleyes: .

 

Следующий этап - реализация функционала.

Написал в main:

 

    if ( USBD_GetState ( ) < USBD_STATE_CONFIGURED )
      continue;
    
    len = HIDDTransferDriver_Read ( iBuffer, 64 );
    if ( len != 0 )
    { // комп прислал данные
      // выполнение команды
      DoCommand ( );
      
      // отослать ответ
      HIDDTransferDriver_Write ( oBuffer, 64, 0, 0 );
      
      LCD_DrawString ( "Read", 1, 80, 0xFFE0, 0x0000, 1 );  
    } // if

    len = HIDDTransferDriver_ReadReport ( iBuffer, 64 );
    if ( len != 0 )
    { // комп прислал данные
      // выполнение команды
      DoCommand ( );
      
      // отослать ответ
      HIDDTransferDriver_Write ( oBuffer, 64, 0, 0 );
      
      LCD_DrawString ( "Report", 1, 80, 0xFFE0, 0x0000, 1 );  
    } // if

 

То есть приём того, что прислал комп, выполнение команд и отсылка ответа. DoCommand просто отрабатывает содержимое iBuffer, результат кладёт в oBuffer.

На дисплее строки "Read" и "Report" не появляются, значит в эти if-ы он не попадает.

Вопрос - почему?

 

Прога на компе шлёт данные через HidD_SetFeature - http://msdn.microsoft.com/ru-ru/library/wi...4(v=vs.85).aspx .

Как я понимааю, должно было в HIDDTransferDriver_ReadReport попасть ....

 

Все программы, и для МК, и для компа писал сам.

В USB снифферы пока не лазил, не успел :( .

 

Если надо, могу другие аспекты уточнить.

 

Спасибо.

 

PS. Само по себе USB в проце живое. Samba по USB прекрасно работает. Правда я ею не пользуюсь из-за того дурацкого глюка про 100 раз. Шью JTAG через LPT порт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С наступающим :)

 

Доколупал я это дело ...

В прошивке проца оказалось всё нормально. Ошибка была в софте компа. Точнее даже не ошибка, а привязка того софта к "особенностям" AVR-USB Obdev. Если совсем точно - в размере конечной точки.... И в репортах.

Отчасти помогла статья - http://microsin.ru/content/view/955/44/ . Тамошние примеры я скачать с долбаного депозита не сумел (не могли чего получше найти, блин :) ), пришлось самому изучать пример HidTest :) . Но и тот оказался слегка "недобитым" - тупо вис на считывании данных из устройства.

 

Пока заработал только обычный обмен (WinAPI-шные ReadFile/WriteFile), репорты в процессе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...