news 2026/5/11 21:12:34

保姆级教程:在NanoPi NEO上点亮128x128的ST7735S SPI屏幕(基于Linux主线内核)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在NanoPi NEO上点亮128x128的ST7735S SPI屏幕(基于Linux主线内核)

嵌入式Linux实战:NanoPi NEO驱动ST7735S SPI屏幕全流程解析

第一次拿到NanoPi NEO和那块小巧的ST7735S屏幕时,我盯着密密麻麻的40针GPIO排针发了十分钟呆。作为嵌入式Linux新手,SPI设备树配置、内核驱动移植这些概念听起来就像天书。但经过72小时的反复试错,当128x128的像素点终于亮起时,所有困惑都化为了解决问题的成就感。本文将用最直白的语言,带你完整走通从硬件连接到自动加载的全过程。

1. 硬件准备与环境搭建

1.1 硬件清单检查

在开始前,请确保备齐以下硬件:

  • NanoPi NEO开发板(全志H3芯片版本)
  • ST7735S SPI屏幕(128x128分辨率)
  • 5V/2A电源适配器(屏幕背光需要足够电流)
  • 杜邦线若干(建议使用不同颜色区分功能)

注意:市场上ST7735S屏幕有多种引脚定义,务必确认你的屏幕引脚排列与下表一致:

屏幕引脚功能说明NanoPi NEO对应引脚
VCC电源正极5V(引脚2/4)
GND电源地GND(引脚6/9等)
SCLSPI时钟线SPI0_CLK(PC0)
SDASPI数据线SPI0_MOSI(PC1)
RES复位信号PA3
DC数据/命令PA17
CS片选信号PG9
BLK背光控制PA1(可选)

1.2 开发环境配置

推荐使用Ubuntu 20.04 LTS作为开发主机,需安装以下工具链:

sudo apt update sudo apt install gcc-arm-linux-gnueabihf build-essential flex bison libssl-dev

获取主线内核源码(以5.10.y稳定版为例):

git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git -b linux-5.10.y cd linux

2. 设备树深度配置

2.1 SPI接口与GPIO定义

arch/arm/boot/dts/sun8i-h3-nanopi.dtsi中添加以下关键配置:

&spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins &spi0_cs_pins>; cs-gpios = <&pio 6 9 GPIO_ACTIVE_HIGH>; /* PG9作为片选 */ st7735s: st7735s@0 { compatible = "sitronix,st7735s"; reg = <0>; spi-max-frequency = <32000000>; rotate = <90>; buswidth = <8>; dc-gpios = <&pio 0 17 GPIO_ACTIVE_HIGH>; /* PA17 */ reset-gpios = <&pio 0 3 GPIO_ACTIVE_HIGH>; /* PA3 */ backlight = <&backlight>; }; }; &pio { spi0_cs_pins: spi0_cs_pins { pins = "PG9"; function = "gpio_out"; }; };

2.2 关键避坑指南

  • HDMI冲突处理:全志H3芯片的HDMI和SPI0存在资源冲突,必须禁用HDMI:
    &hdmi { status = "disabled"; }; &sound_hdmi { status = "disabled"; };
  • 背光控制优化:添加背光节点实现亮度调节:
    backlight: backlight { compatible = "gpio-backlight"; gpios = <&pio 0 1 GPIO_ACTIVE_HIGH>; /* PA1 */ default-on; };

3. 内核驱动移植实战

3.1 驱动编译配置

进入内核配置界面:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

按以下路径启用驱动:

Device Drivers → Staging drivers → Support for small TFT LCD display modules [M] FB driver for the ST7735S LCD controller [M] Support for SPI-connected displays

3.2 分辨率参数调整

修改drivers/staging/fbtft/fb_st7735s.c中的显示参数:

static const struct fbtft_display display = { .width = 128, .height = 128, .regwidth = 8, .init_sequence = st7735s_init_sequence, };

4. 系统集成与自动化

4.1 手动加载测试

编译并安装驱动模块后,执行:

sudo insmod fbtft_device.ko name=matrix-st7735s busnum=0 gpios=reset:3,dc:17 rotate=90 sudo insmod fb_st7735s.ko

验证帧缓冲设备:

ls /dev/fb0 # 应返回设备节点 con2fbmap 1 /dev/fb0 # 将控制台输出到屏幕

4.2 开机自动加载方案

创建/etc/modules-load.d/fbtft.conf

fb_st7735s fbtft_device

添加模块参数配置/etc/modprobe.d/fbtft.conf

options fbtft_device name=matrix-st7735s busnum=0 gpios=reset:3,dc:17 rotate=90

最后更新initramfs:

sudo update-initramfs -u

5. 高级调试技巧

当屏幕出现花屏、偏移等问题时,按以下步骤排查:

  1. 检查电源质量
    dmesg | grep -i under-voltage # 查看是否电源不足
  2. SPI信号质量
    • 用示波器检查SCLK频率是否≤32MHz
    • 缩短杜邦线长度(建议<10cm)
  3. 色彩异常处理: 在设备树中添加RGB顺序参数:
    st7735s: st7735s@0 { rgb; bgr; };

我在实际项目中遇到过屏幕上半部显示错位的问题,最终发现是rotate参数与屏幕物理安装方向不匹配。通过调整设备树中的rotate值为0/90/180/270分别测试,可以快速定位问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 21:09:28

暗黑破坏神2存档编辑器终极指南:免费Web工具快速上手

暗黑破坏神2存档编辑器终极指南&#xff1a;免费Web工具快速上手 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2中反复刷装备而烦恼吗&#xff1f;想快速体验不同职业的build却不想从头练级&#xff1f;d2s-e…

作者头像 李华
网站建设 2026/5/11 21:09:21

Matplotlib实战:用DJIA数据打造生产级可视化工作流

1. 项目概述&#xff1a;为什么我坚持用 Matplotlib 打好数据可视化的地基Matplotlib 不是“过时的库”&#xff0c;也不是“写完就扔的脚手架”。在我带过的二十多期数据分析训练营里&#xff0c;几乎每届学员都会在第三周左右集体陷入一个困惑&#xff1a;为什么 Seaborn 画图…

作者头像 李华
网站建设 2026/5/11 21:07:37

FanControl风扇控制终极指南:从零配置到深度优化的实战教程

FanControl风扇控制终极指南&#xff1a;从零配置到深度优化的实战教程 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendi…

作者头像 李华
网站建设 2026/5/11 21:06:37

怪物猎人世界:如何用HunterPie叠加层工具提升你的狩猎效率

怪物猎人世界&#xff1a;如何用HunterPie叠加层工具提升你的狩猎效率 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/HunterPi…

作者头像 李华
网站建设 2026/5/11 21:02:45

终极Mac菜单栏整理指南:用Ice让你的桌面从此清爽高效

终极Mac菜单栏整理指南&#xff1a;用Ice让你的桌面从此清爽高效 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 你是否厌倦了Mac菜单栏上密密麻麻的图标&#xff1f;是否经常因为找不到需要的应用图…

作者头像 李华