Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.12.2013, 00:20   #1
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 690
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от ald
Так таблица есть в посте 4.
Вопрос уже когда-то поднимался, роутеры разные.
Та таблица для TL-WR703N(вернее раздел "POR Value" относится только к TL-WR703N).


Отрывок из uboot конфигурация GPIO:
Цитата:
void ar7240_gpio_config(void)
{
/* Disable clock obs
* clk_obs1(gpio13/bit8), clk_obs2(gpio14/bit9), clk_obs3(gpio15/bit10),
* clk_obs4(gpio16/bit11), clk_obs5(gpio17/bit12)
* clk_obs0(gpio1/bit19), 6(gpio11/bit20)
*/
ar7240_reg_wr (AR7240_GPIO_FUNC,
(ar7240_reg_rd(AR7240_GPIO_FUNC) & ~((0x1f<<8)|(0x3<<19))));

/* Enable eth Switch LEDs */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | (0x1f<<3)));

/* Clear AR7240_GPIO_FUNC BIT2 to ensure that software can control LED5(GPIO16) and LED6(GPIO17) */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & ~(0x1<<2)));

/* Set HORNET_BOOTSTRAP_STATUS BIT18 to ensure that software can control GPIO26 and GPIO27 */
ar7240_reg_wr (HORNET_BOOTSTRAP_STATUS, (ar7240_reg_rd(HORNET_BOOTSTRAP_STATUS) | (0x1<<18)));

/* Disable EJTAG functionality to enable GPIO 8, added by zcf, 20110608 */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) | 0x01));
#ifdef CONFIG_PID_MR302001
/* set OE, added by zcf, 20110509 */
ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xc020001));
/* Disable clock obs, added by zcf, 20110509 */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
#endif
#ifdef CONFIG_PID_WR74104
/* set OE, added by zcf, 20110509 */
ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xc03e001));
/* Disable clock obs, added by zcf, 20110509 */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e007));
#endif
#ifdef CONFIG_PID_WR74302CN
/* set OE, added by zcf, 20110714 */
ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xc03e003));
/* Disable clock obs, added by zcf, 20110509 */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e007));
#endif
#ifdef CONFIG_PID_MR322002
/* set OE, added by zcf, 20110714 */
ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xc03e001));
/* Disable clock obs, added by zcf, 20110509 */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e007));
#endif
#ifdef CONFIG_PID_WR70301
/* set OE, added by zcf, 20110714 */
ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xc03e001));
#endif
#ifdef CONFIG_PID_MR11U01
/* set OE, added by zml, 20111018 */
ar7240_reg_wr(AR7240_GPIO_OE, (ar7240_reg_rd(AR7240_GPIO_OE) | 0xc020001));
/* Disable clock obs, added by zml, 20111018 */
ar7240_reg_wr (AR7240_GPIO_FUNC, (ar7240_reg_rd(AR7240_GPIO_FUNC) & 0xffe7e07f));
#endif
}


Скорее TL-MR3020 похож на TL-MR11U по конфигурации GPIO.

Последний раз редактировалось Dioptimizer; 25.12.2013 в 03:00.
Dioptimizer вне форума   Ответить с цитированием
Старый 25.12.2013, 16:00   #2
ald
Junior Member
 
Регистрация: 13.10.2013
Сообщений: 14
Вес репутации: 0
ald is an unknown quantity at this point
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Т.е. исправив uboot и пересобрав прошивку я получу 0V на GPIO7 при загрузке?

А есть описание синтаксиса uboot (чтобы понять что и как изменять)?
ald вне форума   Ответить с цитированием
Старый 25.12.2013, 20:36   #3
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 690
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от ald Посмотреть сообщение
Т.е. исправив uboot и пересобрав прошивку я получу 0V на GPIO7 при загрузке?

А есть описание синтаксиса uboot (чтобы понять что и как изменять)?
Ну если так приспичило.
По моему опыту - нормальные герои идут в обход

AR7240_GPIO_OE - General Purpose I/O Output Enable (GPIO_OE)
В роутере CONFIG_PID_WR70301 значение 0xc03e001, а в роутере CONFIG_PID_MR302001 значение 0xc020001
(пример кода вверху)

