28.12.2013, 08:44 | #1 |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689 |
Отключение UART для освобождения GPIO (ath79)
Может возникнуть потребность отключения UART, для того чтобы можно было использовать TX и RX в качестве GPIO.
Дело в том, что на процессорах AR71xx/AR913x/AR724X/AR933X - UART по умолчанию заблокирован и использует внутренние ресурсы (буфер, прерывание) для взаимодействия с драйвером. Так вот, есть возможность отключить внутренний UART простым скриптом, без необходимости патчить/перекомпилировать прошивку Устанавливаем io: Код:
opkg update && opkg install io Код:
touch /usr/sbin/uart_gpio Код:
#!/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 до следующей перезагрузки устройства, т.е. необходимо автоматизировать процесс, например забив команду в /etc/rc.local. После чего нужно и можно конфигурировать сами GPIO с помощью /sys/class/gpio/export ... ну я думаю не стоит вдаваться в детали, т.к. кому нужно отключить UART для каких-то целей - тот разберется. Напомню, для AR724x/AR933x: Код:
UART_IN | UART_OUT GPIO9 | GPIO10 (ОБНОВЛЕНО: обрезан скрипт - Не нужно выгружать uart-драйвер!) Последний раз редактировалось Dioptimizer; 06.01.2014 в 23:48. |
25.09.2015, 23:59 | #2 |
Junior Member
Регистрация: 02.09.2015
Сообщений: 11
Вес репутации: 0 |
Re: Отключение UART для освобождения GPIO (ath79)
а возможно ли такое на dir-320a1 (BCM947xx/953xx)
|
26.09.2015, 01:00 | #3 |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 |
Re: Отключение UART для освобождения GPIO (ath79)
Крутая штука, но у меня UART используется для дисплея.
Вопрос в другом, можно отключить к примеру UART частично? Т.е. только UART_IN или UART_OUT =) |
23.02.2016, 15:26 | #4 |
Member
Регистрация: 04.02.2016
Сообщений: 41
Вес репутации: 0 |
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. |
03.03.2016, 17:02 | #5 |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 689 |
Re: Отключение UART для освобождения GPIO (ath79)
Жаль, теперь Вам опасно что либо прошивать в роутер, т.к. вы без возможности что либо восстановить посредством консоли.
А после отключения UART этим скриптом, Вы способны "дергать" 'этим GPIO(9)? (возможно будет работать если Mux не сгорел) |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|