USB LCD HOWTO
#422
Отправлено 11 Июнь 2006 - 16:38
Где бы взять USBICP.EXE и MotorolaHID.exe.
На сайте freescale этого нет(или не дают).
Помогите плиз.
#423
Отправлено 14 Июнь 2006 - 20:39
ненайдети ли способность переработать код чтоб на выходе был не LCD а LPT порт. Жалко микруха пропадает! А так все вопросы снимутся и с LCD . И порт будет USB_LPT , сканер хоть подключу.
#424
Отправлено 18 Июнь 2006 - 01:14
AlekS сказал:
ненайдети ли способность переработать код чтоб на выходе был не LCD а LPT порт. Жалко микруха пропадает! А так все вопросы снимутся и с LCD . И порт будет USB_LPT , сканер хоть подключу.
В такой ситуации есть несколько проблем.
Во-первых, в стандартных классах USB устройств не предусмотрено LPT порта. Есть USB Printer, но на LPT он совсем не похож. Чтобы был LPT - нужно писать драйвер, а это гораздо сложнее переписывания десятка строчек в прошивке (они, кстати, на C; ASM для этого контроллера просто страшный).
Во-вторых, у идеи подлючить сканер есть один маленький недостаток. USB low-speed устройство может принимать или передавать только один восьмибайтовый пакет за миллисекунду, что дает теоретический максимум в 8 килобайт в секунду. По-моему, для сканера это недостаточно. В протоколами полегче, класс для сканера есть, но, к сожалений, JB8 разрабатывался для типичных низкоскоростынх применений - клавиатур, мышей, джойстиков и т.д. Для нормальной обработки данных со сканера, скорее всего, у него не хватит мощности (у него тактовая 3MHz и, в среднем, четыре такта на команду).
Сожалею, что разочаровываю.
#425
Отправлено 21 Июнь 2006 - 23:07
WLOM37 сказал:
Где бы взять USBICP.EXE и MotorolaHID.exe.
Здесь.
http://listener.pise...1/flash-jb8.zip
А вот исходники для USBICP.exe ISPdl.dlll USBICP.sys или хотя бы header-ы для библиотеки и драйвера кто нибудь имеет?
#426
Отправлено 24 Июнь 2006 - 17:49
Исходники бутлоадера - Motorola Application Note AN2398. Если продраться через жуткий HC08-й ассемблер и вытащить протокол (или написать свой бут), флэшер пишется самостоятельно за вечер.
#427
Отправлено 25 Июнь 2006 - 15:58
listener сказал:
Исходники бутлоадера - Motorola Application Note AN2398. Если продраться через жуткий HC08-й ассемблер и вытащить протокол (или написать свой бут), флэшер пишется самостоятельно за вечер.
В протоколе худо-бедно разобрался - все команды реализованы через Vendor-Specific Request. А вот со стороны PC как воспользоваться существующим драйвером не знаю. Поэтому и ищу исходники (или хотя бы header файл) ихней dll-ки. Там все функции уже реализованы.
На собственный драйвер сил нет, да и знаний недостаточно. Хотя, может быть это значительно легче чем мне кажется?
Или удобнее бутлоадер сделать HIDом и не заморачиваться с собственными драйверами. Подскажите.
#428
Отправлено 06 Июль 2006 - 11:03
#429
Отправлено 12 Июль 2006 - 20:14
Для случая с мегой - стоит посмотреть на http://www.cesko.host.sk/IgorPlugUSB_RS232...20RS232_eng.htm Там все подробно расписано.
NB. Для серьезных применений конструкция не рекомендуется.
#430
Отправлено 31 Июль 2006 - 10:16
Люди добрые помогите найти MC68HC908JB8ADW в Москве



