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

 
 
> Работа с ObDev AVR-USB, с чего начать?
anonymous
сообщение Jun 23 2006, 07:00
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 25-05-06
Пользователь №: 17 447



Здраствуйте.

Необходимо собрать схемку, в которой будет использоваться usb.
Решил делать программно...

И для начала решил собрать простой usb-rs232 преобразователь...

Так вот собственно в чем проблема... не могу въехать с какой стороны к этому всему подходить...

Где брать и куда писать данные, которые надо передать по USB?

может подкините минимальный скелет исходников для начала. (т.е. не законченную прошивку, а только то, что нужно для работы usb. например main.с без всего лишено...)

PowerSwitch смотрел... как понял менять под себя надо функцию usbFunctionSetup(uchar data[8]).
Это верно?

Заранее благодарен
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 11)
otrog
сообщение Jun 23 2006, 08:43
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Может и не совсем в тему, но посмотрите в сторону IgorPlug-USB
http://www.cesko.host.sk/IgorPlugUSB/IgorP...20(AVR)_eng.htm


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 23 2006, 08:57
Сообщение #3


Гуру
******

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



Цитата(otrog @ Jun 23 2006, 16:43) *
Может и не совсем в тему, но посмотрите в сторону IgorPlug-USB
http://www.cesko.host.sk/IgorPlugUSB/IgorP...20(AVR)_eng.htm

ИМХО obdev намного привлекательнее, т.к. написана на Си, что облегчает внедрение в свой проект. К тому же я читал где то в сети, по-моему даже на этом форуме, что в IgorPlug-USB нет проверки CRC. Счас как раз планирую занятся этой штуковиной, на работе все руки не доходили))), а в отпуске, вечерком можно повозится. Может тоже возникнут вопросы...


--------------------
Go to the top of the page
 
+Quote Post
anonymous
сообщение Jun 23 2006, 10:23
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 25-05-06
Пользователь №: 17 447



Цитата(otrog @ Jun 23 2006, 16:43) *
Может и не совсем в тему, но посмотрите в сторону IgorPlug-USB
http://www.cesko.host.sk/IgorPlugUSB/IgorP...20(AVR)_eng.htm


увы действительно не совсем в тему sad.gif
так как было решено остановиться на реализации USB от obdev.at

Цитата(prottoss @ Jun 23 2006, 16:57) *
К тому же я читал где то в сети, по-моему даже на этом форуме, что в IgorPlug-USB нет проверки CRC.


насколько мне известно в реализации от obdev.at так же не считается CRC. Не успевают...

ЗЫ все же преимужества на вариантом от Игоря есть...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 23 2006, 10:55
Сообщение #5


Гуру
******

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



Цитата(anonymous @ Jun 23 2006, 18:23) *
насколько мне известно в реализации от obdev.at так же не считается CRC. Не успевают...
ЗЫ все же преимужества на вариантом от Игоря есть...


Если не брать в счет Си, и ему сопутствующее, какие?


--------------------
Go to the top of the page
 
+Quote Post
anonymous
сообщение Jun 23 2006, 11:14
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 25-05-06
Пользователь №: 17 447



Цитата(prottoss @ Jun 23 2006, 18:55) *
Цитата(anonymous @ Jun 23 2006, 18:23) *
насколько мне известно в реализации от obdev.at так же не считается CRC. Не успевают...
ЗЫ все же преимужества на вариантом от Игоря есть...


Если не брать в счет Си, и ему сопутствующее, какие?


Вообщем то на obdev.at этот вопрос раскрыт:
Цитата
A similar driver for the AVR series of microcontrollers is available from Igor Češko. Our USB driver has the following advantages over Igor's driver:

* All customizable code written in ANSI-C and thus easier to maintain.
* Modular concept: easier to integrate into existing designs.
* Slightly smaller code size in spite of high level language modules.
* Faster: All encoding/decoding (USB requires NRZI coding and bit stuffing) is done in real-time, not in the main loop after storing away the raw data stream.
* AVR-USB comes with a free shared Vendor- / Product-ID pair.
* The level of standards conformance is documented (description of limitations and potential problems).
* Available for free with Open Source license. (See the file License.txt in the distribution.)


для меня особенно значимы пункты 4,5,7

