侧边栏壁纸
博主头像
xiaoming博主等级

累死自己,卷死别人,为了小刘而努力!!!

  • 累计撰写 24 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Alientek 开发板模块使用记录

Administrator
2023-09-20 / 0 评论 / 0 点赞 / 51 阅读 / 6631 字 / 正在检测是否收录...

1、ILI9341屏幕驱动

参考资料

  • I.MX6U嵌入式Linux驱动开发指南V1.6
  • http://www.openedv.com/forum.php?mod=viewthread&tid=320312
  • https://www.cnblogs.com/halin/p/14632332.html
  • https://github.com/notro/fbtft/wiki 这个是fbtft官方wiki,比较重要

根据fbtft驱动配置设备树(内核版本4.1.15)

fbtft的驱动在drivers->staging->fbtft中,找到我这款屏幕的驱动代码,发现设备树节点名称需要是 “ilitek,ili9341”

image-20230729110536709

然后需要自己选定要用哪几个引脚,完成pinctrl的配置

这款屏幕是SPI接口的,除了SCL和SDA引脚外还需要配置RES,DC,CS和BLK引脚

查看原理图,我设置DC用GPIO_1,RES用GPIO_2,CS还用ECSPI3_SS0,BLK背光控制用和正点原子LCD相同的PWM引脚 BLT_PWM

这时候我们还不知道这些引脚到底对应芯片的哪几个脚,于是 需要继续查看原理图和内核源码

image-20230729110625792

在核心板的原理图上发现了这些引脚的具体名称,接下来查看imx6ul的gpio驱动部分

image-20230729110645227

最后在 imx6ul-pinfunc.h

里发现了这些引脚的宏定义,以GPIO1为例,可以看到GPIO1_IO01有很多复用功能,我们需要将他配置为GPIO最基本的功能

image-20230729110702672

其他引脚也类似,将设备树中以前的pinctrl节点注释掉,添加新的节点,0x10b0是GPIO输出的一般配置,0x10b1一般用于配置复用引脚

image-20230729110715302

然后配置ecspi3设备树节点,pinctrl选择上面配置好的节点,按照我的理解pinctrl只是把对应的引脚初始化了,具体哪个引脚是什么功

能,比如CLK或者RST等还需要在ecspi节点中选择用哪个引脚,比如RST用了GPIO1_IO02,于是设备树中就有reset-

gpios = 这一句。ili9341节点的属性是参照官方wiki中的来配置的

image-20230729110732842

测试后的设备树配置详情

&ecspi3 {
    fsl,spi-num-chipselects = <1>;            // 必须的属性,SPI 设备可用的芯片选择信号数量为 1
    cs-gpio = <&gpio1 20 GPIO_ACTIVE_LOW>;    // 可选属性,使用cs-gpio和cs-gpios没有影响,片选信号
    pinctrl-names = "default";                // 引脚控制器配置名称为 "default"
    pinctrl-0 = <&pinctrl_ecspi3>;            // 使用名为 "pinctrl_ecspi3" 的引脚控制器配置
    status = "okay";                          // 设备状态为正常(已启用)

    ili9341@0 {
        compatible = "ilitek,ili9341";        // 设备兼容性字符串,表示这是 ILI9341 TFT LCD 控制器
        buswidth = <8>;                       // SPI 总线数据位宽为 8 位
        rotate = <270>;                       // 显示内容顺时针旋转 270 度
        bgr;                                  // 必须的属性,不然显示颜色不正常,像素数据存储顺序为 BGR(蓝-绿-红)
        fps = <40>;                                  // 屏幕刷新率为 40 帧/秒
        spi-max-frequency = <8000000>;               // SPI 总线最大传输频率为 8,000,000 Hz
        dc-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;      // 设备的数据/命令选择信号使用 GPIO1_3 引脚,激活高电平
        reset-gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;   // 设备的复位信号使用 GPIO1_8 引脚,激活高电平
        reg = <0>;                                   // 设备在 SPI 总线上的从设备地址为 0
    };
};

这是背光引脚的配置

image-20230729110744456

image-20230729110752531

一切修改完后,记得在设备树中搜索是否有重复节点,有没有把同一个引脚配置成不同的功能

修改内核选项

运行make menuconfig 来配置内核选项 或者./mx6ull_alientek_emmc.sh来配置并且编译内核

其中./mx6ull_alientek_emmc.sh中有四行

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_alientek_emmc_no_lcd_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

第一行清理工程,第二行用事先保存好的配置来更新并覆盖掉内核根目录下的.config文件

第三行打开一个图形界面,看看还有没有什么要配置的,第四行编译所有,包括内核镜像和设备树

如果只改动了设备树,则只需要编译设备树 make dtbs ,把生成的dtbs拷贝到板子上就行了

关闭板子自带的LCD驱动,把光标指的地方关闭就可以了

image-20230729110833193

在staging drivers里选中small TFT display的支持

image-20230729110903630

选择对应的驱动芯片

image-20230729111025156

最后可以将配置重新保存一下,省得下次配置又被覆盖了,每次运行./mx6ull_alientek_emmc.sh之前的.config就会被清理

image-20230729111039325

这样内核就配置完成了

修改uboot参数

在uboot中更改启动选项为网络启动,方便之后修改,增加console=tty1,这样开机后屏幕上就会出现log信息

其中10.100是ubuntu ip,10.150是板子ip
在这里插入图片描述 抄下官方教程,下面这么设置后就可以板子插键盘操作LCD终端了

image-20230729111112987

setenv bootargs 'console=tty1 console=ttymxc0,115200 root=/dev/nfs  nfsroot=192.168.10.100:/home/alientek/linux/nfs/rootfs,proto=tcp rw ip=192.168.10.150:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off'
saveenv

测试

屏幕接上板子,开机后出现log,这是最开始拍的,还没有设置rotate参数

可以找到/dev/fb0

运行命令

cat /dev/urandom > /dev/fb0

屏幕有花屏就是对的

用mplayer播放视频测试下

命令行参考
https://blog.csdn.net/xiaolong1126626497/article/details/124313017

mplayer -cache 8192 -zoom -x 320 -y 240 -framedrop gong.mp4

0

评论区