реклама на сайте
подробности

 
 
> Вышла очередная версия AVR-USB драйвера от Objective Development, Исправлена пара серьезных багов, рекомендуется обновиться
osnwt
сообщение Mar 16 2006, 10:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Вышла версия программного USB драйвера для большинства AVR контроллеров.
См сайт автора.

Самая последняя версия всегда находится в составе reference-проекта PowerSwitch.

Изменения в текущей версии:
Цитата
* Release 2006-03-14

- Added IAR compiler compatibility to USB driver (not the PowerSwitch project).
Thanks to Oleg Semyonov for contributing this port!
- Major Bugfixes in the low level parts of the USB driver. See the driver's
Changelog for details.

Цитата
Changelog:

- Give a compiler warning when compiling with debugging turned on.
- Added Oleg Semyonov's changes for IAR-cc compatibility.
- Added new (optional) functions usbDeviceConnect() and usbDeviceDisconnect()
(also thanks to Oleg!).
- Rearranged tests in usbPoll() to save a couple of instructions in the most
likely case that no actions are pending.
- We need a delay between the SET ADDRESS request until the new address
becomes active. This delay was handled in usbPoll() until now. Since the
spec says that the delay must not exceed 2ms, previous versions required
aggressive polling during the enumeration phase. We have now moved the
handling of the delay into the interrupt routine.
- We must not reply with NAK to a SETUP transaction. We can only achieve this
by making sure that the rx buffer is empty when SETUP tokens are expected.
We therefore don't pass zero sized data packets from the status phase of
a transfer to usbPoll(). This change MAY cause troubles if you rely on
receiving a less than 8 bytes long packet in usbFunctionWrite() to
identify the end of a transfer. usbFunctionWrite() will NEVER be called
with a zero length.

Ошибки проявлялись на фазе начального коннекта при ряде специфических условий и при интенсивном обмене с хостом (знаю в деталях, ибо сам руку приложил к их обнаружению и идентификации). Сейчас все работает отлично. Размер кода не увеличился. Рекомендую обновить версию.
Go to the top of the page
 
+Quote Post
6 страниц V  « < 2 3 4 5 6 >  
Start new topic
Ответов (45 - 59)
aleksey_g
сообщение Apr 13 2006, 12:56
Сообщение #46


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



smile3046.gif
После некоторых танцев с бубном, удалось запустить проект http://www.xs4all.nl/~ynlmns/ ,
В котором реализована возможность работы через фришные libusb-win32-bin-0.1.8.0
http://prdownloads.sourceforge.net/libusb-...tar.gz?download

В самом проекте определяем тип type PByte=^byte;
После этого компилируется в IDE (WINAVR).
Берем сгенерированый инф-визардом из libusb-win32-device-bin-0.1.10.1 http://prdownloads.sourceforge.net/libusb-...tar.gz?download
INF-файл, в котором меняем все libusb0.sys на libusbfl.sys, прикладываем в этот же каталог
libusb0.dll и libusbfl.sys от версии libusb-win32-bin-0.1.8.0 и получаем пакет установки драйверов.
С этими драйверами уже работает USBTEST.EXE от http://www.xs4all.nl/~ynlmns/
Проблема была только в версии драйверов.
Теперь любители дельфей смогут свободно работать с Powerswitch_ем.

Вот готовые драйвера:Прикрепленный файл  libusb_win32_bin_0.1.8.0.rar ( 28.16 килобайт ) Кол-во скачиваний: 277

a14.gif
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 14 2006, 13:02
Сообщение #47


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



smile3046.gif

А вот и сама рулилка Powerswitch_ем. С исходниками под дельфи5.
Драйвера в прошлой мессаге.


Прикрепленный файл  PROJEKT.zip ( 208.17 килобайт ) Кол-во скачиваний: 268
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 17 2006, 17:47
Сообщение #48


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



smile3046.gif

