|
AT91SAM7 + USB |
|
|
|
Jul 24 2009, 10:01
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Прочитал на днях книгу Агурова, вроде бы разобрался со всем что там написано. Я понимаю, что её нужно сжечь, но у меня к сожалению мало ещё опыта в изучении спецификаций. Спецификацию по USB я скачал, очень тяжело для меня ещё. Надеюсь что для начала и книга подойдет. Но суть вопроса не в этом. Хочу посмотреть на какие-то готовые и главное рабочие примеры работы с USB для AT91SAM7. Желательно что бы проект реализовывал фреймворк с функция write и read. Для начала меня этого будет достаточно что бы дойти до понимания. Так пожалуйста поделитесь ссылками на примеры проектиков, которые точно работают, чо бы я в них смог разобраться для моего старта в мире USB =)
|
|
|
|
|
Jul 24 2009, 14:12
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
А с BasicUSB кто-то работал? Рабочий проект?
|
|
|
|
|
Jul 24 2009, 15:43
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Спрашиваю потому что пока запустить не получается. Так хочу узнать толи у меня не получается. Толи проект такой.
И ещё вопросик. С помощью HID-устройства можно организовать двунаправленный обмен? Или это только для передачи от устройства к хосту?
|
|
|
|
|
Jul 25 2009, 12:15
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Цитата(aaarrr @ Jul 24 2009, 13:36)  А лучше попробуйте самостоятельно написать свой фреймворк, начиная с Chapter 9 - это всего несколько сотен строк, зато будете в дальнейшем чувствовать себя уверенно. А про какой "Chapter 9" вы имели ввиду?
|
|
|
|
|
Aug 3 2009, 14:29
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Вопрос конкретно топику не касаеться. Но что бы отдельной темы для маленького вопроса не создавать спрошу здесь. В общем разбираюсь я с USB. Отлаживаю я с помощью SAM-ICE. До этого постоянно юзал j-link. В общем отладчик в случайный момент времени во время прошивки или во время длительного дебага, может вылететь с сообщением (см вложеный файл). Из-за чего может вылетать данное сообщение? Чья это может быть проблема отладчика или платы? К сожалению попробовать на другом отладчике временно не могу. Всем заранее спасибо за советы и предложения.
Сообщение отредактировал piz2383 - Aug 3 2009, 14:36
Эскизы прикрепленных изображений
|
|
|
|
|
Aug 6 2009, 07:17
|
Группа: Участник
Сообщений: 7
Регистрация: 14-05-09
Пользователь №: 49 074