#431
Отправлено 16 Август 2006 - 12:43
#432
Отправлено 23 Август 2006 - 21:05
Подключить к этой схеме можно практически любой индикатор ( ограничение накладывает исключительно быстродействие контроллера - на цветные графические индикаторы его просто не хватит). Загвоздка исключительно в программной части.
128x64 у меня работал без каких-либо проблем.
Чтобы сделать поддержку индикатора, требуется поправить файлы lcd_XXXXX.c и device_adw.c. Количество имеющихся у меня индикаторв ограничено, поэтому я не могу написать и отладить поддержку всех индикаторов.
Что касается HD44780 и совместимых - мне обещали на следующей неделе дописать соответствующий модуль.
#433
Отправлено 26 Август 2006 - 23:38
#434
Отправлено 29 Август 2006 - 18:51
Такая проблема.
Спаял девайс PDIUSBD12 + ATMega32. Логи гонит через USART. Наблюдаю их в гипертерминале.
Лог:
EP0 = 21h == D12_ReadLastTransactionStatus ( 0 )
Setup: 80 06 00 01 00 00 40 00
bmRequestType = 80h
bRequest = 06h
wValue = 00h 01h -> 0x0100
wIndex = 00h 00h -> 0x0000
wLength = 40h 00h -> 0x0040
C_H: type=80h;req=06h -> 00h;06h.
Standard req 06h. get_descriptor 0100h -> 01h;
DevDescr: 12 01 00 01 DC 00 00 10 71 04 88 08 00 01 00 00 00 01
bLength = 12h = 18; // длина дескриптора == 18 байт
bDescriptorType = 01h; // тип дескриптора == 0x01
? bcdUSB = 0100h; // версия USB в BCD:
// 0100h - 1.0
// 0110h - 1.1
// 0200h - 2.0
bDeviceClass = DCh; // код класса USD
bDeviceSubClass = 00h; // код подкласса
bDeviceProtocol = 00h; // код протокола
bMaxPacketSize = 10h = 16; // макс. размер пакета нулевой endpoint
idVendor = 0471h; // код изготовителя
idProduct = 0888h; // код продукта
bcdDevice = 0100; // номер версии продукта в BCD
iManufacturer = 00h; // индекс дескриптора строки, описывающей производителя
iProduct = 00h; // индекс дескриптора строки, описывающей продукт
iSerialNumber = 00h; // индекс дескриптора строки серийного номера продукта
bNumConfigurations = 01h; // кол-во возможных конфигураций устройства
EP0 = 21h
Setup: 00 05 01 00 00 00 00 00
C_H: type=00h;req=05h -> 00h;05h.
Standard req 05h. set_address Address = 01
Эта песня повторяется 3 раза, после чего останавливается и говорит что девайс не опознан.
В чем м.б. проблема? Меня терзают сомнения насчет поля bcdUSB.
Я не врублюсь как правильно 0100h или 0001h?
Могу дать исходники на C cvAVR.
Спасибо.
#435
Отправлено 29 Август 2006 - 23:32
Роман_tgh сказал:
.....
"Turn MCU power off (Under 0,1V), turn MCU power on, and then click OK". Если я правильно понял, то предлагают сначала выключить, а потом снова включить питание контроллера и нажать кнопку ок. Что и было проделано (выдергиванием USB и повторным подключением). Такое сообщение уже было у кого-то на форуме, но так и не было описано, чем оно было исправлено (или не было). Что еще может быть?
Это нормальное сообщение. Поскольку в выбранном типе программтора резет не выведен (есть схемы, где он на DTR вешается), то, таким образом, ненявязчиво предлагается обрезетить контроллер.
Если сообщение повтрояется - нужно проверять резисторы на PA0-PA3. (Резистор от PA2 должен быть подключен на землю, остальные - к +5v)).
Что вообще происходит. При включении, контроллер проверяет, что на IRQ > 8v. Если это так, проверяется, что на PA0-PA3. Если и здесь все в порядке, управление передается не на основной флэш, а на дополнительный, с программатором и дебаггером в нем. После этого, PA0 работает как полудуплексный RS-232. В него выдается подтверждение, что монитор запустился.
Если это подтверждение не получено, предлагается обрезетить контроллер (в данном случае - передернуть питание).
Роман_tgh сказал:
Удлинитель.
Роман_tgh сказал:
Проверить, что на PA0-PA3. Убедиться, что кварц запустился. (У меня с самой первой схемой был случай, когда не был припаян резистор параллельно кварцу. Была полная фантастика - пока плату держишь в руках - работает. Кладешь на стол - перестает) Если есть логический анализатор - посмотреть, что идет по PA0.
Добавлено спустя 1 час 1 минуту 10 секунд:
hd44780
USB 1.0 = { 0x00, 0x01 } (т.е. 0x100).
В чем может быть засада: вывод в ком-порт - time-consuming task. Возможно, увлекшись протоколированием, ATmega банально не успевает ответить на запрос, а при хэндшейке, ответ должен поступать сразу же после запроса.
Вторая засада, на которую напарываются почти все - если во время передачи дескриптора приходит резет, не нужно передавать весь дескриптор. После резета - немедленно прекратить и отвечать на следующий запрос.
Третье - отсутствующие строки производителя и продукта - тоже могут привести к чему-то нехорошему.
Живой пример для ATmega16 и D12 - http://listener.fata...board-0.0.2.zip (переходник PS/2 -> USB)
#436
Отправлено 30 Август 2006 - 08:22
Дескриптор и протокол поправлю.
Я пользовался Вашим примером, и у меня вопрос - у Вас событие Bus Reset в прерывании фактически не обрабатывается - вызывается пустая функция и устанавливается нигде не обрабатываемый флаг. Да и PDI не имеет выхода сброса, только вход. Как я тогда прекращу передачу?
#437
Отправлено 30 Август 2006 - 19:03
Bus Reset != reset контроллера.
по резету шины, устройство обязано обнулить адрес и начать следующие IN/OUT пакеты с DATA0. D12 все это делает сама. Функция осталась для трассировки. Аналогично, флаг тоже использовался в каком-то другом проекте.
О прекращении передачи. Нормально, handshake выглядит так:
=> BUS_RESET
=> SETUP: Get device descriptor
<= IN: первый пакет дескриптора пошел
=> BUS_RESET - сброс шины приходит, после приема первой части дескриптора. Посылать остаток дескриптора не нужно
=> SETUP: Set address
=> SETUP: Get Device Descriptor - а здесь уже посылается нормальный дескриптор, полностью.
<= IN: первый пакет пошел
<= IN: второй пакет пошел
и так, пока дескриптор не кончится. Дальше - делать что спросят, без каких-либо особых тонкостей.
Про D12 здесь http://forum.zinetz....wtopic.php?t=20 написали аж восемь страниц. Должны быть перечислены все грабли, на которые можно наступить.
#438
Отправлено 31 Август 2006 - 09:53
Будем смотреть ...
У меня на SETUP: SetAddress все и заканчивается ...
#439
Отправлено 31 Август 2006 - 13:04