ЗЫ а по теме кто-нибудь может что-нибудь подсказать?

Сообщение отредактировал anonymous - Jun 23 2006, 11:15
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 24 2006, 06:12
Сообщение #7


Гуру
******

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



2anonymous извините, что в Вашей ветке задаю вопросы, но, может быть, это и Вам как то поможет)

Что то я дров под Win32 не вижу на их сайте, как с этим быть? Свои написать? Или я не там смотрю?


--------------------
Go to the top of the page
 
+Quote Post
anonymous
сообщение Jun 24 2006, 07:09
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 25-05-06
Пользователь №: 17 447



Цитата(prottoss @ Jun 24 2006, 14:12) *
2anonymous извините, что в Вашей ветке задаю вопросы, но, может быть, это и Вам как то поможет)

Что то я дров под Win32 не вижу на их сайте, как с этим быть? Свои написать? Или я не там смотрю?


не там smile.gif
смотреть надо тут: http://libusb-win32.sourceforge.net/
и еще поможет вот это: http://www.mingw.org/

Просто надо было скачать например PowerSwitch и внимательно посмотреть ReadMe

еще можно использовать HID класс устройств, тогда драйверов вообще не нужно...

а еще есть CDC класс... драйвера идут стандартные начиная с win2k (про linux вообще не говорю)...
в результате получаете заместо работы с usb, работу с виртуальным com портом...

пример есть тут: http://www.recursion.jp/mitou17/forcy-avr2.html
только я по японски не понимю (но исходники прилагаются)

ссылку на проект с дровами увы не помню, но если нужно будет, то могу вылужить сюда. Это проект на attiny45: преобровователь uart<->usb (все софтовое) с дровами...
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение Jun 26 2006, 12:10
Сообщение #9


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

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



prottoss, посмотрите эту ветку:
http://electronix.ru/forum/index.php?showtopic=13883&st=30



К anonymous_у!
<<Это проект на attiny45: преобровователь uart<->usb (все софтовое) с дровами...>>
Это очень интересно! Как бы посмотреть?
Go to the top of the page
 
+Quote Post
proba
сообщение Jun 26 2006, 12:36
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 358
Регистрация: 29-05-05
Пользователь №: 5 526



http://www.recursion.jp/avrcdc/index.html
Go to the top of the page
 
+Quote Post
anonymous
сообщение Jun 27 2006, 01:30
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 25-05-06
Пользователь №: 17 447



так кто-нибудь может подсказать, где и что надо написать, что-бы сделать самое простое с использованием avr-usb?

т.е. меня интересует как узнать что пришли данные, где они лежат, как отправить данные...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 27 2006, 05:19
Сообщение #12


Гуру
******

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



Цитата(anonymous @ Jun 27 2006, 09:30) *
так кто-нибудь может подсказать, где и что надо написать, что-бы сделать самое простое с использованием avr-usb?
т.е. меня интересует как узнать что пришли данные, где они лежат, как отправить данные...


Вроде по англицки читаешь, а в простом разобраться не можешь) В общем то в usbdrv.h этот вопрос раскрыт:

....usbFunctionSetup(uchar data[8]);
/* This function is called when the driver receives a SETUP transaction from
* the host which is not answered by the driver itself (in practice: class and
* vendor requests). All control transfers start with a SETUP transaction where
* the host communicates the parameters of the following (optional) data
* transfer. The SETUP data is available in the 'data' parameter which can
* (and should) be casted to 'usbRequest_t *' for a more user-friendly access
* to parameters.
*
* If the SETUP indicates a control-in transfer, you should provide the
* requested data to the driver. There are two ways to transfer this data:
* (1) Set the global pointer 'usbMsgPtr' to the base of the static RAM data
* block and return the length of the data in 'usbFunctionSetup()'. The driver
* will handle the rest. Or (2) return 0xff in 'usbFunctionSetup()'. The driver
* will then call 'usbFunctionRead()' when data is needed. See the
* documentation for usbFunctionRead() for details.
*
* If the SETUP indicates a control-out transfer, the only way to receive the
* data from the host is through the 'usbFunctionWrite()' call. If you
* implement this function, you must return 0xff in 'usbFunctionSetup()' to
* indicate that 'usbFunctionWrite()' should be used. See the documentation of
* this function for more information. If you just want to ignore the data sent
* by the host, return 0 in 'usbFunctionSetup()'.
*
* Note that calls to the functions usbFunctionRead() and usbFunctionWrite()
* are only done if enabled by the configuration in usbconfig.h.
*/