|
Еще один маленький вопрос по той же теме. Есть две платы: одна- тестовая AT91SAM7S-EK от Amtel с контоллером SAM7S256, а вторая моя, на моей плате стоит тот же микроконтроллер, та же обвязка для USB, тот же кварц, отличия только в распиновке VBUS и DPULLUP. Я брал готовые примеры для тестовой платы для IAR 5.x, на тестовой плате они более или менее работают: компьютер определяет тип усторойства подключенного ну типа HID это или MASSSTORAGE или просто USB-устройсвто,когда я прошиваю свою плату и подключаю, он даже этого не делает пишет что усторойство не определено и в деспетчере задач высвечивается неизвестное USB устройство, альнейшее выполнее программы прекращается. Не подскажите врианты почему такое может быть?
|
|
|
|
|
Aug 10 2009, 14:36
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Работаю со стандартным атмеловским драйвером atm6124.sys. Реализовал CDC-устройство. Вроде все работает, но периодически при подключении устройства "винда" просто перегружается (как буд-то ресет нажали). Вопрос: это мне уже винду необходимо переустановить или же я допускаю какие-то ошибки в работе, если да, то какие? Заранее спасибо.
|
|
|
|
|
Aug 10 2009, 16:21
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
А FTDI какой *.sys драйвер использует? И FTDI-айную заюзать можно?
Сообщение отредактировал piz2383 - Aug 10 2009, 16:25
|
|
|
|
|
Aug 10 2009, 17:37
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Да мне главное что бы надежно работало.,.. Попробую usbser.sys
|
|
|
|
|
Aug 12 2009, 20:01
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Все вроде работает. Но уточню несколько нюансов. На голой винде при подключении девайса, первого подключения в трее выскакивает надпись "atm6124.Sys ATMEL AT91xxxxx Test Board" Как-то хочется что бы вскакивало что-то свое, как это сделать не подскажите? И ещё скажите правильно ли я описал INF-файл для работы с usbser.sys? Код [Version] Signature="$Windows NT$" Class=Ports ClassGuid={36FC9E60-C465-11CF-8056-444553540000} Provider=%ATMEL% DriverVer=04/16/2008,1.0.0.0
[DestinationDirs] DefaultDestDir=12
[Manufacturer] %ATMEL%=AtmelMfg [AtmelMfg] %USBtoSerialConverter%=USBtoSer.Install,USB\VID_03EB&PID_6124
[USBtoSer.Install] CopyFiles=FakeModemCopyFileSection AddReg=USBtoSer.AddReg
[USBtoSer.AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,usbser.sys HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[USBtoSer.Install.Services] AddService=usbser,0x00000002,USBtoSer.AddService
[USBtoSer.AddService] DisplayName=%USBSer% ServiceType=1 StartType=3 ErrorControl=1 ServiceBinary=%12%\usbser.sys
[Strings] ATMEL="My Corp." USBtoSerialConverter="SUPER-PUPER BOMBA" USBSer="USB Serial Driver"
|
|
|
|
|
Aug 13 2009, 11:56
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Обьясните плз что такое индексы строк, а то я не понял со стандарта? (вродекак написано: Index of string descriptor describing product) Что в цнлом нужно прописыват в поле imanufacturer, iproduct и iserialnumber?
|
|
|
|
|
Aug 13 2009, 12:28
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(piz2383 @ Aug 13 2009, 15:56)  Обьясните плз что такое индексы строк, а то я не понял со стандарта? (вродекак написано: Index of string descriptor describing product) Что в цнлом нужно прописыват в поле imanufacturer, iproduct и iserialnumber? В этих полях нужно записать номера соответствующих строк, они будут использованы хостом при запросах GET_DESCRIPTOR - STRING. Номера строк должны быть ненулевыми, нулевой дескриптор используется для передачи списка LANGID. Код DEVICE DESCRIPTOR: 0x01, // Manufacturer string index 0x02, // Product string index 0x00, // Serial number string index (unused)
unsigned char StringDscr0[] = { 0x04, STRING_DSCR, 0x09, // LANGID 0x0409 0x04 // English (United States) };
unsigned char StringDscr1[] = { 0x12, STRING_DSCR, 'A', 0x00, 'B', 0x00, 'C', 0x00, ' ', 0x00, 'C', 0x00, 'o', 0x00, 'r', 0x00, 'p', 0x00 };
unsigned char StringDscr2[] = { 0x14, STRING_DSCR, 'M', 0x00, 'y', 0x00, ' ', 0x00, 'd', 0x00, 'e', 0x00, 'v', 0x00, 'i', 0x00, 'c', 0x00, 'e', 0x00 };
|
|
|
|
|
Aug 13 2009, 19:40
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Меня как раз смутила надпись "ненулевыми" когда я читал спецификацию. В общем назначить можно любой.
|
|
|
|
|
Aug 14 2009, 19:21
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(aaarrr @ Aug 10 2009, 21:45)  usbser в XP работает надежно. Есть, конечно, и некоторые косяки - сигнализация не вся поддерживается и USB нельзя передергивать, пока порт открыт. А можно поподробнее про момент передергивания при открытом порте ? В чем проблема конкретно ? Дело в том что я тестировал на передергивание при передаче, и у меня ни разу не было проблем с этим. То есть неперерывные запрос/ответ(протокол типа модбас) ну и передергиваю кабель много раз, связь восстанавливается и ничего не падает.
|
|
|
|
|
Aug 15 2009, 14:29
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
А подскажите как определить что хост отключился от шины? Линию UDP_CNX подключил как в даташите, но она почему-то всегда в единице. Внезависимости от того подключен хост или нет. Включен пул-ап или нет. Не подскажите что с этой линией может быть не так? И можно как-то с помощью самого контроллера UDP определить подключен хост или нет?
|
|
|
|
|
Aug 15 2009, 20:26
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(piz2383 @ Aug 15 2009, 18:29)  А подскажите как определить что хост отключился от шины? Что значит отключился, шнурок физически оторвали? Цитата(piz2383 @ Aug 15 2009, 18:29)  Линию UDP_CNX подключил как в даташите, но она почему-то всегда в единице. Внезависимости от того подключен хост или нет. Включен пул-ап или нет. Не подскажите что с этой линией может быть не так? Если речь идет о линии, попключенной к VBUS через делитель, то с ней ничего не может быть не так. Разве только pull-up внутренний может перетянуть ее в единицу, если его не отключить. Других вариантов я не вижу. Цитата(piz2383 @ Aug 15 2009, 18:29)  И можно как-то с помощью самого контроллера UDP определить подключен хост или нет? Можно следить за RXSUSP или вручную мониторить UDP_ FRM_NUM.
|
|
|
|
|
Aug 15 2009, 22:22
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Цитата(aaarrr @ Aug 15 2009, 23:26)  Что значит отключился, шнурок физически оторвали? Точнее сказать отсоединили. В общем когда кабелем соединяется ПК с устройством, то началом соединения можно считать приход пакета SET CONFIGURATION. А вот когда пользователь просто взял и отсоединил кабель. Вот про это я спрашивал  )) Цитата(aaarrr @ Aug 15 2009, 23:26)  Если речь идет о линии, попключенной к VBUS через делитель, то с ней ничего не может быть не так. Разве только pull-up внутренний может перетянуть ее в единицу, если его не отключить. Других вариантов я не вижу. aaarrr, я ваш вечный фанат. Да, именно отключив пул-апя добился того что при не подключенном кабеле у меня 0 на этой линии, а при подключенном единица  Спасибо. Цитата(aaarrr @ Aug 15 2009, 23:26)  Можно следить за RXSUSP или вручную мониторить UDP_ FRM_NUM. Да будущее запомню, но раз уж с той линией разобрались, то не понадобиться сейчас.
|
|
|
|
|
Aug 16 2009, 00:21
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(aaarrr @ Aug 15 2009, 00:36)  Если выдернуть кабель, пока открыт порт, то автоматом ничего не восстанавливается (по крайней мере на XP SP2). Если порт закрыть, то проблем нет. На W2K было еще хуже - устройство отваливалось до следующей перезагрузки. Я думал что Вы имеете в виду что ломается что-то более серьезное, а так да, переоткрытие порта решает вопрос переподсоединения. Цитата(aaarrr @ Aug 16 2009, 00:26)  Разве только pull-up внутренний О, эту знатную фичу я тоже ловил, причем вся мерзость ситуации в том что на одном контроллере пулап дотягивает до 1 а на другом таком же нет.
|
|
|
|
|
Aug 19 2009, 09:12
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 3-07-09
Пользователь №: 50 897

