GPIO на RZX-50

Увы, ни один из драйверов клавиатуры из состава ядра Linux 2.6.31.3 от Ingenic не подходит для Ritmix RZX-50; вопрос о том, как же всё-таки подключена клавиатура становится более чем насущным.

Для Dingoo A320 таблицы использования GPIO составлялись издавна, что, в конечном счёте позволило довести ПО A320 до завидного уровня.

Для Dingoo A380 (прямого предка RZX-50) подобные таблицы найти не удалось, поэтому автору волей-неволей пришлось выполнить работу по их составлению.

Но прежде несколько слов о GPIO.

GPIO — General Parpose Input/Output (по-русски принято наименование интерфейс дискретных сигналов) — простейший интерфейс для взаимодействия микропроцессора с внешним миром. Представляет собой несколько контактов микропроцессора, управлять состоянием которых можно непосредственно из программы. Грубо говоря, когда микропроцессор взаимодействует с внешним миром через какой-нибудь нетривиальный интерфейс (USB, SATA), то процессор оперирует терминами «осуществить транзакцию шины», «отправить пакет»; причём после программирования процессором нескольких регистров контроллера, контроллер начинает реализовывать на своих выходных примеры транзакций PCI — для их выполнения многих из них процессор выполнил одну-три операции записи/чтения в регистры контроллера PCI). С GPIO дело обстоит ровно наоборот — процессор может непосредственно считывать/устанавливать состояние своих выводов.

Интерфейс GPIO может пригодиться, если в систему для индикации срочно надо добавить управляемый из программы светодиод, а возиться со сложными интерфейсами нет возможности. Другое популярное применение GPIO — подключение кнопок.

Результаты прозвонки платы RZX-50

Как известно, в A320 клавиатура реализована следующим образом: среди доступных контактов GPIO процессора выделено полтора десятка контактов, к каждому из которых подключена кнопка (см. ту же статью оп GPIO на A320).

Такая простая конструкция клавиатуры позволила предполагать, что в RZX-50 используется нечто подобное.

Но первые же результаты применения тестера оказались ошеломляющими (см. рисунок 1).

Рисунок 1 — места к коим тестера подключение производилось

На рисунке показаны точки на плате, где установлены доступные пользователю клавиши и отмечено, с какой ножкой процессора соединена каждая из клавиш. Страшная правда заключается в том, что к одному выводу процессора оказалось подключено несколько кнопок!

Результаты обследования сведены в таблицу 1:

Tаблица 1

Кнопка Ножка процессора Наименование сигнала
Вверх 89 PE18
Вниз 91 PF12
Влево 92 PF10
Вправо 90 PF11
A 91 PF12
B 90 PF11
X 92 PF10
Y 92 PF10
L 36 PE11
R 90 PF11
SELECT 91 PF12
START 89 PE18
POWER 75 PE30, WKUP

Примечание: внимательный пользователь RZX-50 заметит, что перечислены далеко не все доступные пользователю элементы управления, похожие по принципу действия на кнопки. Действительно, от внимания автора ускользнули:

  • G-sensor;
  • кнопка hold;
  • датчик слота TF;
  • датчик подключения наушников (если таковой вообще существует на RZX-50).

Однако не всё так безнадёжно: на нашей стороне возможность запускать программы на приставке и наличие в открытом доступе документации на контроллер GPIO процессора JZ4740.

Дело в том, что контроллер GPIO JZ4755 отличается от такового в JZ4740 лишь количественно. В то время как JZ4740 лишь четыре блока GPIO, в JZ4755 таковых оказалось целых шесть (об этом, например, можно узнать, приглядевшись к заголовочным файлам ядра Linux с сайта Ingenic, см. arch/mips/include/asm/mach-jz4750d/ops.h).

Вообще говоря, возможности GPIO в JZ4755 кажутся просто феноменальными: из 176 выводов процессора целых 124 (sic!) могут быть использованы под GPIO.

Вооружившись описанием контроллера GPIO JZ4740 (см. файл Jz4740_10_gpio_spec.pdf), описанием микропроцессора и небольшой программой, проделав несколько экспериментов, получим следующие данные:

PORT A:
 PXPIN  0000.0000.0000.0000.0000.0000.0000.0000.
 PXDAT  0000.0000.0000.0000.0000.0000.0000.0000.
  PXIM  1111.1111.1111.1111.1111.1111.1111.1111.
  PXPE  1111.1111.1111.1111.1111.1111.1111.1111.
 PXFUN  1111.1111.1111.1111.1111.1111.1111.1111.
 PXSEL  0000.0000.0000.0000.0000.0000.0000.0000.
 PXDIR  0000.0000.0000.0000.0000.0000.0000.0000.
 PXTRG  0000.0000.0000.0000.0000.0000.0000.0000.

Порт A используется исключительно для подключения ОЗУ SDRAM.

PORT B:
 PXPIN  1111.1110.1111.1111.1011.0011.0010.1100.
 PXDAT  0000.0000.0000.0000.0000.0000.0000.0000.
  PXIM  1111.1111.1111.1111.1111.1111.1111.1111.
  PXPE  0011.0111.1111.1111.1111.1111.1111.1111.
 PXFUN  0011.0111.1111.1111.1111.1111.1111.1111.
 PXSEL  0011.0100.0000.0000.0000.0000.0000.0000.
 PXDIR  0000.0000.0000.0000.0000.0000.0000.0000.
 PXTRG  0000.0000.0000.0000.1000.0000.0000.0000.