Было бы интересно! Правда там уже наверное нужно использовать архитектуру AVR32))
#440
Отправлено 01 Сентябрь 2006 - 10:39
Лог расшифрован вручную.
I=0001h EP0 = 21h
Setup: 80 06 00 01 00 00 40 00
bmRequestType = 80
bRequest = 06
wValue = 0100h - просит дескриптор 01h (Device)
wIndex = 0000h
wLength = 0040h - просит 64 байт
I=0002h (ep0_txdone) EP0tx=2 (прерывание досылает 2 байта) EP0tx< EP0txN
I=0040h (Reset)
I=0001h EP0 = 21h
Setup: 00 05 01 00 00 00 00 00
Уст. адрес 1
I=0002h (ep0_txdone)
I=0001h (ep0_rxdone)
EP0 = 21h
Setup: 80 06 00 01 00 00 12 00
bmRequestType = 80
bRequest = 06
wValue = 0100h - просит дескриптор 01h (Device)
wIndex = 0000h
wLength = 0012h - 18
I=0002h (ep0_txdone) EP0tx=2 EP0tx< EP0txN
I=0002h (ep0_txdone)
I=0001h (ep0_rxdone) EP0 = A1h
Setup: 80 06 00 02 00 00 09 00
bmRequestType = 80
bRequest = 06
wValue = 0200h - просит дескриптор 02h (Config)
wIndex = 0000h
wLength = 0009h = 9
I=0002h (ep0_txdone)
I=0001h (ep0_rxdone) EP0 = A1h
Setup: 80 06 00 03 00 00 FF 00
bmRequestType = 80
bRequest = 06
wValue = 0300h - просит дескриптор 03h (String 0)
wIndex = 0000h
wLength = 00FFh = 255
I=0002h (ep0_txdone)
I=0001h (ep0_rxdone) EP0 = A1h
Setup: 80 06 00 02 00 00 FF 00
bmRequestType = 80
bRequest = 06
wValue = 0200h - просит дескриптор 02h (Config)
wIndex = 0000h
wLength = 00FFh = 255 байт
I=0002h (ep0_txdone) EP0tx=30 EP0tx>
I=0002h (ep0_txdone) EP0tx=14 EP0tx< EP0txN
I=0002h (ep0_txdone)
I=0001h (ep0_rxdone) EP0 = 41h
I=0040h (Reset)
I=0001h (ep0_txdone) EP0 = 21h
Setup: 80 06 00 01 00 00 40 00
пошел по кругу
В дескр. устройства 3 строки (manufacturer - 1, product - 2, serNum - 3).
Эта последовательность проходит 3 раза и все ...
Чего он начинает повторно запрашивать ?..
Добавлено спустя 31 минуту 27 секунд:
Отменяется, я ошибку нашел.
Дескрипторы Config, Interface и 4 точки должны отсылаться одним пакетом, так?
У меня сейчас не так.
Добавлено спустя 14 часов 24 минуты 35 секунд:
Работает. Комп запросил драйвер.
Плату чуток перепаяю и займусь драйвером.
Кстати, кто-нибудь знает, как драйвер писать? Читал, что можно использовать образец из DDK, только как - непонятно.
Добавлено спустя 12 минут 43 секунды:
Кстати, что означает Last Trans Status == 41h - пакет 1/0?
Иногда идет, а чего с ним делать непонятно ...