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

 
 
> Обмен данными через USB, HID устройство на ATMega8 с реализацией драйвера от ObDev
ZoonMan
сообщение Jun 14 2007, 07:55
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 17-03-07
Из: Ставрополь
Пользователь №: 26 261



Собрал USB устройство, похожее на Automator (http://www.obdev.at/products/avrusb/).
Залил в него немного откорректированую прошивку Automator'а.
Все работает нормально. Устройство определяется как положено. Отвечает на обращение к нему.
Помогите осуществить обмен данными.

В драйвере USB есть буфер usbTxBuf. По логике вещей, записывать информацию нужно в него, однако он недоступен из программы, т.к. объявлен в usbdrv.c. Этот файл в проект входит. Все нормально. Но переменная usbTxBuf является внутренней. Может ее объявление перенести в usbdrv.h?

Со стороны ПК терминал я написал (в проекте есть программа, я ее перенес на C++Builder) и он даже считывает область памяти из контроллера.
Только вот куда обращаться из прошивки, чтобы передавать информацию для видения терминалом не пойму.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ZoonMan
сообщение Jun 15 2007, 05:55
Сообщение #2





Группа: Участник
Сообщений: 10
Регистрация: 17-03-07
Из: Ставрополь
Пользователь №: 26 261



to GDI:
Посмотрел проект Power Switch. Ничего в нем нового не увидел. Только запись в EEPROM. Адрес они сами определили. Откуда они его взяли. Непонятно. И зачем писать в EEPROM - это же медленно. Да и циклы перезаписи не бесконечны.

to prottoss:
попробовал usbFunctionWrite(). Ни к чему хорошему это ни привело. Терминал отказался читать блоки. Выдал ошибку соединения с устройством. Однако девайс по-прежнему определяется нормально.
Go to the top of the page
 
+Quote Post
ahulap
сообщение Jun 15 2007, 07:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Цитата(ZoonMan @ Jun 15 2007, 08:55) *
Посмотрел проект Power Switch. Ничего в нем нового не увидел. Только запись в EEPROM. Адрес они сами определили. Откуда они его взяли. Непонятно. И зачем писать в EEPROM - это же медленно. Да и циклы перезаписи не бесконечны.

Если брать самый простой вариант (без usbFunctionWrite и usbFunctionRead), то, например, в uchar usbFunctionSetup(uchar data[8]):
data[1] - код команды.
data[2]...data[5] - ее данные.
Так же есть какой-то static uchar replyBuffer[8]; , который заполняете необходимым ответом, ставите usbMsgPtr = replyBuffer; и возвращаете длину ответа.
Со стороны компьютера:
int usb_transmit(unsigned char functionid, unsigned char send[4], unsigned char * buffer, int buffersize)
{
int nbytes;
nbytes = usb_control_msg(usbhandle,
USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
functionid,
(send[1] << 8) | send[0],
(send[3] << 8) | send[2],
buffer, buffersize,
5000);
if(nbytes < 0){
// Error
}

return nbytes;
}

Если надо передавать большие блоки, то посмотрите USBasp.
Go to the top of the page
 
+Quote Post



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

 


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


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