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

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, 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 вне форума   Ответить с цитированием
 


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

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

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

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


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


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