目录

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

目录

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