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

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
    
 

    

相关文章:

  • 射频辐射干扰:变频器电缆的电磁天线效应
  • 9-1 USART串口协议
  • C语言高级进阶4
  • WinSW-x64(2.12.0)将nginx注册为服务可能有bug
  • 【区块链】btc
  • C语言 第四章 数组(4)
  • scanf() 函数:C语言中的数据输入桥梁
  • SAP FI模块之付款管理开发
  • 理解langchain langgraph 官方文档示例代码中的MemorySaver
  • 稀疏矩阵(信息学奥赛一本通-2042)
  • 芯谷D8563TS实时时钟/日历芯片详解可替代PCF8563
  • notion enhancer 新版工作方法
  • torch_geometric 安装
  • Conda+jupyterlab
  • 第九节:哈希表(初阶)
  • uni-app App 端分段导出 JSON 数据为文件
  • 解决进入Oracle11g的OEM显示网站不安全问题
  • 使用easyexcel实现单元格样式设置和下拉框设置
  • CSS中z-index使用详情
  • 游戏服务器分区的分布式部署
  • 新型基因编辑工具可精准嵌入完整基因
  • 关税战导致中国商品冲击周边市场?“对美出口减少并未导致对东盟出口激增”
  • 中国华能:1-4月新能源装机突破1亿千瓦,利润总额再创新高
  • 新四军老战士、苏州市文联原副主席张景坤逝世
  • 北京人艺新戏《一日顶流》将出现人工智能角色
  • 电子凭证会计数据标准推广至全国