Важная информация

User Tag List

Результаты опроса: Востребован ли контроллер?

Голосовавшие
49. Вы ещё не участвовали в этом опросе
  • Да

    43 87.76%
  • Нет

    2 4.08%
  • Не знаю

    4 8.16%
Страница 7 из 10 ПерваяПервая ... 345678910 ПоследняяПоследняя
Показано с 61 по 70 из 100

Тема: Контроллер USB клавиатуры

  1. #61
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Реализовано преобразование USB HID -> PS/2. Проверено пока что только логическим анализатором - попробую припаять шнурок от клавиатуры и подключить к компьютеру для полноценной проверки.
    "Байт-48"

  2. #61
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #62
    Guru Аватар для Vslav
    Регистрация
    31.03.2013
    Адрес
    г. Киев
    Сообщений
    2,413
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    755
    Поблагодарили
    353 сообщений
    Mentioned
    86 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andreil Посмотреть сообщение
    А вот с HID ситуация похуже - 3/10 неудачно
    В библиотеке stm32 очень убогий USB-хост (помимо остальных проблем). И в добавок в моей практике встречалась куча клавиатур нарушающих USB стандарт самыми разнообразными способами, в том числе от именитых производителей. Казалось бы чего проще - отдай пакет из 8 байт в interrupt EP и потом пришли пакет нулевой длины как завершение передачи, что требуется по стандарту. Дык, чего только не попадалось - и честный нулевой пакет, и empty/NAK, и stall. Некоторые клавиатуры когда им нечего передавать отвечают stall вместо empty/NAK. Под это все стек от ST надо допиливать. Финалом маразма стал беспроводной комплект LG из мыши и клавиатуры. Там в конфигурации репортится два HID-а, первый клавиатура, оно нормально обрабатывается. Но при нажатии F1-F4 почему-то генерируется отчет и в канале мыши. Если софт не обрабатывает такое составное устройство (или обрабатывает только одно - клавиатуру), то канал мыши он, ессно, не вычитывает, и клавиатура нафиг зависает.

  4. #63
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vslav Посмотреть сообщение
    В библиотеке stm32 очень убогий USB-хост (помимо остальных проблем). И в добавок в моей практике встречалась куча клавиатур нарушающих USB стандарт самыми разнообразными способами, в том числе от именитых производителей. Казалось бы чего проще - отдай пакет из 8 байт в interrupt EP и потом пришли пакет нулевой длины как завершение передачи, что требуется по стандарту. Дык, чего только не попадалось - и честный нулевой пакет, и empty/NAK, и stall. Некоторые клавиатуры когда им нечего передавать отвечают stall вместо empty/NAK. Под это все стек от ST надо допиливать. Финалом маразма стал беспроводной комплект LG из мыши и клавиатуры. Там в конфигурации репортится два HID-а, первый клавиатура, оно нормально обрабатывается. Но при нажатии F1-F4 почему-то генерируется отчет и в канале мыши. Если софт не обрабатывает такое составное устройство (или обрабатывает только одно - клавиатуру), то канал мыши он, ессно, не вычитывает, и клавиатура нафиг зависает.
    Это уже частные случаи, надо смотреть.
    И по библиотеке - со времён SPL'а там многое поменялось в стеке USB, добавилось много обработчиков всяких ситуаций. Так что, может быть, что-то стало и лучше. Но такие случаи, как с упомянутым выше свистком - это вообще криворукость разработчиков железки, софтом это не исправить, при требовании полной совместимости со всем спектром устройств.

    PS: Сейчас буду вспоминать, как реализована клавиатура, джойстик и мышь в спеке - надо определиться, по каким сигналам нужны будут прерывания.

    - - - Добавлено - - -

    Так, по клавиатуре ZX'а - её выбор идёт при лог.0 на A0, /IORQ, /RD. Это понятно. Вопрос в организации циклов сканирования - они идут по 1 строке? То есть на одной из линий A8-A15 (которые отображают состояние аккумулятора во время чтения) будет активный лог.0, если я всё правильно понял.
    И стоит ли делать дешифрацию адреса порта полной, по всем линиям A0-A7? (Пока что смотрел только в схему Ленинграда).

    - - - Добавлено - - -

    Если мои рассуждения выше верны. то черновой вариант клавиатуры для ZX-BUS уже готов.
    Обработка вызывается по внешним прерываниям на выводах МК - линии /IORQ, /RD, /WR:
    Код:
    void zxbus_proc(int GPIO_Pin){
    	switch (GPIO_Pin)
    	{
    		case ZXBUS_PIN_IORQ:
    			if ((ZXBUS_PORT->IDR & (1 << ZXBUS_PIN_RD)) == 0)
    				zxbus_proc_int_rd();
    			if ((ZXBUS_PORT->IDR & (1 << ZXBUS_PIN_WR)) == 0)
    				zxbus_proc_int_wr();
    			break;
    		case ZXBUS_PIN_RD:
    			if ((ZXBUS_PORT->IDR & (1 << ZXBUS_PIN_IORQ)) == 0)
    				zxbus_proc_int_rd();
    			break;
    		case ZXBUS_PIN_WR:
    			if ((ZXBUS_PORT->IDR & (1 << ZXBUS_PIN_IORQ)) == 0)
    				zxbus_proc_int_wr();
    			break;
    	}
    }
    Данная функция вызывается обработчиком прерываний, если переключателями был выбран режим ZX-BUS. И в зависимости от значения GPIO_Pin (то есть от того, по какому выводу мы ушли сюда), смотрим дальше - что у нас активно. В итоге, независимо от таймингов и задержек в логике, чтение из порта клавиатуры будет вызвано только при одновременно активных /IORQ и /RD.
    Ну а поскольку со схемой этой части уже всё решено (для запаса на дальнейшие расширения под прерывания можно выделить любой из управляющих сигналов процессора - /INT, /NMI, /IORQ, /RD, /WR, /MREQ, /M1). В зависимости от других режимов на эти линии можно подключить другие сигналы.
    А на порт данных для ZX-BUS всё-таки повешу двунаправленный буфер, управляемый напрямую сигналом с МК, формируемым при чтении из порта. Всё остальное время в режиме ZX-BUS он будет работать в направлении к МК. Сигнал /OE для него заведу на джампер выборки режима ZX-BUS - что бы в прочих случаях не мешал.

    - - - Добавлено - - -

    Обновил схему.
    Дальше в ней осталось только пара вещей:
    1) повесить светодиоды на те же ноги, что и DIP-переключатель - всё равно они используются только при запуске для считывания режимов.
    2) подумать над разъёмами.
    Итого у контроллера использованы все выводы, и имеем резерв на ещё 3 режима выхода (сейчас есть PS2, ZX-BUS, MATRIX) и 256 вариантов преобразований матрицы клавиатуры.
    Контроллер Ethernet при необходимости подключается к разъёму.
    Для подключения прочей периферии на разъёмы выведены SPI, I2C, UART. Пару выводов от переключателя выбора матрицы надо будет завести как чипселекты для SPI.
    Так же выход PS/2 надо будет сделать через транзисторы, что бы поднять уровень сигналов до +5В.
    "Байт-48"

  5. #64
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post

    Итак, обновил плату и раскидал компоненты. Назначение выводов может ещё поменяться, но это не важно ещё - разводить ещё и не начинал, пока что рано.
    Вот примерный вид платы с компонентами:
    Вид сверху и вид снизу.
    Скомпоновал таким образом, что разъём ZX-BUS (2 ряда отверстий снизу) на верхнем виде сориентирован так, что под резистором R42 находится пин A15, а под R41 - A14. То есть плата спека и собственно сам разъем будут сзади платы при таком подключении, а все детали и разъёмы будут смотреть наружу, ничему не мешая.
    Если с ориентацией разъёма напутал, дайте знать, ориентировался на фото в гугле
    Часть подтягивающих резисторов около разъёма излишняя - запаиваются по необходимости. Лучше иметь площадку для запайки, чем потом крутить с проводками и соплями.
    "Байт-48"

  6. #65
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для надёжности добавил полноценную защиту USB - всё по хрен-шую

    Скрин

    [свернуть]

    Это ведёт к небольшому увеличению стоимости, но повышает надёжность - иначе при попадании статики на разъём выгорит МК. Так же защита от наводок и прочего.
    Или нафиг эти защиты?
    Последний раз редактировалось andreil; 30.03.2018 в 12:24.
    "Байт-48"

  7. #66
    Activist Аватар для CLR
    Регистрация
    03.02.2005
    Адрес
    Челябинск
    Сообщений
    326
    Спасибо Благодарностей отдано 
    261
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А какой функционал на данный момент задуман?
    Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
    MorphOS / AmigaOS / MacOS / Linux

  8. #67
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пока - подключение клавиатуры и мыши, флешки, SD-карты.
    В дальнейшем через пару разъемов можно будет повесить какой-либо дисплей (для меню плеера/эмулятора ВГ), Ethernet-контроллер (хоть по SPI, хоть по RMII).
    "Байт-48"

  9. #68
    Activist Аватар для CLR
    Регистрация
    03.02.2005
    Адрес
    Челябинск
    Сообщений
    326
    Спасибо Благодарностей отдано 
    261
    Спасибо Благодарностей получено 
    52
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А к сд-карте со стороны Спектрума как обращаться? Я даже не в курсе, вдруг есть уже какие-нибудь стандарты. Кстати, было бы забавно подключить модуль на мсх VS1053 (мультиформатный аудиодекодер), которая может получать по I2C поток данных (с сд-Карты) и играть из себя сякие мп3, огг и прочие миди. Надеюсь, спектрум успеет справиться с передачей данных )
    Мои игрушки: PowerbookG4 / MacMiniG4 / MacMini i5 / Amiga1260 / Commodore64 / Atari65XE / MSX1 SVI-728 / MSX2 КУВТ2 / MiST / MiSTer / Profi+ / KarabasPro / Speccy2010 / Aspect128 / ZX-UNO VGA 2M / PS3 / PS4Pro+PSVR / PSP / PS Vita / GBC / LDK Game / RG350M / iPhone / iPad / Raspberry Pi (0/3B+/4B/5)
    MorphOS / AmigaOS / MacOS / Linux

  10. #69
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CLR Посмотреть сообщение
    А к сд-карте со стороны Спектрума как обращаться? Я даже не в курсе, вдруг есть уже какие-нибудь стандарты. Кстати, было бы забавно подключить модуль на мсх VS1053 (мультиформатный аудиодекодер), которая может получать по I2C поток данных (с сд-Карты) и играть из себя сякие мп3, огг и прочие миди. Надеюсь, спектрум успеет справиться с передачей данных )
    С картой памяти можно работать как угодно, в том числе и напрямую - в режиме ZX-BUS можно сделать обработку сигналов шины для поддержки SD-карты.
    Всё ограничено фантазией и быстродействием.
    Аналогично и с VS - можно сделать позже.
    Сейчас надо до конца "устаканить" схему и развести плату.
    "Байт-48"

  11. #70
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    "Устаканил" основные вопросы по схеме USB, ничего не изменилось. Больше времени потратил на изучение трассировки диффпар
    За вечер развёл часть 2xUSB, microSD, а так же частично затронул шину.

    Скрин

    [свернуть]

    Заливка показана контурами, что бы все слои были видны сразу. Пока развожу в 2 слоя, но в резерве "висят" промежуточные слои - по ним пока что проводится питание. Если получится развести "как есть" все сигналы от МК, эти 2 слоя уберутся. А нет - буду делать 4-х слойку... По финансам получается около $42 за 20 платок (10 заготовок, по 2 платы на каждой).
    "Байт-48"

Страница 7 из 10 ПерваяПервая ... 345678910 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Конвертер USB -> PS/2 для клавиатуры
    от Ewgeny7 в разделе Устройства ввода
    Ответов: 118
    Последнее: 02.01.2022, 23:39
  2. Ответов: 27
    Последнее: 14.08.2018, 04:48
  3. БезWaitовый контроллер клавиатуры
    от caro в разделе Устройства ввода
    Ответов: 68
    Последнее: 01.07.2015, 05:42
  4. USB контроллер матрицы клавиатуры.
    от fan в разделе Устройства ввода
    Ответов: 2
    Последнее: 25.07.2007, 00:43

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •