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

 
 
> Вышла очередная версия 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  < 1 2 3 4 > »   
Start new topic
Ответов (15 - 29)
EWAVR
сообщение Mar 20 2006, 10:47
Сообщение #16


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
osnwt
сообщение Mar 20 2006, 14:08
Сообщение #17


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

Группа: Свой
Сообщений: 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?
Go to the top of the page
 
+Quote Post
EWAVR
сообщение Mar 20 2006, 16:30
Сообщение #18


Участник
*

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



Да, at90s2313. IAR AVR 4.12A, есть для проверки 4.11A и 3.20D.

Сообщение отредактировал EWAVR - Mar 20 2006, 16:33
Go to the top of the page
 
+Quote Post
osnwt
сообщение Mar 20 2006, 16:53
Сообщение #19


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

Группа: Свой
Сообщений: 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);

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

Решение не самое красивое, но работоспособное. Безусловно, оптимальнее переписать ассемблерные функции для решения проблемы, но автор едва ли согласится делать это в официальной версии. Потому пока прошу лишь проверить работоспособность. Во всяком случае, всегда есть возможность так и оставить для личных целей.
Go to the top of the page
 
+Quote Post
EWAVR
сообщение Mar 20 2006, 22:49
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
osnwt
сообщение Mar 21 2006, 08:27
Сообщение #21


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

Группа: Свой
Сообщений: 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...
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Mar 22 2006, 12:09
Сообщение #22


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

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



Уважаемые EWAVR & OSNWT 1111493779.gif
Ну поделитесь же Вашими портами PowerSwitch для ИАР_а
Ато читаю Вашу переписку, слюни текут!
У самого опыта еще нету. help.gif
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 22 2006, 12:24
Сообщение #23


Йа моск ;)
******

Группа: Модераторы
Сообщений: 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'а ответ получил...

Особенно убивает последняя фраза про то, что так задумано, а в описании комманд - немного ошибочно wink.gif

Мне пришлось из-за этого ПРИНУДИТЕЛЬНО включить для T26 режим near, точнее выбрать в опциях проекта не конкретно проц, а модель -v1.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Mar 22 2006, 15:20
Сообщение #24


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

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



Все! Откомпилил PowerSwitch в ИАР_е под ATMEGA8535 , слепил драйвера в LIBUSB-WIN32,
проинсталил, подключил, есть в системе устройство-PowerSwitch. a14.gif

Теперь не могу (не знаю чем) скомпилить commandline/powerswitch.c
любые попытки - море ошибок.

Вижу, Вы достаточно опытные спецы, не расскажете ли как с этим девайсом
пообщаться из-под DELPHI5?

C IgorPlug (USBtoRS232) имею некотрый опыт.
Go to the top of the page
 
+Quote Post
EWAVR
сообщение Mar 22 2006, 16:04
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Mar 22 2006, 17:37
Сообщение #26


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

Группа: Свой
Сообщений: 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) sad.gif
Go to the top of the page
 
+Quote Post
osnwt
сообщение Mar 22 2006, 19:58
Сообщение #27


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

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



Цитата(aleksey_g @ Mar 22 2006, 14:09) *
Ну поделитесь же Вашими портами PowerSwitch для ИАР_а

Алексей, отправить PM не удалось, какая-то ерунда с сервером. Пишу тут.

К сожалению, я не занимался попытками полноценно скомпилировать PowerSwitch под IAR. Я просто раскрутил, закомментировал вотчдоги и т.п., проверил, что собирается в tiny, и стер.

Как я понял, проблема уже решена.

Насчет командной строки то же самое: я уже писал на форуме, что варианты под libusb мне не интересны на данном этапе, и примеры приложений obdev я не компилировал. Я использовал для своих целей основу из Automator, и собирал ее под VisualStudio 6. Но собралось оно не сразу, а я вообще переписал приличный кусок.

Так что готовыми решениями стандартных примеров не порадую, увы. Да и интереснее самому разобраться. А, главное, полезнее.

Удачи!
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Mar 23 2006, 08:23
Сообщение #28


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

Группа: Свой
Сообщений: 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

Но ко мне письма пришли, надеюсь к Вам тоже.
Go to the top of the page
 
+Quote Post
EWAVR
сообщение Mar 23 2006, 19:08
Сообщение #29


Участник
*

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
osnwt
сообщение Mar 24 2006, 08:48
Сообщение #30


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

Группа: Свой
Сообщений: 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, где возможность определения уже учтена.

Просьба не распространять эту версию - если с ней проблем не будет, то на следующей неделе будет официальная на сайте.

Прошу сообщить результат по мере возможности, или если такой возможности нет - то тоже сообщить, чтобы передать автору.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:32
Рейтинг@Mail.ru


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