Форумы Modlabs.net: USB LCD HOWTO - Форумы Modlabs.net

Перейти к содержимому

  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

USB LCD HOWTO

#501 Пользователь офлайн   listener 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 618
  • Регистрация: 08 Май 03

Отправлено 28 Сентябрь 2006 - 02:37

hd44780
Здесь нет самого интересного: 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

Остальные ключи (оптимизация и т.д.) - по вкусу.
0

#502 Пользователь офлайн   Vovan_a 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 18
  • Регистрация: 22 Апрель 05

Отправлено 28 Сентябрь 2006 - 08:32

listener
А оно так и есть - выводится в первую и третью (я выше писал).
Ant[Y]
спасибо за совет. VCToolkit уже скачал. пока ищу библиотеки. Не могу еще найти SetupAPI.lib.
0

#503 Пользователь офлайн   hd44780 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 12
  • Регистрация: 26 Август 06

Отправлено 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

и т.д.

Вроде все нормально ...
0

#504 Пользователь офлайн   listener 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 618
  • Регистрация: 08 Май 03

Отправлено 28 Сентябрь 2006 - 19:39

hd44780
Угу. Понятно. Это общая ошибка #2. Если хост просит 9 байт, ему нужно отдать 9 байт и не больше. После этого, он должен снова запросить config descriptor, на этот раз с полной длиной (46 байт). Если дать ему больше, чем просит - как минимум устройство не распознается, как максимум, можно добиться синего экрана.

Vovan_a
Хорошо. Чуть позже - посмотрю.
Нужно поправить, как минимум lcd_set_cursor, как максимум еще и lcd_write_text (чтобы строки корректно продолжались).
0

#505 Пользователь офлайн   hd44780 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 12
  • Регистрация: 26 Август 06

Отправлено 28 Сентябрь 2006 - 20:04

listener, спасибо.
Я сам уже начал думать в этом направлении.
Завтра переправлю, попробую.
0

#506 Пользователь офлайн   Vovan_a 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 18
  • Регистрация: 22 Апрель 05

Отправлено 28 Сентябрь 2006 - 22:57

listener
Внес изменения в файл 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 двоек и т.д.
Сам с кодом наверное не смогу разобраться. Вся надежда на Вас ;)
0

#507 Пользователь офлайн   hd44780 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 12
  • Регистрация: 26 Август 06

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

Рано я радовался ;).
Ограничение передаваемой длины там есть.

Вопрос.
Чем можно посмотреть обмен при эмумерации?
Или программные снифферы способны работать только на уже энумерированных устройствах?

listener, чем вы компилили свой микрокод?
WinAVR или еще что-то?
0

#508 Пользователь офлайн   Vovan_a 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 18
  • Регистрация: 22 Апрель 05

Отправлено 01 Октябрь 2006 - 15:40

listener
Поэкспериментировал с 350 строкой. Изменял множитель от 1 до 20. Изменяется только порядок вывода информации в строках, но вывод всеравно происходит только в первую и в третью строки.
0

#509 Пользователь офлайн   listener 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 618
  • Регистрация: 08 Май 03

Отправлено 02 Октябрь 2006 - 04:22

hd44780
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. Если будет свободный денек - я дозрел до того, чтобы написать бездрайверную версию.
0

#510 Пользователь офлайн   hd44780 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 12
  • Регистрация: 26 Август 06

Отправлено 02 Октябрь 2006 - 17:51

listener, отсылает 9 байт:
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, попробую написать на базе вашего кода.
0

#511 Пользователь офлайн   listener 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 618
  • Регистрация: 08 Май 03

Отправлено 02 Октябрь 2006 - 18:38

hd44780
А на второй запрос сколько отсылается?

Общий принцип такой: если запросили больше, чем есть - отдать сколько есть. Если запросили меньше - отдать, сколько запросили.
0

#512 Пользователь офлайн   hd44780 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 12
  • Регистрация: 26 Август 06

