【鲁班猫2】基于SPI子系统编写一个GC9A01的屏幕驱动


前言

为了巩固之前学习的SPI子系统本人写了一个GC9A01的屏幕驱动,现记录一下,以供大家参考


一、添加设备树节点

设备树部分比较简单,大家如果想正确编写出设备树,主要是要参考datasheet来进行配置,
对于GC9A01,它的硬件分布为如下:

引脚名称 引脚功能
GND 电源负,地
VCC 电源正,3.3 - 5V,需要与通信电平一致
SCL SPI时钟信号输入端口
SDA SPI数据输入端口
DC 数据/命令选择,低电平命令,高电平数据
CS 片选,低电平使能
BLK 背光,悬空使能接地关闭,默认上拉至3.3V

在知道引脚功能后我们应该在对开发板的引脚进行分析,搞清楚我们外设要接在哪个引脚,用那些引脚进行我们的SPI通讯,下面的lubancat2的外置引脚引出图:
在这里插入图片描述
然后我们需要查看datasheet来确定SPI的一些模式:
在这里插入图片描述此处的数据手册来源:技术手册

然后在根据SPI的模式和引脚编写我们的设备树:

&spi3{
   
   
  status = "okay";
  pinctrl-names = "default", "high_speed";
  pinctrl-0 = <&spi3m1_cs0 &spi3m1_pins>;
  pinctrl-1 = <&spi3m1_cs0 &spi3m1_pins_hs>;
  cs-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_LOW>;
  spi_gc9a01:spi_gc9a01@0 {
   
   
    compatible = "ailun,gc9a01";
    //片选和时钟最大频率必须添加否则会进不去probe函数
    reg = <0>;  //选择片选0 
    //spi-cpha;  //添加这一项表示cpha设置为1,不添加则默认为0
    //spi-cpol;  //添加这一项表示cpol设置为1,不添加则默认为0
    //spi-lsb-first; //添加这一项表示从低位开始传输数据,不添加则默认从高位开始传输
    //spi-cs-high //添加这一项表示片选高电平选中,默认低电平选中
    spi-max-frequency = <45000000>;  //最大时钟频率12MHZ ,RK3568最大不能超过50MHZ
    dc_control_pin = <&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>;
    res_control_pin = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>;
    pinctrl-names = "default";
    pinctrl-0 = <&spi_oled_dc_pin>;
    pinctrl-1 = <&spi_oled_res_pin>;
    status = "okay";
  };
};
&pinctrl {
   
   
    spi_oled {
   
   
        spi_oled_dc_pin: spi_oled_dc_pin {
   
   
            rockchip,pins = <3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>;
        };
        spi_oled_r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值