Zedboard上的OLED

时间:2015-03-28 20:19:13

标签: linux-device-driver embedded-linux xilinx spi zynq

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

a)zedboard中的OLED如何内部连接,是通过SPI,GPIO还是PL。如果它通过SPI / GPIO然后是哪个引脚?

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

c)我有一个redhat桌面,是否有任何SDK可用于从我的redhat桌面为zedboard开发用户空间驱动程序。

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

提前感谢您的帮助和感谢!

1 个答案:

答案 0 :(得分:4)

  

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

web 搜索的第一或第二个结果“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< -bus_of_5 - > 128x32 OLED

     

第20页:2.4.4 OLED   ZedBoard上使用了Inteltronic / 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格式的引脚列表版本较短:http://www.xilinx.com/support/packagefiles/z7packages/xc7z020clg484pkg.txt

设备/包装xc7z020clg484 9/18/2012 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文件将其引导至Linux内核(PS =处理系统= ARM)的ARM部分,通过system.ucf文件将此引脚访问到芯片的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"

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

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)我可以使用SPI / GPIO为zedboard中的OLED创建用户空间驱动程序的任何教程或文档吗?

根据安富利的入门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以使用来自用户空间的显示,load_oled也会使用此/root/logo.bin界面显示zed_oled文件。

zed_oled的典型用法与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的代码(您可以使用在线 web 翻译服务来阅读文本)

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

  

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

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

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

还有dirver的源代码:https://github.com/Digilent/linux-digilent/blob/06b388903e5459687ba2538ae3895ffe29e2e39e/drivers/pmods/pmodoled-gpio.c

  

c)我有一个redhat桌面,是否有任何SDK可用于从我的redhat桌面为zedboard开发用户空间驱动程序。

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