![]() |
![]() |
#1 |
Senior Member
Регистрация: 17.02.2013
Адрес: Харьков
Сообщений: 235
Вес репутации: 690 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Может возникнуть потребность отключения 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. |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|