代码之家  ›  专栏  ›  技术社区  ›  user3676724

Zedboard上的OLED

  •  1
  • user3676724  · 技术社区  · 10 年前

    我对zedboard很陌生。我有一个运行Ubuntu映像的zedboard。我正在尝试编写一个驱动程序来运行板上的OLED。在板上启动时,板上的OLED显示一些显示器(Xilinx徽标),因此我假设它已经有驱动程序。我有以下问题:

    a) zedboard中的OLED是如何内部连接的,是通过SPI、GPIO还是PL。如果是通过SPI/GPIO,那么是哪些引脚?

    b) 我可以遵循任何教程或文档来为zedboard中的OLED使用SPI/GPIO创建用户空间驱动程序吗?

    c) 我有一个redhat桌面,有没有SDk可以用来从我的redhat台式机上为zedboard开发用户空间驱动程序。

    我在zedboard上看到了很多材料,但没有一个谈论OLED是如何内部连接的。在一个文档中,它显示它连接到PL。如果是这样的话,那么我如何在zedboard上使用PL编写用户空间驱动程序?我将使用C进行编码。

    提前感谢您的帮助!

    1 回复  |  直到 10 年前
        1
  •  4
  •   osgx    10 年前

    a) zedboard中的OLED是如何内部连接的,是通过SPI、GPIO还是PL。如果是通过SPI/GPIO,那么是哪些引脚?

    的第一个或第二个结果 网状物 搜索“zedboard oled pdf”- http://zedboard.org/sites/default/files/ZedBoard_HW_UG_v1_1.pdf 然后在其中搜索“oled”(pdf文件的页码,不打印在文档中):

    第3页:2.4.4 OLED。。。。。。19

    第4页:128x32 OLED显示屏

    第5页:ZYNQ XC7Z020-CSG484 OLED<-f_5->128x32 OLED

    第20页:2.4.4 OLED ZedBoard上使用了Intel/Wisechip UG-2832HSWEG04 OLED显示器。这 提供128x32像素无源矩阵单色显示器。显示器尺寸为30mm x11.5mm x 1.45mm。表11-OLED连接。。。界面

    oled_pin symb  EPP_pin  Function
    9        RES#   U9      Power Reset for Controller and Driver
    8        CS#    N/C     Chip Select – Pulled Down on Board
    10       D/C#  U10      Data/Command Control
    11       SCLK  AB12     Serial Clock Input Signal
    12       SDIN  AA12     Serial Data Input Signal 
    

    所以,我们知道OLED的模型 UG-2832HSWEG04 (数据表 http://www.adafruit.com/datasheets/UG-2832HSWEG04.pdf 具有关于数据接口的低级细节)和数据连接;这是具有1个串行数据输入和1个串行时钟的OLED。

    Pinout pdf是 http://www.xilinx.com/support/documentation/user_guides/ug865-Zynq-7000-Pkg-Pinout.pdf (太长,无法阅读),但有较短版本的txt格式的pin列表: http://www.xilinx.com/support/packagefiles/z7packages/xc7z020clg484pkg.txt

    设备/包xc7z020clg484 2012年9月18日10:07:35

    Pin   Pin Name                 Memory Byte Group  Bank  VCCAUX Group  Super Logic Region  I/O Type 
    AA12  IO_L7P_T1_13             1                  13    NA            NA                  HR        
    AB12  IO_L7N_T1_13             1                  13    NA            NA                  HR        
    

    HR表示“3.3V高量程(HR)组”,两个数据引脚均来自“组13”。引脚名称为IO_*,因此它“支持输入和输出功能”,是“PL引脚”(PL=可编程逻辑=FPGA)的一部分。FPGA部件的默认Zedboard固件通过system.ucf文件将该引脚路由到某个内部processing_system GPIO引脚,从而将该引脚访问到具有linux内核的芯片的ARM部件(PS=处理系统=ARM):

    NET processing_system7_0_GPIO_pin[5]  LOC = AB12 | IOSTANDARD="LVCMOS25";  # "OLED-SCLK"
    NET processing_system7_0_GPIO_pin[6]  LOC = AA12 | IOSTANDARD="LVCMOS25";  # "OLED-SDIN"
    

    然后在设备树(dts)中注册GPIO引脚 https://github.com/Digilent/linux-digilent/blob/master/arch/arm/boot/dts/digilent-zed.dts 在里面 zed_oled 组:

    zed_oled {
            compatible = "dglnt,pmodoled-gpio";
            /* GPIO Pins */
            vbat-gpio = <&ps7_gpio_0 55 0>;
            vdd-gpio = <&ps7_gpio_0 56 0>;
            res-gpio = <&ps7_gpio_0 57 0>;
            dc-gpio = <&ps7_gpio_0 58 0>;
            /* SPI-GPIOs */
            spi-bus-num = <2>;
            spi-speed-hz = <4000000>;
            spi-sclk-gpio = <&ps7_gpio_0 59 0>;
            spi-sdin-gpio = <&ps7_gpio_0 60 0>;
        };
    

    b) 我可以遵循任何教程或文档来为zedboard中的OLED使用SPI/GPIO创建用户空间驱动程序吗?

    根据Avnet的Getting Started pdf,第17页的“演示2 OLED显示器”部分(网络搜索为“zedboard OLED”) http://zedboard.org/sites/default/files/documentations/GS-AES-Z7EV-7Z020-G-14.1-V6%5B1%5D.pdf#page=17 有内核驱动程序 pmodoled-gpio.ko (屏幕截图上显示为“pmodoled gpio spi”),所以OLED是用gpio引脚驱动的。

    有两个助手脚本: unload_oled 删除内核模块 load_oled 将其插入内核。驱动程序将创建特殊设备文件 /dev/zed_oled 从用户空间和 加载(_O) 还显示 /root/logo.bin 使用此文件 已编辑(_O) 界面

    的典型用法 已编辑(_O) 就像 cat yourfile.bin > /dev/zed_oled 例如 http://people.mech.kuleuven.be/~lin.zhang/notes/emebedded-linux/zedboard-oled-display.html 更好 http://zedboard.org/content/zedboard-oled

    .bin文件格式。。。屏幕从右到左、从上到下写入,每个像素由.bin文件中一个字节内的一位表示。从上到下8个像素读取位,然后移动到1个像素并写入下一个8位,然后继续读取,直到到达行的末尾。然后向下移动8个像素,再重复3次。

    您可以从C应用程序进行写操作,检查代码 http://www.cnblogs.com/popo0904/p/3853144.html (您可以在线使用 网状物 阅读文本的翻译服务)

    内核模块文档 PmodOLED 用于标准zedboard演示: https://github.com/Digilent/linux-digilent/blob/master/Documentation/pmods/pmodoled.txt

    驱动器为PmodOLED的显示提供512字节的显示缓冲区。 整个屏幕分为四行,每行128位宽 如下图所示。

        +--------------------------...----------------------------+
        +                         Line 4                          +
        +--------------------------...----------------------------+
        +                         Line 3                          +
        +--------------------------...----------------------------+
        +                         Line 2                          +
        +--------------------------...----------------------------+ MSB (bit 7)
        +                         Line 1                          +
        +--------------------------...----------------------------+ LSB (bit 0)
    byte 127                                                     byte 0
    

    用户可以对设备节点执行读写功能以访问数据 在显示缓冲器内。

    并且有驱动程序的源代码: https://github.com/Digilent/linux-digilent/blob/06b388903e5459687ba2538ae3895ffe29e2e39e/drivers/pmods/pmodoled-gpio.c

    c) 我有一个redhat桌面,有没有SDk可以用来从我的redhat台式机上为zedboard开发用户空间驱动程序。

    标准驱动程序是ZEDboard上此OLED的内核空间,您可以从预编译的ZEDbboard固件中使用它。或者您可以根据zedboard指令构建内核,所有内核内驱动程序也将构建(如果在内核配置中启用): http://zedboard.org/content/creating-linux-kernel-image-boot-zc702-sd-card-slot

    推荐文章