|
Цитата(Flexz @ Aug 19 2009, 11:44)  Можно перебрать все компорты, кидая туда тестовый запрос и смотреть откуда придет ответ, так часто делают. Этим можно нарушить работу остальных устройств
|
|
|
|
|
Aug 19 2009, 10:01
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 3-07-09
Пользователь №: 50 897

|
Цитата(Flexz @ Aug 19 2009, 12:54)  А у вас много девайсов на компортах висит? я вот только с блютусом и переходниками usb-rs-XXX в последнее время встречаюсь, да еще старые программаторы. У меня нет, а у заказчиков много. Поразбираюсь с libusb. Кто с ней работал? Какие отзывы? Работа стабильная? "Синие экраны" не наблюдаются? И ещё один важный ньюанс: совместимость с Windows Vista и Windows 7?
Сообщение отредактировал head_sk - Aug 19 2009, 10:18
|
|
|
|
|
Aug 20 2009, 20:36
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Здравствуйте. Не подскажите в чем может быть загвоздка? Писал программу для драйвера от атмела. Функция отправки хосту работала идеально. Поменял драйвер на usbser.sys. Теперь первая отправка работает хорошо. А вот вторая уже не отправляется. Вот код отправки. Код unsigned int USB_Write(unsigned char* buffer, unsigned int size) { /***/ while((AT91C_BASE_UDP->UDP_CSR[2]&AT91C_UDP_TXPKTRDY) == AT91C_UDP_TXPKTRDY); while (size--) AT91C_BASE_UDP->UDP_FDR[2] = *buffer++; UDP_EP_SetFlag(AT91C_BASE_UDP, 2, AT91C_UDP_TXPKTRDY)
return xSemaphoreTake(TXSemaphore, 5); } Во время второй отправки не срабатывает прерывание AT91C_UDP_TXCOMP. А во время третьей отправки код зависает на строчке с пометкой /***/ В чем может быть проблема? Что в коде не так? Почему с атмеловским драйвером работает а с usbser нет?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|