По идее, можно только пропатчить uboot(найти это значение в HEX виде и пропатчить в соответствии с нужным значением), чтобы не заморачиваться с компилятором.

Но прежде чем это делать, нужно всё проверить - на роутере установить утилиту io(через opkg) и прочитать с помощью нее область памяти:
Код:
io -4 0x18040000
(будет определенное значение этого GPIO_OE)

Это прочитанное значение берем и рассчитываем по формуле (0xValue | 0xc03e001) = 0xResult
Результат (в HEX варианте) прописываем той же io утилитой:
Код:
io -4 0x18040000 0xResult
(после чего, не выключая устройство, проверяем Ваш GPIO на нужное значение, также проверяем не повлияли ли эти изменения на другие GPIO, индикацию светодиодов и прочее)

Не спугунл?
С компилятором uboot столько же хлопот(если не больше)...

P.S.
Если все же оно влияет на другие GPIO негативным образом, тогда я постараюсь рассчитать значение которое изменяет конкретно GPIO7, если нужно...

Последний раз редактировалось Dioptimizer; 25.12.2013 в 21:09.
Dioptimizer вне форума   Ответить с цитированием
Старый 27.12.2013, 17:35   #4
ald
Junior Member
 
Регистрация: 13.10.2013
Сообщений: 14
Вес репутации: 0
ald is an unknown quantity at this point
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от Dioptimizer Посмотреть сообщение
Ну если так приспичило.
По моему опыту - нормальные герои идут в обход
Ну, вначале надо понять, что проще обойти или ...

Цитата:
AR7240_GPIO_OE - General Purpose I/O Output Enable (GPIO_OE)
В роутере CONFIG_PID_WR70301 значение 0xc03e001, а в роутере CONFIG_PID_MR302001 значение 0xc020001
(пример кода вверху)
Спасибо за подсказки и ключевые слова.

Цитата:
По идее, можно только пропатчить uboot(найти это значение в HEX виде и пропатчить в соответствии с нужным значением), чтобы не заморачиваться с компилятором.
Буду разбираться, попытаюсь понять и буду пробовать патчить.

Правда, есть вопрос. Если у меня RootFS на флэшке, патчить в имидже прошивки и потом прошивать?
А только после этого, если все нормально делать копию RootFS на флэшку?

Цитата:
Но прежде чем это делать, нужно всё проверить - на роутере установить утилиту io(через opkg) и прочитать с помощью нее область памяти:
Код:
io -4 0x18040000
(будет определенное значение этого GPIO_OE)

Это прочитанное значение берем и рассчитываем по формуле (0xValue | 0xc03e001) = 0xResult
Результат (в HEX варианте) прописываем той же io утилитой:
Код:
io -4 0x18040000 0xResult
(после чего, не выключая устройство, проверяем Ваш GPIO на нужное значение, также проверяем не повлияли ли эти изменения на другие GPIO, индикацию светодиодов и прочее)

Не спугунл?

А что может произойти если выключу?
Нет, не спугнул.

А как вычислялась область памяти для примера с io? Или это пример и цифры будут другие?

А где есть описание структуры памяти прошивки?

Цитата:
С компилятором uboot столько же хлопот(если не больше)...

P.S.
Если все же оно влияет на другие GPIO негативным образом, тогда я постараюсь рассчитать значение которое изменяет конкретно GPIO7, если нужно...
А как считать? Может, и сам смогу?