Порт используется для подключения ОЗУ SDRAM, а также для подключения TF-карты.

PORT C:
 PXPIN  0111.1111.1111.1111.1111.1111.1111.1111.
 PXDAT  0000.0001.0000.0000.0000.0000.0000.0000.
  PXIM  1111.1111.1111.1111.1111.1111.1111.1111.
  PXPE  1011.1000.0000.0011.0000.0000.0000.0000.
 PXFUN  0011.1000.0000.0011.0000.0000.0000.0000.
 PXSEL  0011.0000.0000.0010.0000.0000.0000.0000.
 PXDIR  0000.0001.0000.0000.0000.0000.0000.0000.
 PXTRG  0000.0000.0000.0001.0000.0000.0000.0000.

Порт используется для подключения встроенной microSDHC-карты.

PORT D:
 PXPIN  1111.0000.0001.1100.0000.0000.0000.0000.
 PXDAT  0000.0000.0000.0000.0000.0000.0000.0000.
  PXIM  1111.1111.1111.1111.1111.1111.1111.1111.
  PXPE  0000.1111.1111.0111.1111.1111.1111.1111.
 PXFUN  0000.1111.1111.0111.1111.1111.1111.1111.
 PXSEL  0000.0011.1100.0000.0000.0000.0000.0000.
 PXDIR  0000.0000.0000.0000.0000.0000.0000.0000.
 PXTRG  0000.0000.0000.0000.0000.0000.0000.0000.

Порт используется для подключения LCD-экрана.
Старшая тетрада (D[31:28]) не документирована.

PORT E:
 PXPIN  0111.0011.1101.1000.0010.1011.1111.1011.
 PXDAT  0000.0000.0000.1000.0010.0000.1010.0010.
  PXIM  0011.0011.1101.1100.0011.1111.1010.1111.
  PXPE  0000.0010.1100.0000.0011.0100.0100.0000.
 PXFUN  0000.0010.1100.0000.0011.0000.0000.0000.
 PXSEL  0100.0010.1000.0000.0000.0000.0101.0000.
 PXDIR  0000.0000.0100.1100.0011.0000.0011.0110.
 PXTRG  0100.0000.0000.0000.0000.0000.0101.0000.

Порт используется для подключения кнопок, UART1 и др.
PE1 — управление подсветкой экрана (вкл/выкл).
PE30 используется при подключении кнопки POWER; при работающем процессоре работает как простой вход, если процессор уснул или выключен, то этот вход используется для пробуждения.

PORT F:
 PXPIN  0000.0000.0000.0000.1111.1100.0000.0000.
 PXDAT  0000.0000.0000.0000.0000.0000.0000.0000.
  PXIM  0000.0000.0000.0000.1111.1100.0000.0000.
  PXPE  0000.0000.0000.0000.0000.0000.0000.0000.
 PXFUN  0000.0000.0000.0000.0000.0000.0000.0000.
 PXSEL  0000.0000.0000.0000.0000.0000.0000.0000.
 PXDIR  0000.0000.0000.0000.0000.0000.0000.0000.
 PXTRG  0000.0000.0000.0000.0000.0000.0000.0000.

Порт используется для подключения кнопок.

После дальнейших эксприментов удалось разобраться с клавиатурой — в отличии от A320 кнопки подключены не индивидуально, а собраны в матрицу!

Схема матрицы:


   E18 (89)          ?_/|      START_/|
  ---------->-----------|-------------|
                        |             |
   F10 (92)          X_/|          Y_/|
  ---------->-----------|-------------|
                        |             |
   F11 (90)          R_/|          B_/|
  ---------->-----------|-------------|
                        |             |
   F12 (91)     SELECT_/|          A_/|
  ---------->-----------|-------------|
                        |             |
                        V             V
                      E8 (37)       E7 (32)

Линии подключенные к выходам E18, F10, F11 и F12 будем называть строками, а входные линии, подключённые к E8 и E7 — столбцами.

В местах пересечения столбцов со строками установлены кнопки, замыкание которых обеспечивает подключение выхода-столбца в входу-строке.

Работа с матрицей осуществляется следующим образом:

  • драйвер переводит все строки в пассивное состояние;
  • активирует столбец E18;
  • считывает состояние E8 и E7. Если состояние E7 активное, то кнопка START нажата;
  • деактивирует столбец E18;
  • указанная последовательность повторяется для всех столбцов.

Применение матричной схемы позволяет съэкономить на линиях GPIO; например, указанная выше матрица обеспечила подключение 8 кнопок к 6 линиям GPIO.

Пользуясь указанной выше информацией о подключении GPIO на RZX-50 автору удалось собрать ядро Linux 2.6.31.3 с частичной поддержкой клавиатуры.

К сожалению не удалось разобраться со схемой подключения крестовины — к каким входным линиям она подключена непонятна.

Автор будет признателен за информацию о подключении крестовины, G-сенсора и кнопки HOLD.

 



Добавить комментарий

Комментарии доступны через Intensedebate. Включите JavaScript.