USB LCD HOWTO
#501
Отправлено 28 Сентябрь 2006 - 02:37
Здесь нет самого интересного: config descriptor.
После запроса config descriptor, должна запрашиваться не строка 0, а еще раз config descriptor, на этот раз не с длиной 9, а той, которая указана в bTotalLength (т.е. пакет из config descriptor, interface descriptor, class descriptor и всех endpoint descriptor). Поскольку этого не происходит, я бы начал с проверки bTotalLength, и, если с ним все в порядке, попытался посмотреть, что и в каком размере посылается в ответ.
Добавлено спустя 9 минут 29 секунд:
Vovan_a
Если бы третья строка была бы продолжением первой, то при двухстрочном выводе вывод производится бы в первую и третью строки, а не в первую и вторую (разница пежду первым символом первой и второй строки - 20 байт).
Сейчас просто некогда залезть в datasheet. Как будет свободная минута - посмотрю. Заодно последний символ попробую исправить.
Компилирую я все примеры MSVC (.net, 2003, 2005 - без разницы).
Используется коммандрайновый компилятор. Как заметил Ant[Y], можно использовать скачанный с микрософта. Строка запуска - что-то вроде:
cl -MD usbportio-test.cpp UsbIo.cpp <путь_к_библиотекам_SDK>setupapi.lib
Остальные ключи (оптимизация и т.д.) - по вкусу.
#502
Отправлено 28 Сентябрь 2006 - 08:32
А оно так и есть - выводится в первую и третью (я выше писал).
Ant[Y]
спасибо за совет. VCToolkit уже скачал. пока ищу библиотеки. Не могу еще найти SetupAPI.lib.
#503
Отправлено 28 Сентябрь 2006 - 19:08
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 EP0tx=2,1 EP0tx< EP0txN
I=0040h
I=0001h EP0 = 21h
Setup: 00 05 01 00 00 00 00 00
I=0002h EP0tx=0,0
I=0001h 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 EP0tx=2,1 EP0tx<EP0txN
I=0002h EP0tx=0,0
I=0001h EP0 = A1h
Setup: 80 06 00 02 00 00 09 00
bmRequestType = 80
bRequest = 06
wValue = 0200h - просит дескриптор 02h (Config)
wIndex = 0000h
wLength = 0009h = 9
Config Descriptor:
16 байт: 09 02 2e 00 01 01 00 00 32 09 04 00 00 04 ff 01
16 байт: ff 00 07 05 81 02 10 00 01 07 05 01 02 10 00 01
14 байт: 07 05 82 02 40 00 00 07 05 02 02 40 00 00
ВСЕГО: 16+16+14=46 = 2E байт
Расшифровка:
Config Descriptor - 9 байт: 09 02 2e 00 01 01 00 00 32
byte bLength = 0x09
byte bDescriptorType = 0x02
word wTotalLength = 2e 00 = 0x002E = 46 байт
byte bNumInterfaces = 0x01
byte bConfigurationValue =0x01
byte iConfiguration = 0x00
byte bmAttributes = 0x00
byte MaxPower = 0x32
Interface descriptor - 9 байт: 09 04 00 00 04 ff 01 ff 00
byte bLength = 0x09
byte bDescriptorType = 0x04
byte bInterfaceNumber = 0x00
byte bAlternateSetting = 0x00
byte bNumEndpoints = 0x04 (4 endpoint без Control)
byte bInterfaceClass = 0xFF
byte bInterfaceSubClass = 0x01
byte bInterfaceProtocol = 0xFF
byte iInterface = 0x00
Дескриптор конечной точки - 7 байт: 07 05 81 02 10 00 01
byte bLength = 0x07
byte bDescriptorType = 0x05
byte bEndpointAddress = 0x81
byte bmAttributes = 0x02 = USB_ENDPOINT_TYPE_BULK
word wMaxPacketSize = 10 00 = 0x0010 = 16 байт - размер буфера
byte bInterval = 0x01
Дескриптор конечной точки - 7 байт: 07 05 01 02 10 00 01
byte bLength = 0x07
byte bDescriptorType = 0x05
byte bEndpointAddress = 0x01
byte bmAttributes = 0x02 = USB_ENDPOINT_TYPE_BULK
word wMaxPacketSize = 10 00 = 0x0010 = 16 байт - размер буфера
byte bInterval = 0x01
Дескриптор конечной точки - 7 байт: 07 05 82 02 40 00 00
byte bLength = 0x07
byte bDescriptorType = 0x05
byte bEndpointAddress = 0x82
byte bmAttributes = 0x02 = USB_ENDPOINT_TYPE_BULK
word wMaxPacketSize = 40 00 = 0x0040 = 64 байта - размер буфера
byte bInterval = 0x00
Дескриптор конечной точки - 7 байт: 07 05 02 02 40 00 00
byte bLength = 0x07
byte bDescriptorType = 0x05
byte bEndpointAddress = 0x02
byte bmAttributes = 0x02 = USB_ENDPOINT_TYPE_BULK
word wMaxPacketSize = 40 00 = 0x0040 = 64 байта - размер буфера
byte bInterval = 0x00
I=0002h EP0tx=0,0
I=0001h 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
и т.д.
Вроде все нормально ...
#504
Отправлено 28 Сентябрь 2006 - 19:39
Угу. Понятно. Это общая ошибка #2. Если хост просит 9 байт, ему нужно отдать 9 байт и не больше. После этого, он должен снова запросить config descriptor, на этот раз с полной длиной (46 байт). Если дать ему больше, чем просит - как минимум устройство не распознается, как максимум, можно добиться синего экрана.
Vovan_a
Хорошо. Чуть позже - посмотрю.
Нужно поправить, как минимум lcd_set_cursor, как максимум еще и lcd_write_text (чтобы строки корректно продолжались).
#505
Отправлено 28 Сентябрь 2006 - 20:04
Я сам уже начал думать в этом направлении.
Завтра переправлю, попробую.
#506
Отправлено 28 Сентябрь 2006 - 22:57
Внес изменения в файл usbportio-test.cpp как было написано выше. В первой строке последний символ не отображается, а переносится на третью строчку. Вся третья строка заметно мигает. Второй и четвертой строк нет. В общем ничего не понимаю. Раскоментировал в указанном Вами месте строки и вот что вышло:
CMD: 80 А
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
DATA: 31 1
CMD: c0 └
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
DATA: 32 2
CMD: 94 Ф
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
DATA: 33 3
CMD: d4 ╘
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
DATA: 34 4
Это при выводе в первой строке 20 единиц, во второй 20 двоек и т.д.
Сам с кодом наверное не смогу разобраться. Вся надежда на Вас