P.S. Если задаю глупые вопросы, извини. Пока что четкой картины в голове нет.
Или где искать описание для прояснения картины в моей голове?
ald вне форума   Ответить с цитированием
Старый 28.12.2013, 01:23   #5
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 690
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от ald Посмотреть сообщение
А где есть описание структуры памяти прошивки?
Если Вы про структуру флеш-памяти устройства, то тут есть информация (структура практически идентична на всех TP-Link'ах у которых в основе процессоры Atheros).
А здесь информация как это всё дело сохранить вместе или по отдельности.

Вы должны понимать всю серьезность изменения загрузчика.
U-boot это загрузчик устройства - микропрограмма по запуску и инициализации процессора, он вообще не должен изменяться.
firmware(прошивка) - это программа выполняемая загрузчиком.
Я должен Вас предупредить, что uboot в любом случае (даже если вы компилируете его стандартным методом) опасно заменять - если что-то случится, у вас будет "кирпич" - который восстановить без спец. оборудования невозможно.

Я могу Вам предложить поискать другой GPIO сконфигурированный по умолчанию в IN направлении. Например, "поковыряв" загрузчик TL-MR3020, я обнаружил, что в загрузчике начальная конфигурация GPIO_OE имеет такой вид:
Код:
...
    2cr	00002e60:    3c03b804	lui	$v1,0xb804		
    30r	00002e64:    24020cff	move	$v0,3327=0x0cff		
    34r	00002e68:    ac620000	sw	$v0,0($v1)		# b8040000
...
(оно же, в исходниках 126 сторка)

Код:
0x0cff = 0b00000000000000000000110011111111 (1 = включено; 0 = выключено)
                             ....9876543210 <= BIT и номер GPIO, и так до 29(кол-во GPIO на процессоре)
Таким образом можно сделать вывод, что по началу, до конфигурации каких либо светодиодов и прочего - GPIO8(usb power), GPIO9(uart_in) и начиная с GPIO12 заканчивая GPIO28 - функция Output Enable отключена.
Позже правда, тот же u-boot настраивает GPIO13...GPIO17 на Ethernet индикацию, но то уже раздел функций на линии GPIO.

(Кстати, я говорил, что TL-MR3020 похож на TL-MR11U, и у меня есть предположение, что Вам не доступны некоторые потенциально свободные GPIO.
Мне помнится, что человек на форуме OpenWRT просил освободить два GPIO 14-15(хотя я не уверен, что там будет ноль, пока грузится устройство), которые не было возможности контролировать на устройстве, вот ссылка изменений, которых я смог добиться от разработчиков. Можете пропатчить прошивку (профиль mach-tl-mr3020.c) по этому примеру.
Как собрать собственную прошивку, смотрите соответствующий раздел.)


Тут делаем еще один вывод, можно обойтись без правки u-boot, если воспользуемся GPIO8(usb power) или GPIO9(uart_in) - но тогда нужно править уже firmware(прошивку) - это более безопасно, чем править загрузчик.
В этом случае нужно будет пожертвовать контролем питания usb-порта (это значит, что его нужно будет просто "отучить" от GPIO8, а на ногу МК, которая управляет питанием usb-порта подать такое же питание как у out=>high) или отключением UART порта в прошивке.

Но если всё же надумаете править значение в загрузчике uboot, то как вы понимаете это рассчитывается так:
Код:
0x0c7f = 0b00000000000000000000110001111111 (1 = включено; 0 = выключено)
                             ....9876543210 <= BIT и номер GPIO, и так до 29(кол-во GPIO на процессоре)
P.S.
Т.ч. то, что я ранее показывал как панацею (значение 0xc03e001(WR703) и 0xc020001(MR3020)) не имеет смысла, т.к. 0xc03e001(WR703) включает OE на GPIO 13-17, 26, 27.
А 0xc020001(MR3020) включает OE на GPIO 17, 26, 27.

Документация, откуда я взял всю эту белиберду.
Проверил на своем стареньком роутере.

P.S. P.S.
После такого откровения, я думаю, что я Вас точно отпугнул
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 410
Размер:	53.1 Кб
ID:	1413  

Последний раз редактировалось Dioptimizer; 28.12.2013 в 05:55. Причина: дополнение по поводу возможности включения gpio14-15
Dioptimizer вне форума   Ответить с цитированием
Старый 28.12.2013, 14:31   #6
ald
Junior Member
 
Регистрация: 13.10.2013
Сообщений: 14
Вес репутации: 0
ald is an unknown quantity at this point
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от Dioptimizer Посмотреть сообщение

P.S. P.S.
После такого откровения, я думаю, что я Вас точно отпугнул
Нет, не отпугнули. Спасибо за подробное объяснение.

Но, наверное, есть мысл попробовать вначале:
Цитата:
Альтернатива, специально для Вас.

Используйте UART_IN(GPIO9) - там вечный ноль, пока не сконфигурируете GPIO в out...
Спасибо. Буду разбираться и пробовать.
ald вне форума   Ответить с цитированием
Старый 28.12.2013, 19:58   #7
ald
Junior Member
 
Регистрация: 13.10.2013
Сообщений: 14
Вес репутации: 0
ald is an unknown quantity at this point
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Не стал пока ничего править.

Похоже, я чего-то не понимаю либо делаю не то/не так. Еще раз просматривал Wiki OpenWRT по GPIO на MR3020.
Там в таблице в строчках GPIO7 и GPIO29 написано "unused Pulled to ground".
А мультиметром меряю между GND и левым контактом резистора R15 либо R17 с картинок отсюда либо отсюда и получаю 2,6V и при загрузке и когда уже загружена оригинальная BB. GND тоже контакт брал и с первой и со второй картинки. Меряю на припаянном к резистору проводке.

Цитата:
Сообщение от Dioptimizer Посмотреть сообщение
Мне помнится, что человек на форуме OpenWRT просил освободить два GPIO 14-15(хотя я не уверен, что там будет ноль, пока грузится устройство), которые не было возможности контролировать на устройстве, вот ссылка изменений, которых я смог добиться от разработчиков. Можете пропатчить прошивку (профиль mach-tl-mr3020.c) по этому примеру.
Я поставил BARRIER BREAKER (Bleeding Edge, r39139).
По идее там уже должно быть пропатчено, поскольку по Вашей ссылке r35960.

Правда, пробовал цепляться к R11 и R12 справа резистора на картинке - мультиметром не увидел ни 0V ни 2,6V, получил "висящий в воздухе контакт".

Цитата:
Сообщение от Dioptimizer Посмотреть сообщение
Но прежде чем это делать, нужно всё проверить - на роутере установить утилиту io(через opkg) и прочитать с помощью нее область памяти:
Код:
io -4 0x18040000
(будет определенное значение этого GPIO_OE)
Прочитал:
# io -4 0x18040000

WR703N
18040000: 0800c5ff (=1000000000001100010111111111)

MR3020
18040000: 0c0205ff (=1100000000100000010111111111)

Запутался. А что значит 1 а что 0 по этому адресу?

Возьму еще MR703N с припаянными проводами к GPIO 7 и 29. Посмотрю там. Но подозреваю, что там будет 0V как и в другом MR703 на GPIO 14 и 15.
ald вне форума   Ответить с цитированием
Старый 28.12.2013, 20:17   #8
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 690
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от ald Посмотреть сообщение
Запутался. А что значит 1 а что 0 по этому адресу?
Каждый бит (всего их 32) соответствует номеру GPIO, отсчет битов производится от нуля до 32 справа налево.
Для функции GPIO_OE(0x18040000) 1 и 0 соответственно вкл./выкл. этой функции для каждого GPIO.
Dioptimizer вне форума   Ответить с цитированием
Старый 28.12.2013, 22:51   #9
ald
Junior Member
 
Регистрация: 13.10.2013
Сообщений: 14
Вес репутации: 0
ald is an unknown quantity at this point
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

Цитата:
Сообщение от Dioptimizer Посмотреть сообщение
Каждый бит (всего их 32) соответствует номеру GPIO, отсчет битов производится от нуля до 32 справа налево.
Для функции GPIO_OE(0x18040000) 1 и 0 соответственно вкл./выкл. этой функции для каждого GPIO.
С соответствием битов было понятно, а со значением - нет.
Т.е. для GPIO7 функция включена, а для GPIO29 нет?

Возникает вопрос - что начит "функция включена"?
А где указывается исходное значение (значение/напряжение при загрузке)?
Включена - значит можно устанавливать значение напряжения?
С GPIO29 не понятно.

измерения на WR703N после загрузки еще больше запутали.
GPIO7-2.2В
GPIO29-1.6В
GPIO14-0В
GPIO15-0В
GPIO17-0В
ald вне форума   Ответить с цитированием
Старый 28.12.2013, 09:05   #10
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 690
Dioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond reputeDioptimizer has a reputation beyond repute
По умолчанию Re: Управление светодиодами в роутерах TL-MR3020 и TL-WR703N

ald
Альтернатива, специально для Вас.

Используйте UART_IN(GPIO9) - там вечный ноль, пока не сконфигурируете GPIO в out...
Dioptimizer вне форума   Ответить с цитированием
Ответ


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

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 05:55. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика