专栏中心

EEPW首页 > 专栏 > 如何使用 开源硬件Banana PI BPI-R2's GPIO-s

如何使用 开源硬件Banana PI BPI-R2's GPIO-s

发布人:sinovoip 时间:2021-04-06 来源:工程师 发布文章

BPI-R2集成MTK7623N 四核 ARM Cortex-A7 MP 支持主频1.3 ghz,BPI-R2 路由器提供丰富各种外设接口,包括 HDMI TX 高清接口, MIPI DSI 屏接口, PCIe2.0 接口, USB2.0 OTG 端口, USB3.0 端口, SATA 端口,5 千兆网口, 板载802.11a/b/g/n wifi 无线& BT4.1蓝牙 , 并且通过mini PCI-e支持 802.11ac/n WLAN

BPI-R2 系统支持 Android5.1,并完善支持 OpenWRT,Debian linux,Ubuntu linux, Raspbian 和其他嵌入式操作系统. 尺寸与BPI-R1完全一样大小, 支持 1080P y高清视频输入,40 PIN GPIO 与 Raspberry Pi 3一致.

同香蕉派其他板一样,Banana Pi BPI-R2 也有40-pin GPIO 接口:

Banana Pi BPI-R2 的40 PIN GPIO 定义与树莓派 3 一亲,下面是 Banana Pi GPIO定义:


Banana pi BPI-R2 40 PIN GPIO 定义
GPIO Pin NameDefault Function

CON1-P01VCC-3V3

CON1-P02VCC-5V

CON1-P03I2C\_SDA0GPIO75
CON1-P04VCC-5V

CON1-P05I2C\_SCL0GPIO76
CON1-P06GND

CON1-P07PWM-003GPIO206
CON1-P08UTXD1GPIO80
CON1-P09GND

CON1-P10URXD0GPIO81
CON1-P11URXD1GPIO80
CON1-P12I2S0\_BCKGPIO74
CON1-P13UTXD0GPIO79
CON1-P14GND

CON1-P15PWM-002GPIO205
CON1-P16URTS1GPIO25
CON1-P17VCC-3V3

CON1-P18UCTS1GPIO24
CON1-P19SPI0\_MOGPIO56
CON1-P20GND

CON1-P21SPI0\_MIGPIO55
CON1-P22PCM\_CLKGPIO18
CON1-P23SPI0\_CKGPIO54
CON1-P24SPI0\_CSNGPIO53
CON1-P25GND

CON1-P26PCM\_RXGPIO20
CON1-P27I2C\_SDA1GPIO57
CON1-P28I2C\_SCL1GPIO58
CON1-P29PCM\_RSTGPIO22
CON1-P30GND

CON1-P31SPDIF\_OUTGPIO200
CON1-P32PCM\_TXGPIO21
CON1-P33I2S0\_MCLKGPIO126
CON1-P34GND

CON1-P35I2S0\_LRCKGPIO73
CON1-P36PCM\_SYNCGPIO19
CON1-P37SPDIF\_IN1GPIO202
CON1-P38I2S0\_DATA\_INGPIO72
CON1-P39GND

CON1-P40I2S0\_DATA\_OUTGPI049



有两种方式使用R2的GPIO-s:

使用调试接口/sys/devices/platform/1000b000。pinctrl/mt_gpio,参考脚本1

使用GPIO的通用接口:/sys/class/ GPIO /export和/sys/class/ GPIO /unexport,请参考脚本2


Script 1 (it can be used on Ubuntu system with kernel 4.4.x)

--------------------

    SYS_FILE=/sys/devices/platform/1000b000.pinctrl/mt_gpio

    mt_gpio_mode()

    {

       pin=$1

       mode=$2

      

       if [ ! -f ${SYS_FILE} ]; then

           exit 1

       fi


       echo "mode $pin $mode" > ${SYS_FILE}


       return 0   

    }


    mt_gpio_dir()

    {

       pin=$1

       dir=$2

     

       if [ "x${dir}" == "xout" ]; then

           dir_val=1

       else

           dir_val=0

       fi

     

       if [ ! -f ${SYS_FILE} ]; then

           exit 1

       fi


       echo "dir $pin $dir_val" > ${SYS_FILE}


       return 0   

    }


    mt_gpio_out()

    {

       pin=$1

       out=$2

     

       if [ ! -f ${SYS_FILE} ]; then

           exit 1

       fi


       echo "out $pin $out" > ${SYS_FILE}


       return 0   

    }


    mt_gpio_in()

    {

       pin=$1

     

       if [ ! -f ${SYS_FILE} ]; then

           exit 1

       fi


       echo "start $1" > ${SYS_FILE}

       result=`cat ${SYS_FILE} | grep "$1"`


       if [ "x${result}" == "x" ]; then

           echo "can't get $pin status"

           exit 2

       fi

       echo ${result}

       pin_val=`echo ${result} | awk -F ' |-' '{print $5}'`

       if [ ${pin_val} == "0" ] ; then

           return 0

       else

           return 1

       fi

      

       return 0


    }




Script 2  (it can be used on Ubuntu system with kernel 4.4.x, and lede with kernel 4.9.x)

----------

    #!/bin/ash


    DIR=/sys/class/gpio/


    global_gpio_offset=0


    mt_gpio_init()

    {

        pin=$1


        EXPORT=/sys/class/gpio/export

        UNEXPORT=/sys/class/gpio/unexport



        name=`ls $DIR | grep chip`

        if [ x${name} != x ]; then

            echo "chip id : $name"

        else

            echo "No available gpio chip"

            exit 1

        fi


        base=`cat ${DIR}/${name}/base`


        gpio_offset=`echo $((base+$pin))`

        global_gpio_offset=$gpio_offset


        if [ -d ${DIR}/gpio${gpio_offset} ]; then

            return 0

        else

            echo ${gpio_offset} > ${EXPORT}

        fi

    }


    mt_gpio_init $1


    if [ $2 == 'dir' ]; then

        if [ $3 == 'out' ]; then

            echo out > ${DIR}/gpio${global_gpio_offset}/direction

        else

            echo in > ${DIR}/gpio${global_gpio_offset}/direction

        fi

    elif [ $2 == 'val' ]; then

        if [ $# == 2 ]; then

            cat ${DIR}/gpio${global_gpio_offset}/value

        elif [ $# == 3 ]; then

            echo $3 >  ${DIR}/gpio${global_gpio_offset}/value

        fi   

    fi 


all GPIO 定义,请参考在线文档 : 


%E9%A6%99%E8%95%89%E6%B4%BE_BPI-R2#BPI-R2_GPIO_.E5.AE.9A.E4.B9.89


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

电路设计与制板:Protel DXP库元器件手册

如何在速度更快、尺寸更小的应用中精确检测电机位置?

电源与新能源 2026-03-06

开始使用高电压电机控制入门 + PFC包

视频 2011-07-04

电力电子技术电子书[PDF]---(4)(中央空调)

为什么可扩展高性能 SoC 是自动驾驶汽车的未来

汽车电子 2026-03-06

一文读懂 | 如何选择多口充电器快充方案!

TI的电机控制工业自动化系统解决方案

视频 2011-07-04

英飞凌推出TEGRION SLI22汽车安全控制器

TI内部电机控制 - 32位微控制器

视频 2011-07-04

实施电机系统 - 电机控制电子实验室第9章

视频 2011-07-04

特朗普政府或将实施全球AI芯片出口管制,英伟达与AMD恐受波及

智能计算 2026-03-06

爆火的OpenClaw! 告别云端,米尔RK3576开发板本地部署

电动汽车快速充电教程:破解兆瓦级充电的核心技术挑战

这 3 个半导体创新,重新定义世界体验

2026-03-06

全新汽车架构重构处理器与内存选型逻辑

电力电子技术电子书[PDF]---(2)(中央空调)

一文速览:TI 如何赋能机器人行动、感知和协作能力

机器人 2026-03-06

电力电子技术电子书[PDF]---(3)(中央空调)

开发工具 / 评估板演示 - 电机控制电子实验室第10章

视频 2011-07-04
更多 培训课堂
更多 焦点
更多 视频

技术专区