... usbFunctionWrite(uchar *data, uchar len);
/* This function is called by the driver to provide a control transfer's
* payload data (control-out). It is called in chunks of up to 8 bytes. The
* total count provided in the current control transfer can be obtained from
* the 'length' property in the setup data. If an error occurred during
* processing, return 0xff (== -1). The driver will answer the entire transfer
* with a STALL token in this case. If you have received the entire payload
* successfully, return 1. If you expect more data, return 0. If you don't
* know whether the host will send more data (you should know, the total is
* provided in the usbFunctionSetup() call!), return 1.
* NOTE: If you return 0xff for STALL, 'usbFunctionWrite()' may still be called
* for the remaining data. You must continue to return 0xff for STALL in these
* calls.
* In order to get usbFunctionWrite() called, define USB_CFG_IMPLEMENT_FN_WRITE
* to 1 in usbconfig.h and return 0xff in usbFunctionSetup()..
*/



....usbFunctionRead(uchar *data, uchar len);
/* This function is called by the driver to ask the application for a control
* transfer's payload data (control-in). It is called in chunks of up to 8
* bytes each. You should copy the data to the location given by 'data' and
* return the actual number of bytes copied. If you return less than requested,
* the control-in transfer is terminated. If you return 0xff, the driver aborts
* the transfer with a STALL token.
* In order to get usbFunctionRead() called, define USB_CFG_IMPLEMENT_FN_READ
* to 1 in usbconfig.h and return 0xff in usbFunctionSetup()..
*/



Со стороны хоста (РС) пока добился связи с устройством через usb_control_msg(....) из libusb


--------------------
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 27 2006, 17:42
Сообщение #13


Гуру
******

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



Работа с драйвером от obdev доволно проста и встроить его в проект на Си оказалось довольно просто. Больше возни c usblib от sourceforge ( http://libusb.sourceforge.net ) Минимум комментариев к функциям и корявый хедер(((



Привожу тестовый код для работы с ИАР (файл main.c)

Код


uchar usbFunctionSetup(uchar data[8])
{
   TX_LED_OFF();
   RX_LED_OFF();
   SETUP_LED_ON();

// почему data[1], а не, например, data[0], еще не разобрался, кое какие подозрения есть,

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



    if(data[1] == 0)
    {

       // здесь может быть код, который должен выполняться только этой функцией

       return 0;
    }

    return 255; // хотим вызвать функции записи/чтения
}


uchar usbFunctionRead(uchar *data, uchar len)
{
   TX_LED_OFF();
   SETUP_LED_OFF();
   RX_LED_ON();
   return 0; // ОК
}

uchar usbFunctionWrite(uchar *data, uchar len)
{
   RX_LED_OFF();
   SETUP_LED_OFF();
   TX_LED_ON();
   return 1; // ОК

}


void main(void)
{
    usbInit();
    asm("sei");

    do
    {
       usbPoll();
    }
    while(1);


Кроме того драйверу надо указать, что будут использоваться функции записи/чтения. Для этого надо в файле usbconfig.h установить макросы USB_CFG_IMPLEMENT_FN_WRITE и USB_CFG_IMPLEMENT_FN_READ в 1



Мне с эти кодом удалось, пока, уложится в 1775 байт, что вполне достаточно для тини2313)))



А это кусок исходника для C++ Borland Builder, чтобы можно было поморгать светодиодами


--------------------
Go to the top of the page
 
+Quote Post
anonymous
сообщение Jun 28 2006, 14:44
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 25-05-06
Пользователь №: 17 447



2 prottoss

вот спасибо... как то просмотрел я это все...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 28 2006, 17:51
Сообщение #15


Гуру
******

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



В продолжении темы...А как то можно избавится от дров от source forge, сделать, допустим, CDC класс? Правда, по этому поводу меня терзают сомнения, по моему odev-avr заточен именно под эти дрова...


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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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