#507
Отправлено 29 Сентябрь 2006 - 18:46

Ограничение передаваемой длины там есть.
Вопрос.
Чем можно посмотреть обмен при эмумерации?
Или программные снифферы способны работать только на уже энумерированных устройствах?
listener, чем вы компилили свой микрокод?
WinAVR или еще что-то?
#508
Отправлено 01 Октябрь 2006 - 15:40
Поэкспериментировал с 350 строкой. Изменял множитель от 1 до 20. Изменяется только порядок вывода информации в строках, но вывод всеравно происходит только в первую и в третью строки.
#509
Отправлено 02 Октябрь 2006 - 04:22
Imagecraft C, www.imagecraft.com
snoopy должен показывать, как минимум, запрос config descriptor-а. (Но, возможно, до того момента, как загрузит драйвер, он не способен показать устройство в списке, а для этого нужно, чтобы нормально прошла энумерация).
Так сколько байт уходит в ответ на первый запрос config descriptor?
Vovan_a
Там проще прошивку поправить. В lcd_hd44870.c функция lcd_move_cursor должна выглядеть примерно так:
void lcd_move_cursor (u08 col, u08 row) {
u08 addr = row&2 ? 40: 0; // вместо 40 - должен быть адрес второй строки
if (row & 1) // чет/нечет, для нечетных смещаемся на 20 символов вперед (строки нумеруются с 0)
addr+=20;
dev_lcd_send_command (0x80|(col+addr)); // SET_DADDR
}
Банально некогда сесть и разобраться. С трудом нашел вчера часик поразбираться с HID. Если будет свободный денек - я дозрел до того, чтобы написать бездрайверную версию.
#510
Отправлено 02 Октябрь 2006 - 17:51
09 02 2e 00 01 01 00 a0 32
Это первый 9-байтовый Config descriptor.
3 и 4 байты - слово, равное 002E = 46 байт - длина пакета из 6 д6скрипторов: Config, Interface, 4 точки.
затем просит этот же Config:
Setup: 80 06 00 02 00 00 FF 00
Как я понял, просит 00FF байт
Здесь мой микрокод виснет.
Я выкачал ImageCraft, попробую написать на базе вашего кода.
#511
Отправлено 02 Октябрь 2006 - 18:38
А на второй запрос сколько отсылается?
Общий принцип такой: если запросили больше, чем есть - отдать сколько есть. Если запросили меньше - отдать, сколько запросили.
#513
Отправлено 04 Октябрь 2006 - 20:26
Изменил я функцию lcd_move_cursor. Поставил адрес второй строки 0х40 по даташиту. Все равно выводятся только первая и третья строки. Пробовал ставить и 0х20, и 0х10 - результат тот же. Ставил и в десятичной системе 40 - нет результата.
#514
Отправлено 06 Октябрь 2006 - 11:35
Странно это, странно это.
На выходные попробую стрельнуть текстовый индикатор и покопаться самому.
#515
Отправлено 09 Октябрь 2006 - 10:46
Доброго времени суток!!! спаял, все по схеме, ссылку на которую вы мне дали, прошил контроллер, и появились грабли.. Устройство в системе определилось, драйвер установился, но на LCD ничего не выводится.. Косяк.. Не подскажете как можно определить правильно ли прошился контроллер, и что может быть со схемой.. И второй вопрос... в вашем устройстве можно ли заменить контроллер MC68HC908JB8ADW на MC68HC908JB8JDW или нет? С УВАЖЕНИЕМ Игорь.!
#516
Отправлено 09 Октябрь 2006 - 20:14
Если бы неправильно прошился - устройство бы не определилось.
А на каком контроллере собрано?
JB8JDW полностью аналогичен JP8JP, только в SO-20, а не в DIP-20.
Схему я выкладывал: http://listener.fata...usblcd-1-jp.gif
#517
Отправлено 16 Октябрь 2006 - 15:40
Автор обещает 27 FPS для 240x64
домашняя страница:
http://www.holger-kl...ype/lcdhype.htm
обсуждение на lcdhype.de на немецком:
http://lcdhype.de/in...topic=2908&st=0
#518
Отправлено 17 Октябрь 2006 - 08:30
Идея конечно хорошая, тока вот с немецким туговато блин, кто-б разжевал...

#519
Отправлено 17 Октябрь 2006 - 09:53
через babel.altavista.com делаешь транслэйт на английский, будет чуток проще.
#520
Отправлено 17 Октябрь 2006 - 18:43
эти штучки под названием AT90USB*** по даташитам воистину класные! таже мега только с USB , но каквсегда в SMD корпусе...
радует меня также то, что у них всего 64 ноги как и у 128 меги(вроде).
осталось проверить эти МК на наличие в киеве на радиобазаре и...
ну думаю понятно