Продолжаем "мучить Powerswitch"!

Теперь он может (на меге8535) измерять напряжение по 8 каналам. smile.gif
Выполняет команду 4(вернуть напряжение) с параметром data(номер опрашиваемого канала 0..7)
Возврвщаемые данные (Code) (диапазон 0-1023) пропорциональны напряжению, приложенному
к входам ADC0-ADC7 микроконтроллера (см. дельфийский проект)
Опорным для ацп выбрано внешнее AREF.

Прилагается проект под ИАР[attachment=5124:attachment]
И проект под Дельфи5(в исходниках) [attachment=5126:attachment]

За оптимальность и "красоту" просьба ногами не пинать!
Драйвера выше.
Испытано на WINXPSP1_rus
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 17 2006, 17:56
Сообщение #49


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



smile3046.gif

Продолжаем "мучить Powerswitch"!

Теперь он может (на меге8535) измерять напряжение по 8 каналам. smile.gif
Выполняет команду 4(вернуть напряжение) с параметром data(номер опрашиваемого канала 0..7)
Возврвщаемые данные (Code) (диапазон 0-1023) пропорциональны напряжению, приложенному
к входам ADC0-ADC7 микроконтроллера (см. дельфийский проект)
Опорным для ацп выбрано внешнее AREF.

Прилагается проект под ИАР[attachment=5124:attachment]
И проект под Дельфи5(в исходниках) [attachment=5126:attachment]

За оптимальность и "красоту" просьба ногами не пинать!
Драйвера выше.
Испытано на WINXPSP1_rus


Извиняюсь за дубль (выше).
Опять глюки сервера (Zero Sized Reply)

Прилагается проект под ИАРПрикрепленный файл  POWERSWITCH.rar ( 109.2 килобайт ) Кол-во скачиваний: 305

И проект под Дельфи5(в исходниках)Прикрепленный файл  POWERSWITCHLIBUSB.rar ( 180.31 килобайт ) Кол-во скачиваний: 265
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 20 2006, 17:28
Сообщение #50


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



При перекомпиляции Powerswitcha IAR_ом под мегу48 компилятор ругается:
Error[e16]: Segment TINY_Z (size: 0x16 align: 0) is too long for segment definition. At least 0x15 more bytes
needed. The problem occurred while processing the segment placement command
"-Z(DATA)TINY_I,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND", where at the moment of placement the available
memory ranges were "DATA:100-100"
Reserved ranges relevant to this placement:
DATA:100-100 TINY_I

Описание из iarcompat.h:
#ifndef USB_BUFFER_SECTION
# define USB_BUFFER_SECTION "TINY_Z" /* if user has not selected a named section */
#endif

При чем avr-gcc использует описание сегмента .dss и работает правильно.
Цитата из usbconfig-prototype.h
/* #define USB_BUFFER_SECTION ".bss" */
/* The USB receive buffer (variable "usbRxBuf") with a length of 22 bytes
* MUST NOT cross a 256 byte boundary. We have introduced this configuration
* option to allow you to change the data segment where this buffer is
* allocated. If you have problems with the default segment (start of .bss),
* you may change this setting. See the comment in usbdrv.h for details.
* On IAR C, the default is the TINY_Z segment (first 256 bytes). You must
* change this default for devices which don't have RAM below 0x100.
*/

Вопрос- Как описать этот сегмент, чтобы иар не ругался? help.gif
Go to the top of the page
 
+Quote Post
osnwt
сообщение Apr 20 2006, 18:00
Сообщение #51


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(aleksey_g @ Apr 20 2006, 20:28) *
Описание из iarcompat.h:
#ifndef USB_BUFFER_SECTION
# define USB_BUFFER_SECTION "TINY_Z" /* if user has not selected a named section */
#endif

Вопрос- Как описать этот сегмент, чтобы иар не ругался? help.gif


Буфер для приема данных должен быть размещен так, чтобы не пересекать границу 256 байт (то есть, его адрес должен быть полностью зависим только от младшего байта адреса, старший должен быть константой). В простейшем случае это может быть в IAR гарантировано размещением в TINY_x сегментах, которые гарантированно находятся в пределах младших 256 байтов адресного пространства.

В ряде контроллеров RAM находится, начиная с адреса 0x100 (то есть, там TINY области, как таковой, нет вообще). Очевидно, что невозможно разместить буфер в области нулевой длины.

Решения два:

Поставить #define USB_BUFFER_SECTION "NEAR_Z" где-нибудь в usbconfig.h, чтобы явно заказать размещение в одном из существующих стандартных сегментов достаточной длины. При этом важно после линковки убедиться, что весь указанный буфер полностью размещен так, чтобы не пересекать и даже не касаться границы 256-байтной области, например, полностью лежать в пределах 0x100-0x1fe включительно (1ff уже не допустим, так как при инкременте будет изменен старший байт адреса).

Процедура заглядывания в файл линковки каждый раз способна утомить, потому есть второй вариант - явно описать свой собственный сегмент с явно заданными границами адресов, удовлетворяющими названным требованиям. В этом случае линкер будет сам следить за их выполнением, но это может в определенных случаях (при неправильном описании) снизить эффективность размещения сегментов.

О том, как описывать сегменты в командной строке линкера (которую можно просто добавить в файл конфигурации проекта в качестве дополнительных опций) - см. документацию на линкер.
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 21 2006, 11:32
Сообщение #52


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



Цитата(osnwt @ Apr 20 2006, 21:00) *
Решения два:

Поставить #define USB_BUFFER_SECTION "NEAR_Z" где-нибудь в usbconfig.h, чтобы явно заказать

явно описать свой собственный сегмент с явно заданными границами адресов, удовлетворяющими


С "NEAR_Z" не работает!
Мой вариант тоже.
Устройство через 5 раз определяется виндой, но работать отказывается.

Может не правильно понял?
скопировал lnkm48s.xcl в директорию проекта.
в нем описал свой сегмент -Z(DATA).bss=100-116 (с запвсом!)
.bss для совместимости с avr-gcc.
project/options/linker/config установил галку Override default.
Указал путь к своему lnkm48s.xcl
ИАР_ом компилируеися, но не работает. avr-gcc компилирует и устройство нормально работает.
Проект привел в такой вид, чтобы он мог компилироваться и иаром и avr-gcc

Где копать?

на всякий случай исходникиПрикрепленный файл  m48.rar ( 25.01 килобайт ) Кол-во скачиваний: 150
Go to the top of the page
 
+Quote Post
osnwt
сообщение Apr 21 2006, 11:56
Сообщение #53


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



#define TEST_DRIVER_SIZE

определенное в коде - это так и задумано? Так и работает? Чудеса...

В первом приближении причин не увидел. Попробуй пообщаться с EWAVR - у него проект в tiny под IAR заработал.
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 21 2006, 12:19
Сообщение #54


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



Цитата(osnwt @ Apr 21 2006, 14:56) *
#define TEST_DRIVER_SIZE

определенное в коде - это так и задумано? Так и работает? Чудеса...


Именно!
В авторском варианте при этом не компилится usbFunctionSetup с функциями, а только usbPoll();
я же туда добавил ECHO.
И работает!
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Apr 25 2006, 07:09
Сообщение #55


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



Для скачавших Powerswitchlibusb.rar, рекомендуется заменить в UNIT1.PAS строку
buffer:array[0..2] of byte; на buffer:array[0..1] of byte;
[0..2]-это излишество, да и работает более медленно.
Go to the top of the page
 
+Quote Post
Георгий
сообщение Jan 9 2007, 12:30
Сообщение #56


Местный
***

Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957



На базе драйвера разработал USB вольтметр (USB драйвер и сама программа свои, включено автоопределение подключения-отключения устройства), все прекрасно работает на компах с USB 1.1, но не работает на компах с USB2, устройство вообще не определяется компом? В чем могут быть грабли?


--------------------
Обычно последним смеется тот, кто хуже соображает!
Go to the top of the page
 
+Quote Post
Spider
сообщение Jan 20 2007, 19:10
Сообщение #57


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Ребят а не поможете создать джойстик? Я вот сижу и пытаюсь разобраться с HID. И не могу прикинуть как же всётаки объяснить сколько скнопок и прочего на джойстике.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 20 2007, 19:16
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Георгий @ Jan 9 2007, 16:30) *
На базе драйвера разработал USB вольтметр (USB драйвер и сама программа свои, включено автоопределение подключения-отключения устройства), все прекрасно работает на компах с USB 1.1, но не работает на компах с USB2, устройство вообще не определяется компом? В чем могут быть грабли?
В смысле не определяет? вообще не видит, или говорит Unknown device? У меня прекрасно видится на любых версиях портов - пробовал на разных платах. ОСи пробовал 98/МЕ/2000/ХР


--------------------
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jan 20 2007, 19:39
Сообщение #59


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(Alexey Belyaev @ Jan 20 2007, 18:10) *
Ребят а не поможете создать джойстик? Я вот сижу и пытаюсь разобраться с HID. И не могу прикинуть как же всётаки объяснить сколько скнопок и прочего на джойстике.

На 100% однозначно этого нигде нет - есть только документ с www.usb.org, описывающий структуру HID Report Descriptor (крайне поверхностно), а также утилита для генерации этих самых дескрипторов (лежит там же).

Самый простой вариант - найти дескриптор устройства, похожий на тот, что хочется сделать. И начать экспериментировать с ним.

Еще вариант - посмотреть, например, на проекты на странице http://obdev.at/products/avrusb/projects.html, реализующие SNES/NES gamepad to USB adapter и PPM RC to USB Interface на базе этого драйвера. Последний названный - это мой проект, реализующий просто джойстик и джойстик с кнопками для авиамодельных симуляторов. Наряду с декодером PPM сигнала в нем предусмотрено использование АЦП ATmega8 для реализации джойстика с 8-ю осями. Кнопки в версии с кнопками просто дублируют аналоговые каналы. После публикации оказалось, что этот вариант бесполезен, поскольку кнопки мешают калибровке осей в силу своей реализации. Но если их формировать не так, как там сделано, а путем чтения физических пинов портов, то все будет нормально.

Есть и другие подобные проекты в интернете, где можно подсмотреть структуру HID Report Descriptor.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jan 20 2007, 19:48
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(osnwt @ Jan 20 2007, 23:39) *
На 100% однозначно этого нигде нет - есть только документ с www.usb.org, описывающий структуру HID Report Descriptor (крайне поверхностно), а также утилита для генерации этих самых дескрипторов (лежит там же).
Кстати, по поводу дескрипторов и драйверов, раз уж встретились smile.gif



Хотелось бы узнать про вот такую строчку в драйвере, при использовании устройства как USB CDC ACM class - что то она мне не внушает доверия, может поясните:

Код
if(intr3Status != 0 && usbInterruptIsReady3())
{
      static UCHAR serialStateNotification[10] = {0xa1, 0x20, 0, 0, 0, 0, 2, 0, 3, 0};
      if(intr3Status == 2)
             usbSetInterrupt3(serialStateNotification, 8);
      else
             usbSetInterrupt3(serialStateNotification+8, 2);
       intr3Status--;
}


Это отправляется на запрос SET_CONTROL_LINE_STATE... По идее (вернее по спецификации на USB CDC), устройство должно ответить нулевым пакетом...


--------------------
Go to the top of the page
 
+Quote Post

6 страниц V  « < 2 3 4 5 6 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01515 секунд с 7
ELECTRONIX ©2004-2016