您尚未登录。

楼主 # 昨天 23:52:02

arvinHou
会员
注册时间: 2025-11-15
已发帖子: 3
积分: 18

F1C200S驱动SPI+RGB屏,软件模拟spi初始化ST7796S

小白一只,一直想学习嵌入式linux开发,最近正好在弄一个项目,咬咬牙,直接选了F1C200S芯片,边学边记录。
自己画的F1C200S的板子,屏幕是客户选的,芯片是ST7796S,需要spi先初始化屏幕才可以使用rgb接口,论坛有很多文章都有相关的内容,但是作为小白,刚开始连在哪里写函数放到uboot里运行都不知道,折腾了好久终于点亮了屏幕,特此记录。大神勿喷,写的很烂,仅仅实现功能。

屏幕接口rgb没什么好说的,spi和复位、背光等引脚接在了PE2,PE3,PE4,PE5,PE6。
分享一下st7796s的软件模拟的初始化文件st7796s.zip
由于默认打开了DM_GPIO,导致sunxi_gpio_output函数被宏定义取消了,推荐使用设备树的方式去调用,我看这个函数反正是写寄存器,直接把函数复制到自己的文件里了。我也尝试了,通过deepseek,写设备树调用等方式,最终都失败了,无奈放弃~~~,以后设备树精通了在来写设备树实现的方式吧。

引脚定义和初始化,通过以下代码就可以操作IO电平了。

#define lcd_cs_pin SUNXI_GPE(2)
#define lcd_mosi_pin SUNXI_GPE(3)
#define lcd_sck_pin SUNXI_GPE(4)
#define lcd_reset_pin SUNXI_GPE(5)
#define lcd_backlight_pin SUNXI_GPE(6)

sunxi_gpio_set_cfgpin(lcd_cs_pin, SUNXI_GPIO_OUTPUT);
sunxi_gpio_set_pull(lcd_cs_pin, SUNXI_GPIO_PULL_UP);
sunxi_gpio_set_drv(lcd_cs_pin, 1);

sunxi_gpio_output( lcd_cs_pin, 1);

st7796s.c文件我放在了 u-boot->drivers->video目录下,在目录里的Kconfig添加选项

config LCD_ST7796S
	bool "ENABLE ST7796S DRIVER"
	help
	  enable st7796s driver

然后在Makefile文件里添加编译

obj-${CONFIG_LCD_ST7796S} += st7796s.o

这样通过menuconfig就可以选择打开ST7796S的编译
接下来把代码里的初始化函数里运行就可以在uboot运行后被加载执行。
我是放在u-boot->common文件夹下的board_r.c文件里,也可以放在其他位置,只要在显示屏幕之前能被正常调用到就行。

//函数外部申明
#ifdef CONFIG_LCD_ST7796S
extern int spi_lcd_st7796s_init(void);
#endif

//在init_sequence_r合适的位置添加函数,我也不确定在哪一行合适
static init_fnc_t init_sequence_r[] = {
....
#ifdef CONFIG_LCD_ST7796S
spi_lcd_st7796s_init,
#endif
....
};

这样就可以正常执行spi的初始化了,屏幕的rgb模式就设置好了,可以打开相关的宏定义,显示企鹅图标了。
附图点亮成功!
小企鹅
继续学习。。。

最近编辑记录 arvinHou (昨天 23:53:26)

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn