当前位置: 首页 > article >正文

petalinxu 在zynq的FPGA下的ST7735S的驱动配置

spi的接线:

【TFT模块排针8】 【开发板spi,gpio】【antminers9】
VCC ----------- 3.3V   -----------      3.3V
GND ----------- GND -----------      GND
BLK(背光)-------GPIO----------- BANK34_L4N_RXD2(w13; j2.12; gpio[2])
RST(复位)-------GPIO----------- BANK34_L3N_RST2(v13; j2.15; gpio[3])
DC-------GPIO 四线SPI中的命令/数据选择 ----- BANK34_L4P_TXD2(v12; j2.11; gpio[1])
SDA------- MOSI(SPI)-----------BANK34_L6P_TXD3(P14; j3.11)
SCL------- SCK(SPI)    ----------- BANK34_L5N_RST3(T15; j3.15)
CS  ------- ss(SPI) -----BANK34_0_PLUG2(R19; j2.5; gpio[0]) 直接垃低

CS  ------- ss(SPI) 接地??因为这个SPI接口只接收数据,所以直接接地没问题。

CS的实际接线我用的是BANK34_0_PLUG2(R19; j2.5; gpio[0])这个GPIO去控制。

4个GPIO用的是AXI_gpio的IP模块。这个模块的vivado配置先配好测好。

petalinux的编译用HYPER-V的虚拟机,在写入SD时不方便用EXT4分区。用SD的单一FAT 分区。initrd 的根文作系统就好。但单独的EXT4分区好更改一些内容。虚拟硬盘一开如就用300G以上的,否则后面加容量,很麻烦。要生成SDK时编译过程中会用到相当大的硬盘容量,150多吧。

petalinux默认用的是drm的显示驱动框架。FP的框架,默认没配置。/st7735 找到并配置好。6.4的内核的驱动是ST7735R的,这个用于ST7735S没问题。/backlight可能要配一下。驱动源码不需要动,主要工作在配置DTS 。对petalinxu主要就是system-user.dtsi。内容如下:

/include/ "system-conf.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

//#define GPIO_ACTIVE_HIGH 0
//#define GPIO_ACTIVE_LOW 1
//gpio.h就是如上这种反逻辑定义,但下面的语义反而正确。

/{

    model="AntMiner S9";
    compatible = "zynq7010,zynq-7020","xlnx,zynq-7000";

    leds {
        compatible="gpio-leds";        
        gpio-led1{
            label="led1";
            gpios=<&gpio0 58 GPIO_ACTIVE_LOW>;
            default-state="off";
        };
    };

    keys {
        compatible="gpio-keys";
        autorepeat;
        gpio-key1{
            label="key1";
            gpios=<&gpio0 51 GPIO_ACTIVE_LOW>;
            //linux,code=<105>;//right
            linux,code=<KEY_RIGHT>;
            gpio-key,wakeup;
            debounce-interval=<10>;
        };
    };
    backlight:backlight {
        compatible="gpio-backlight";
        gpios=<&axi_gpio_0 2 GPIO_ACTIVE_LOW>;
        default-on;
    };
};

&sdhci1 {
    disable-wp;
    no-1-8-v;
};

&spi0 {
    status="okay";
    //cs-gpios=<0>,<&axi_gpio_0 0 0>;//<0> for reg=<0>
    cs-gpios=<&axi_gpio_0 0 GPIO_ACTIVE_LOW>;
    tft_lcd@0 {
        status="okay";
        compatible="sitronix,st7735r";
        reg=<0x0>;
        spi-max-frequency=<15000000>;
        spi-cpol;
        spi-cpha;
        fps=<20>;
        buswidth=<8>;
        dc-gpios=<&axi_gpio_0 1 GPIO_ACTIVE_HIGH>;
        reset-gpios=<&axi_gpio_0 3 GPIO_ACTIVE_LOW>;
        bl-gpio=<&backlight>;
    };

};
FB的测试网上下载了一个fb-test-app的源码,这个在petalinu下编译不难,长时间没做,花了单开时间才把它编译出来,主要是要看明的Makefile,并改正确。也补在下面吧。
先要构建sdk:
petalinux-build --sdk
安装sdk:安装路径下/opt/Xilinx/Petalinux/2022.2/,是没有sdk这个文件夹的.
petalinux-package --sysroot -s -d /opt/pkg/petalinux2024.2/sdk

编译前:

source /opt/pkg/petalinux2024.2/sdk/environment-setup-cortexa9t2hf-neon-xilinx-linux-gnueabi
 

fb-test-app改后Makefile如下:


APP = myfbtest

#这些定义是fb-test源码中引用,不定义报错,这个程写的。

VERSION = 1
PATCHLEVEL = 1
SUBLEVEL = 0
EXTRAVERSION = .git
NAME = rosetta

override CFLAGS += -DVERSION=$(VERSION)
override CFLAGS += -DPATCHLEVEL=$(PATCHLEVEL)
override CFLAGS += -DSUBLEVEL=$(SUBLEVEL)
override CFLAGS += -DVERSION_NAME=\"$(NAME)\"


# CC=$(CROSS_COMPILE)gcc
# CXX=$(CROSS_COMPILE)g++

# Common options
#CFLAGS= -g -O3 
CFLAGS=-O2 -Wall
LIBS = 

# Options for extra libraries

#下面是一个目录下,用多个源文件编一个应用程序的定义方式。因为这个目录下多个源文件编多个应用,需要注去。
#CFLAGS_OPENCV = `pkg-config opencv --cflags`
#LIBS_OPENCV = `pkg-config opencv --libs`

# Find all C files and create object file list
#C_SRC = $(wildcard *.c)
#C_OBJ = $(patsubst %c, %o, $(C_SRC))

# Find all Cpp files and create object file list
#CPP_SRC = $(wildcard *.cpp)
#CPP_OBJ = $(patsubst %cpp, %o, $(CPP_SRC))

#下需才是主要配置
# Include directory
INC_PATH=-I. -I./include -I../include

PROGS=perf rect offset fb-test fb-string

all: $(PROGS)
    
.c.o: common.h font.h
    $(CC) -c $(CFLAGS) $(INC_PATH) -o $@ $< $(LIBS) 

fb-test: fb-test.o common.o font_8x8.c
    $(CC) -o $@ fb-test.o common.o font_8x8.c $(LDFLAGS) $(LDLIBS)
fb-string: fb-string.o common.o font_8x8.c
#    $(CXX) -o $@ $(C_OBJ) $(CPP_OBJ) $(LDFLAGS) $(LDLIBS)
    $(CC) -o $@ fb-string.o common.o font_8x8.c $(LDFLAGS) $(LDLIBS)    
clean:
    rm -f $(PROGS) *.o
    
 

    


http://www.kler.cn/a/586138.html

相关文章:

  • Vivado IP核之定点数累加Accumulator使用说明
  • C++设计模式-外观模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
  • 大数据 spark hive 总结
  • 小肥柴慢慢手写数据结构(C篇)(4-3 关于栈和队列的讨论)
  • LuaJIT 学习(3)—— ffi.* API 函数
  • 搜广推校招面经四十七
  • 模拟类似 DeepSeek 的对话
  • 《Python深度学习》第一讲:深度学习基础
  • freeswitch(多台服务器级联)
  • Amazon RDS ProxySQL 探索(一)
  • Windows 发票闪印 PrintPDF-v3.6.10-第三方发票打印辅助工具,无需安装阅读器即可使用
  • idea 生成jpa的mvc三层
  • 基于yolov8+streamlit实现目标检测系统带漂亮登录界面
  • 雷池WAF 处理 HTTP 请求的流程
  • MySQL 8 主从同步安装与配置
  • 【git】补丁文件
  • OpenHarmony体系架构深度解析
  • 环路广播风暴演示图
  • C语言【数据结构】:时间复杂度和空间复杂度.详解
  • 市面上常用的23种设计模式,分析实现方式以及实际使用场景案例