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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.12.2013, 08:44   #1
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689
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
По умолчанию Отключение UART для освобождения GPIO (ath79)

Может возникнуть потребность отключения UART, для того чтобы можно было использовать TX и RX в качестве GPIO.
Дело в том, что на процессорах AR71xx/AR913x/AR724X/AR933X - UART по умолчанию заблокирован и использует внутренние ресурсы (буфер, прерывание) для взаимодействия с драйвером.

Так вот, есть возможность отключить внутренний UART простым скриптом, без необходимости патчить/перекомпилировать прошивку

Устанавливаем io:
Код:
opkg update && opkg install io
Создаем пустой файл(это если из консоли):
Код:
touch /usr/sbin/uart_gpio
Вставляем сам скрипт(используйте vi если из консоли):
Код:
#!/bin/sh
# Bitwise operations: & = And, | = Or, ^ = xOr, << = Left Shift

detect_addr="0x18060090"
rev_id_maj_msk="0xfff0"
func_addr="0x18040028"
bit1="1<<1"            # using bit1 for AR724x/AR933x
bit8="1<<8"            # using bit8 for AR71xx/AR913x

detect_value=0x`io -4 $detect_addr | cut -f3 -d' '`
detected_result=$(printf "0x%4.4x" $(($detect_value & $rev_id_maj_msk)))
func_value=0x`io -4 $func_addr | cut -f3 -d' '`

# depending on the detected rev_id of CPU -
# it will be use specific bit# as case_bit variable, or exit
case "$detected_result" in
# AR7240/AR7241/AR7242/AR9330/AR9331
0x00c0 | \
0x0100 | \
0x1100 | \
0x0110 | \
0x1110 )
    case_bit=$bit1
    ;;
# AR71xx/AR913x
0x00a0 | \
0x00b0 )
    case_bit=$bit8
    ;;
# AR9341/AR9342/AR9344
0x0120 | \
0x1120 | \
0x2120 )
    echo -e "No need to disable UART on AR934x processors,\n \
    just use sysfs to reprogram GPIOs."
    break
    exit 0
    ;;
* )
    echo "Can't detect your CPU, must be Atheros!"
    break
    exit 1
    ;;
esac

# we using Bitwise xOr operation to switching bit# state (0 or 1)
io -4 $func_addr $(printf "0x%8.8x" $(($func_value ^ $case_bit)))

# read bit# state and depending on the state - print some info
if [ $(($func_value & $case_bit)) = $(($case_bit)) ]; then
    echo "Hardware UART is turned OFF"
    # You can use this line for automatic configuring GPIOs via sysfs
    # or you can load other modules that use these GPIOs
else
    echo "Hardware UART is turned ON"
fi
Назначаем права на выполнение:
Код:
chmod +x /usr/sbin/uart_gpio
И собственно сам запуск uart_gpio(повторный запуск включает обратно)...
Конечно оно отключает UART до следующей перезагрузки устройства, т.е. необходимо автоматизировать процесс, например забив команду в /etc/rc.local.
После чего нужно и можно конфигурировать сами GPIO с помощью /sys/class/gpio/export ... ну я думаю не стоит вдаваться в детали, т.к. кому нужно отключить UART для каких-то целей - тот разберется.
Напомню, для AR724x/AR933x:
Код:
UART_IN | UART_OUT
 GPIO9  |  GPIO10
Удачи!

(ОБНОВЛЕНО: обрезан скрипт - Не нужно выгружать uart-драйвер!)

Последний раз редактировалось Dioptimizer; 06.01.2014 в 23:48.
Dioptimizer вне форума   Ответить с цитированием
Старый 25.09.2015, 23:59   #2
Flom
Junior Member
 
Регистрация: 02.09.2015
Сообщений: 11
Вес репутации: 0
Flom is an unknown quantity at this point
По умолчанию Re: Отключение UART для освобождения GPIO (ath79)

а возможно ли такое на dir-320a1 (BCM947xx/953xx)
Flom вне форума   Ответить с цитированием
Старый 26.09.2015, 01:00   #3
khseal
Senior Member
 
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0
khseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of lightkhseal is a glorious beacon of light
По умолчанию Re: Отключение UART для освобождения GPIO (ath79)

Крутая штука, но у меня UART используется для дисплея.
Вопрос в другом, можно отключить к примеру UART частично?
Т.е. только UART_IN или UART_OUT =)
khseal вне форума   Ответить с цитированием
Старый 23.02.2016, 15:26   #4
dron0
Member
 
Регистрация: 04.02.2016
Сообщений: 41
Вес репутации: 0
dron0 is an unknown quantity at this point
По умолчанию Re: Отключение UART для освобождения GPIO (ath79)

Подключил USB-UART переходник к консоли dlink DIR-615E4 и к моем расстройству вижу что работаешь лишь TX от роутера, то есть вижу лог загрузки, на RX осцилом вижу ноль, при при подключении TX от USB переходника сигнал просажен почти до 0.5 вольта, создается впечатление что gpio на выход включен что ли и установлен в ноль, в общем у кого такой роутер пожалуйста отпишитесь норм ли это или может у меня консоль подпаленная у роутера....
UPD Померял RX вывод роутера, 22 ома на GND, что намекает на пробитый пин

Последний раз редактировалось dron0; 24.02.2016 в 15:13.
dron0 вне форума   Ответить с цитированием
Старый 03.03.2016, 17:02   #5
Dioptimizer
Senior Member
 
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689
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: Отключение UART для освобождения GPIO (ath79)

Жаль, теперь Вам опасно что либо прошивать в роутер, т.к. вы без возможности что либо восстановить посредством консоли.
А после отключения UART этим скриптом, Вы способны "дергать" 'этим GPIO(9)?
(возможно будет работать если Mux не сгорел)
Dioptimizer вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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