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

Частый гость
 
Группа: Свой
Сообщений: 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. Ошибки проявлялись на фазе начального коннекта при ряде специфических условий и при интенсивном обмене с хостом (знаю в деталях, ибо сам руку приложил к их обнаружению и идентификации). Сейчас все работает отлично. Размер кода не увеличился. Рекомендую обновить версию.
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Mar 20 2006, 10:47
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 26-07-05
Из: Киев, Украина
Пользователь №: 7 113

|
Цитата +extern unsigned usbCrc16(uchar __near *data, uchar len) Не компилируется в tiny - модели: Error[Pa043]: the keyword "__near" is not available with the current settings
|
|
|
|
|
Mar 20 2006, 14:08
|

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

|
Цитата(EWAVR @ Mar 20 2006, 12:47)  Цитата +extern unsigned usbCrc16(uchar __near *data, uchar len) Не компилируется в tiny - модели: Error[Pa043]: the keyword "__near" is not available with the current settings Это для меня сюрприз, придется обходить по другому. Я проверял на меге32, но в tiny. Не хочется переделывать асмовский код, хотя не столь и сложно. AT90S2313? Версия IAR?
|
|
|
|
|
Mar 20 2006, 16:30
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 26-07-05
Из: Киев, Украина
Пользователь №: 7 113

|
Да, at90s2313. IAR AVR 4.12A, есть для проверки 4.11A и 3.20D.
Сообщение отредактировал EWAVR - Mar 20 2006, 16:33
|
|
|
|
|
Mar 20 2006, 16:53
|

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

|
Да, действительно для AT90S2313 __tiny недоступно даже в виде исключения (документировано), вот не ожидал от IAR такой диверсии. Почему, спрашивается... Самый простой workaround - это вот такой: usbdrv.h: Код //extern unsigned usbCrc16(uchar *data, uchar len); extern unsigned usbCrc16(unsigned dptr, uchar len);
//extern unsigned usbCrc16Append(uchar *data, uchar len); extern unsigned usbCrc16Append(unsigned dptr, uchar len); usbdrv.c: Код // usbCrc16Append(&usbTxBuf1[1], len); usbCrc16Append((unsigned)(&usbTxBuf1[1]), len);
// usbCrc16Append(usbTxBuf + 1, len); usbCrc16Append((unsigned)(usbTxBuf + 1), len); Это для проверки. Вынуждает передать функции два байта в качестве указателя вместо одного. В дизассемблере код похож на правду, в железе не проверял. Решение не самое красивое, но работоспособное. Безусловно, оптимальнее переписать ассемблерные функции для решения проблемы, но автор едва ли согласится делать это в официальной версии. Потому пока прошу лишь проверить работоспособность. Во всяком случае, всегда есть возможность так и оставить для личных целей.
|
|
|
|
|
Mar 20 2006, 22:49
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 26-07-05
Из: Киев, Украина
Пользователь №: 7 113

|
Спасибо, все заработало( все так просто, сам мог бы догадаться!). Далее я попробовам перенести в IAR свой прект на tiny26. В нем использутся прерывание от АЦП, и линкер выдал следующее: Цитата Error[e16]: Segment INTVEC (size: 0x18 align: 0x1) is too long for segment definition. At least 0x4 more bytes needed. The problem occurred while processing the segment placement command "-Z(CODE)INTVEC=0-(_..X_INTVEC_SIZE-1)", where at the moment of placement the available memory ranges were "CODE:0-1,CODE:4-17" Reserved ranges relevant to this placement: CODE:0-1 ?FILL1 CODE:2-3 Absolute code from usbdrvasm CODE:4-17 ?FILL2 Ассемблерный код нагло залез в сегмент INTVEC. Разборки с директивами ассемблера показали, что в файле usbdrvasm.S в месте ASEG ORG INT0_vect + IVT_BASE_ADDRESS rjmp SIG_INTERRUPT0 нужно поменять ASEG на COMMON INTVEC, тогда линкуется без проблем. P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-}
Сообщение отредактировал EWAVR - Mar 20 2006, 22:56
|
|
|
|
|
Mar 21 2006, 08:27
|

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

|
Цитата(EWAVR @ Mar 21 2006, 00:49)  нужно поменять ASEG на COMMON INTVEC, тогда линкуется без проблем. Да, я тоже предпочел бы использовать INTVEC, но сразу как-то не проэкспериментировал, напоровшись на проблемы с ORG. Однозначно, что предложенный подход более грамотный. IVT_BASE_ADDRESS появилась ради размещения драйвера в boot area для создания загрузчиков. В варианте с INTVEC эта часть снова уходит в небытие. Цитата P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-} Но если замыкаться на IAR, то смысл в этом есть - появляется возможность разместить определенный код в мЕньшем устройстве. Остается лишь проблема, как красиво с минимумом правок решить проблему с передачей указателя. Ну что стоило поддержать __near для всех CPU...
|
|
|
|
|
Mar 22 2006, 12:09
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Уважаемые EWAVR & OSNWT Ну поделитесь же Вашими портами PowerSwitch для ИАР_а Ато читаю Вашу переписку, слюни текут! У самого опыта еще нету.
|
|
|
|
|
Mar 22 2006, 12:24
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата(osnwt @ Mar 21 2006, 10:27)  Цитата P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-} Но если замыкаться на IAR, то смысл в этом есть - появляется возможность разместить определенный код в мЕньшем устройстве. Остается лишь проблема, как красиво с минимумом правок решить проблему с передачей указателя. Ну что стоило поддержать __near для всех CPU... Ох, господа, не надеялся я бы так на T26. Недавно писал про глюки со старшим байтом X, так вот действительно: Цитата If you use
LD r16,X
then you can use XH (r27) to something else, if you use
LD r16, X+
XL is incremented and XH is reset. I can see that the description in the instruction set is a bit unclear, but you have to believe me in that this is how it is desgined to work ( I double checked with the IC-designers) and that it is not a bug. Это я от Atmel'а ответ получил... Особенно убивает последняя фраза про то, что так задумано, а в описании комманд - немного ошибочно  Мне пришлось из-за этого ПРИНУДИТЕЛЬНО включить для T26 режим near, точнее выбрать в опциях проекта не конкретно проц, а модель -v1.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Mar 22 2006, 15:20
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Все! Откомпилил PowerSwitch в ИАР_е под ATMEGA8535 , слепил драйвера в LIBUSB-WIN32, проинсталил, подключил, есть в системе устройство-PowerSwitch. Теперь не могу (не знаю чем) скомпилить commandline/powerswitch.c любые попытки - море ошибок. Вижу, Вы достаточно опытные спецы, не расскажете ли как с этим девайсом пообщаться из-под DELPHI5? C IgorPlug (USBtoRS232) имею некотрый опыт.
|
|
|
|
|
Mar 22 2006, 16:04
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 26-07-05
Из: Киев, Украина
Пользователь №: 7 113

|
Никаких проблем с компиляцией, недостающие файлы usb.h и libusb.lib берутся в дистрибутиве libusb-win32. Компилировал Borland C++ 5.5 из командной строки: bcc32.exe powerswitch.c libusb.lib
Сообщение отредактировал EWAVR - Mar 22 2006, 16:07
|
|
|
|
|
Mar 22 2006, 17:37
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Нашел ВС++ 5.2 Установил. Скомпилил. 2 WARNING: C:\...werSwitch.2006-03-14\commandline>bcc32.exe powerswitch.c libusb.lib Borland C++ 5.2 for Win32 Copyright © 1993, 1997 Borland International powerSwitch.c: Warning powerSwitch.c 127: 'handle' is assigned a value that is never used in function main Turbo Link Version 2.0.68.0 Copyright © 1993,1997 Borland International Warning: Extern '_usb_busses' was not qualified with __import in module powerSwitch.c Получил екзешник 61440 байт. Подключил устройство. на строку "powerSwitch on 0 2.5" получаю: powerSwitch.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. (WINXP SP1 rus)
|
|
|
|
|
Mar 22 2006, 19:58
|

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

|
Цитата(aleksey_g @ Mar 22 2006, 14:09)  Ну поделитесь же Вашими портами PowerSwitch для ИАР_а Алексей, отправить PM не удалось, какая-то ерунда с сервером. Пишу тут. К сожалению, я не занимался попытками полноценно скомпилировать PowerSwitch под IAR. Я просто раскрутил, закомментировал вотчдоги и т.п., проверил, что собирается в tiny, и стер. Как я понял, проблема уже решена. Насчет командной строки то же самое: я уже писал на форуме, что варианты под libusb мне не интересны на данном этапе, и примеры приложений obdev я не компилировал. Я использовал для своих целей основу из Automator, и собирал ее под VisualStudio 6. Но собралось оно не сразу, а я вообще переписал приличный кусок. Так что готовыми решениями стандартных примеров не порадую, увы. Да и интереснее самому разобраться. А, главное, полезнее. Удачи!
|
|
|
|
|
Mar 23 2006, 08:23
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Олег! Ерунда с сервером похоже есть! ERROR The requested URL could not be retrieved -------------------------------------------------------------------------------- While trying to retrieve the URL: http://electronix.ru/forum/index.php? The following error was encountered: Zero Sized Reply Squid did not receive any data for this request Но ко мне письма пришли, надеюсь к Вам тоже.
|
|
|
|
|
Mar 23 2006, 19:08
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 26-07-05
Из: Киев, Украина
Пользователь №: 7 113

|
Цитата(aleksey_g @ Mar 22 2006, 21:37)  Подключил устройство. на строку "powerSwitch on 0 2.5" получаю: powerSwitch.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. Есть маленькая хитрость: выравнивание данных нужно включить по границе байта (data align=byte, ключ компиляции -a1 или -a-). Сам чуть не поседел, пока нашел. А command-line-only BC++ 5.5 можно скачать с сайта Borland.
Сообщение отредактировал EWAVR - Mar 23 2006, 19:10
|
|
|
|
|
Mar 24 2006, 08:48
|

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

|
EWAVR,
если есть возможность, прошу проверить работоспособность экспериментальной версии порта USBDRV на аппаратном tiny контроллере (tiny26, 90s2313 или т.п.). Ссылка на порт в PM. Это приватный билд, его нет смысла хранить (тем более, в нем есть кое-что неучтенное). Если будет все нормально, то будет официальная версия с поддержкой tiny.
У меня оно работает и в small, и в tiny на ATmega32 (код отличается на 101 байт на очень малой программе), но на маленьких контроллерах не тестировал.
Особенности: необходимость определения регистров работы с прерываниями для разных контроллеров (см. файл usbconfig-prototype.h в конце). К сожалению, #ifdef в IAR не работает для SFR, потому придется явно задать нужные регистры. Что можно задать - можно посмотреть в коде usbdrv.h, где возможность определения уже учтена.
Просьба не распространять эту версию - если с ней проблем не будет, то на следующей неделе будет официальная на сайте.
Прошу сообщить результат по мере возможности, или если такой возможности нет - то тоже сообщить, чтобы передать автору.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|