mk_arcade_joystick_rpi, 在GPIO和MCP23017上,用于街机游戏杆的树莓派 内核模块

分享于 

12分钟阅读

GitHub

  繁體
Raspberry PI kernel module for arcade joystick on GPIO and MCP23017
  • 源代码名称:mk_arcade_joystick_rpi
  • 源代码网址:http://www.github.com/recalbox/mk_arcade_joystick_rpi
  • mk_arcade_joystick_rpi源代码文档
  • mk_arcade_joystick_rpi源代码下载
  • Git URL:
    git://www.github.com/recalbox/mk_arcade_joystick_rpi.git
    Git Clone代码到本地:
    git clone http://www.github.com/recalbox/mk_arcade_joystick_rpi
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/recalbox/mk_arcade_joystick_rpi
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    mk_arcade_joystick_rpi

    树莓派 GPIO游戏杆驱动程序

    mk_arcade_joystick_rpi完全集成在 recalbox 发行版中: 请参见 http://www.recalbox.com

    hotkeybtn 现在支持每个玩家一个按钮,代替MCP23017支持

    简介

    这个RaspberryPi是我一个月前发现的一个神奇工具。 RetroPie项目让我想用简单的街机按钮和游戏杆构建我自己的拱廊。

    我开始把我的游戏杆和按钮连接到我的树莓派,我写了第一个驱动器,以便连接我的操纵杆和按钮。

    但是,树莓派 板B 2最大可以用性为 21,不足以连接标准面板所需的所有 28开关( 2个游戏杆和 20按钮)。

    更新 0.1.5: 添加了GPIO自定义

    更新 0.1.4: Compatibily使用 rpi2

    更新 0.1.3: Compatibily使用 3.18.3:

    驱动程序安装现在与 3.18.3内核一起工作,并与最后一个固件一起发行。

    更新 0.1.2: 降级至 3.12.28 +:

    由于 MODULE 不会使用最近的内核和头加载,我们增加了将固件降级到兼容版本的可以能性。

    更新 0.1.1: RPi B+版本:

    新 树莓派 B+版本为我们带来了 9个 gpio,所以现在我们可以直接将 2游戏杆和 12按钮连接到 gpio。 为了支持配置中的2个游戏杆,我更新了驱动程序。

    更多游戏杆

    一个名为MCP23017的小型便宜芯片允许你添加 16个外部 rtc,并且只在on上使用两。 这个芯片允许你使用GPIO作为输出或者输入,如果我们想要更多的游戏杆,输入就是我们寻找的。

    如果要使用多个芯片,i2c协议可以为连接外围设备选择不同的地址,但是所有的。

    理论上你可以连接到 8个芯片,所以 8游戏杆。

    软件

    游戏杆驱动程序基于gamecon_gpio_rpi驱动程序,由 marqs

    它是为 4个方向游戏杆和 8按钮每个玩家写的。 使用MCP23017将输入数字扩展到 16: 4个方向和 12按钮。

    它可以读取一个游戏杆+ 按钮连接在 RPi GPIOs ( RPi B+版本中的两个) 和多达 5其他游戏杆+ 按钮从MCP23017芯片。 每个游戏杆都需要一个 MCP23017.

    它使用和MCP23017的内部拉,所有开关必须直接连接到相应的rtc和地面。

    常见案例:连接到gpio的操纵杆

    引脚

    让我们考虑一个带有这里按钮顺序的6按钮cab面板:

    
     ↑ Ⓨ Ⓧ Ⓛ 
    
    
    ← → Ⓑ Ⓐ Ⓡ 
    
    
     ↓ 
    
    
    
    

    使用 R = TR和L = TL

    以下是 rev B GPIO管脚概述:

    GPIO Interface

    如果你有 Rev B+ RPi或者 RPi2:

    GPIO Interface

    当然,地面对于所有开关来说都是通用的。

    安装

    安装脚本

    下载安装脚本:

    mkdir mkjoystickcd mkjoystick
    wget https://github.com/recalbox/mk_arcade_joystick_rpi/releases/download/v0.1.4/install.sh

    更新你的系统:

    sudo sh./install.sh updatesystem
    sudo reboot

    不要忘记重新启动( 否则下一部分就不能工作了) 并在没有任何参数的情况下运行脚本:

    sudo sh./install.sh

    现在跳转到加载驱动程序。

    手动安装

    更新系统:

    sudo apt-get update
    sudo apt-get upgrade
    sudo rpi-update

    1 - 安装你需要的全部:

    sudo apt-get install -y --force-yes dkms cpp-4.7 gcc-4.7 git joystick

    2 - 安装最后一个内核头:

    sudo apt-get install -y --force-yes raspberrypi-kernel-headers

    3.a - 从发行版( 首选) 安装驱动程序:

    wget https://github.com/recalbox/mk_arcade_joystick_rpi/releases/download/v0.1.4/mk-arcade-joystick-rpi-0.1.4.deb
    sudo dpkg -i mk-arcade-joystick-rpi-0.1.4.deb

    3.b - 或者使用dkms编译和安装:

    3.b.1 - 下载文件:

    git clone https://github.com/pinuct/mk_arcade_joystick_rpi/tree/customgpio

    3.b.2 - 在"/usr/src/模块创建一个文件夹模块版本//"

    mkdir/usr/src/mk_arcade_joystick_rpi-0.1.5/

    3.b.3 - 将文件复制到文件夹中:

    cd mk_arcade_joystick_rpi/
    cp -a */usr/src/mk_arcade_joystick_rpi-0.1.5/

    3.b.4 - 编译并安装模块:

    dkms build -m mk_arcade_joystick_rpi -v 0.1.5
    dkms install -m mk_arcade_joystick_rpi -v 0.1.5

    加载驱动程序

    驱动程序使用modprobe命令加载,并采用一个参数 nammed"地图"表示连接的游戏杆。 当你必须加载驱动程序时,你必须传递表示连接操纵杆列表的参数列表。 第一个参数将是映射到/dev/input/js0,的游戏杆,第二个参数是 js1 等等。

    如果你在 RPi GPIOs ( 游戏中的游戏杆 1 ) 上连接了一个游戏杆,你必须将"map=1"作为参数传递。 如果你在B+版本,你连接 2游戏杆你必须传递 map=" 1,2"作为参数。

    如果你的RPi B 或者B+版本上连接了一个操纵杆,则必须运行以下命令:

    sudo modprobe mk_arcade_joystick_rpi map=1

    如果你的RPi B+版本上连接了两个操纵杆,则必须运行以下命令:

    sudo modprobe mk_arcade_joystick_rpi map=1,2

    如果你的RPi B+上连接了一个TFT屏幕,你不能使用所有的gpio。 你可以运行以下命令,仅使用未使用的tmodel屏幕( 小心,并非所有的vxml屏幕都使用相同的引脚)。 与这里映射一起使用的gpio: :,26,19,5,6,22,4,20,17,0 ):

    sudo modprobe mk_arcade_joystick_rpi map=4

    如果你不想使用所有引脚,或者想要一个收费的自定义gpio映射:

    sudo modprobe mk_arcade_joystick_rpi map=5 gpio=pin1,pin2,pin3,.....,pin12

    pinx 是你想要的gpio的数量。 有 12个 posible gpio,带有按钮顺序: Y-,Y+,X-,X+,select,select,select,select,tr,x,use,use,use,use,use。 例如 gpio=21,13,26,19,-1,-1,22,24,-1,-1,-1,-1 对轴和GPIOs使用 GPIOs,26,19和 24按钮,其余按钮为 unused,其余按钮使用。

    将向文件"/dev/input/js0" 报告 GPIO joystick 1事件,并报告GPIO游戏 2事件将报告给"/dev/input/js1"

    启动时的自动加载

    打开 /etc/modules:

    sudo nano/etc/modules

    添加用于加载驱动程序的行:

    mk_arcade_joystick_rpi

    然后创建文件 /etc/modprobe.d/mk_arcade_joystick.conf :

    sudo nano/etc/modprobe.d/mk_arcade_joystick.conf

    并添加 MODULE 配置:

    options mk_arcade_joystick_rpi map=1,2

    测试

    使用以下命令测试游戏杆输入:

    jstest/dev/input/js0

    更多游戏杆案例: MCP23017

    下面是MCP23017管脚概要:

    MCP23017 Interface

    为MCP23017###准备 RPi

    遵循标准安装说明。

    在你的RPi上激活 i2c:

    sudo nano/etc/modules

    添加以下线路以自动加载i2c模块:

    i2c-bcm2708 
    i2c-dev

    如果文件/etc/modprobe. d/raspi-blacklist。conf存在:

    sudo nano/etc/modprobe.d/raspi-blacklist.conf

    检查你是否有以下行:

    i2c-bcm2708 

    在行的开头添加一个 # 以删除黑名单

    重新引导或者加载两个 MODULE:

    modprobe i2c-bcm2708 i2c-dev

    MCP23017芯片的制备

    必须将引脚pins和A2设置为 0或者 1,以便设置芯片的i2c地址。 如果你只有 1个芯片,将 3引脚连接到地面。 只需将一个引脚连接到 3.3即可将它的状态设置为 1,并更改MCP23017的地址。

    你还必须将复位引脚连接到 3.3 v。

    配置

    当你想加载驱动时,你必须传递一个参数列表来表示连接的游戏杆列表。 第一个参数将是映射到/dev/input/js0,的游戏杆,第二个参数是 js1 等等。

    如果你在 RPi gpio上连接了一个游戏杆,你必须将" 1"作为参数传递。

    如果你使用MCP23017连接了一个或者多个操纵杆,必须通过连接的I2C外设地址,你可以通过以下命令获得该地址:

    sudo i2cdetect -y 1

    通过设置pads和A2到 0或者 1来完成每个MCP23017的配置。

    如果你配置了MCP23017和连接到地面的,那么i2cdetect返回的地址应为 0个,。

    因此,如果你有一个连接到 RPi gpio的操纵杆和一个带有地址 0 x20的MCP23017上的操纵杆,为了加载驱动程序,必须运行以下命令:

    sudo modprobe mk_arcade_joystick_rpi map=1,0x20

    将向文件"/dev/input/js0" 报告GPIO游戏杆事件,mcp23017游戏杆事件将报告给"/dev/input/js1"。

    在一个地址 0,一个在地址上,一个在地址 0,一个在地址x24上,一个在地址上:

    sudo modprobe mk_arcade_joystick_rpi map=1,0x20,0x24

    已知的Bug

    如果试图在加载驱动程序时使用像i2cget或者i2cset这样的工具读或者写,那么你会有一个不好的时间。

    如果在驱动程序运行时尝试 i2cdetect,它将显示奇怪的外围地址。

    当前驱动程序不支持 256MB 树莓派 模型B。 如果想让驱动程序处理旧的,则必须将BSC1_BASE的地址更改为( BCM2708_PERI_BASE + 0 x205000 ),以便使用正确的i2c地址。

    Credits


    模块  arc  RAS  树莓派  内核  GPIO  
    相关文章