Отправлено 02 Октябрь 2006 - 20:57

Понятно...
На второй запрос - 46 байт - полный комплект.
0

#513 Пользователь офлайн   Vovan_a 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 18
  • Регистрация: 22 Апрель 05

Отправлено 04 Октябрь 2006 - 20:26

listener
Изменил я функцию lcd_move_cursor. Поставил адрес второй строки 0х40 по даташиту. Все равно выводятся только первая и третья строки. Пробовал ставить и 0х20, и 0х10 - результат тот же. Ставил и в десятичной системе 40 - нет результата.
0

#514 Пользователь офлайн   listener 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 618
  • Регистрация: 08 Май 03

Отправлено 06 Октябрь 2006 - 11:35

Vovan_a
Странно это, странно это.
На выходные попробую стрельнуть текстовый индикатор и покопаться самому.
0

#515 Пользователь офлайн   garic33 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 50
  • Регистрация: 12 Сентябрь 06

Отправлено 09 Октябрь 2006 - 10:46

listener
Доброго времени суток!!! спаял, все по схеме, ссылку на которую вы мне дали, прошил контроллер, и появились грабли.. Устройство в системе определилось, драйвер установился, но на LCD ничего не выводится.. Косяк.. Не подскажете как можно определить правильно ли прошился контроллер, и что может быть со схемой.. И второй вопрос... в вашем устройстве можно ли заменить контроллер MC68HC908JB8ADW на MC68HC908JB8JDW или нет? С УВАЖЕНИЕМ Игорь.!
0

#516 Пользователь офлайн   listener 

  • Advanced Member
  • PipPipPipPipPipPipPip
  • Группа: Пользователи
  • Сообщений: 618
  • Регистрация: 08 Май 03

Отправлено 09 Октябрь 2006 - 20:14

garic33
Если бы неправильно прошился - устройство бы не определилось.
А на каком контроллере собрано?

JB8JDW полностью аналогичен JP8JP, только в SO-20, а не в DIP-20.
Схему я выкладывал: http://listener.fata...usblcd-1-jp.gif
0

#517 Пользователь офлайн   chuuvee 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 16 Октябрь 06

Отправлено 16 Октябрь 2006 - 15:40

Вариант на одном чипе 18F4550, минимум обвязки
Автор обещает 27 FPS для 240x64

домашняя страница:
http://www.holger-kl...ype/lcdhype.htm

обсуждение на lcdhype.de на немецком:
http://lcdhype.de/in...topic=2908&st=0
0

#518 Пользователь офлайн   wawe 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 87
  • Регистрация: 28 Декабрь 04

Отправлено 17 Октябрь 2006 - 08:30

chuuvee

Идея конечно хорошая, тока вот с немецким туговато блин, кто-б разжевал... :moderator:
0

#519 Пользователь офлайн   chuuvee 

  • Junior
  • Pip
  • Группа: Пользователи
  • Сообщений: 26
  • Регистрация: 16 Октябрь 06

Отправлено 17 Октябрь 2006 - 09:53

wawe
через babel.altavista.com делаешь транслэйт на английский, будет чуток проще.
0

#520 Пользователь офлайн   ZoneRR SSoft 

  • Member
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 383
  • Регистрация: 01 Май 06

Отправлено 17 Октябрь 2006 - 18:43

Ура! либо я раньше незаметил либо... ну кароче только что увидел вот это(когда шарилса по сайту атмела) http://www.atmel.com/dyn/general/advanced_...;target=AT90USB

эти штучки под названием AT90USB*** по даташитам воистину класные! таже мега только с USB , но каквсегда в SMD корпусе...
радует меня также то, что у них всего 64 ноги как и у 128 меги(вроде).
осталось проверить эти МК на наличие в киеве на радиобазаре и...
ну думаю понятно
0

Поделиться темой:


  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

7 человек читают эту тему
0 members, 7 guests, 0 anonymous users