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

ARM DIY(三)板载串口和 LCD 调试

前言

今天焊接两大关键输入输出设备:串口和屏幕。

串口

串口部分使用 CP2102N 芯片(USB 转 TTL),这样用一根数据线连接板子和 PC 就可以直接调试了。

焊接 CP2102 和 Type C
在这里插入图片描述
上电调试,串口可以正常输入输出。
看来,虽然是 QFN 封装,只要尺寸大一点,还是很容易焊接成功的。

屏幕

重头戏在屏幕,倒不是说屏幕焊接有多难,而是软件调试折腾了两个晚上。
屏幕焊接
在这里插入图片描述 在这里插入图片描述

ST7789V 驱动调试

step1:使能内核驱动编译选项
屏幕的驱动芯片为 ST7789V,就在内核的 menuconfig 中搜索 ST7789V
在这里插入图片描述
搜到了这两项,遂将这两项都置为了 [y],这里也为自己埋下了个坑,这两个驱动需要二选一。
step2:配置设备树
arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts 新增如下节点

&spi0{status = "okay";st7789v: st7789v@0{compatible = "sitronix,st7789v";reg = <0>;status = "okay";spi-max-frequency = <96000000>;spi-cpol;spi-cpha;rotate = <270>;fps = <60>;buswidth = <8>;dc-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>;  /* PB4 */reset-gpios = <&pio 1 5 GPIO_ACTIVE_HIGH>; /* PB5 *///led-gpios = <&pio 0 0 GPIO_ACTIVE_LOW>;  /* PA0 */debug = <0x0>;};
};

step3:调试
上电后屏幕没输出,并且没有生成 /dev/fb0 设备文件,
搜索 "sitronix,st7789v",确定驱动入口,追下驱动代码,发现匹配到了两份驱动
在这里插入图片描述
添加打印,发现上电后匹配的是 panel-sitronix-st7789v 这份驱动,那就禁用此启动,换下面的试试,结果还真可以,上电后屏幕直接就显示启动 log 了
在这里插入图片描述
不过,发现屏幕好像反显了,应该黑底白字才对,查看驱动,也没发现反显的设置。
不管了,修改驱动,让它再反一次
drivers/staging/fbtft/fb_st7789v.c

static int init_display(struct fbtft_par *par)
{/* turn off sleep mode */write_reg(par, MIPI_DCS_EXIT_SLEEP_MODE);mdelay(120);// 反显write_reg(par, MIPI_DCS_ENTER_INVERT_MODE);/* set pixel format to RGB-565 */write_reg(par, MIPI_DCS_SET_PIXEL_FORMAT, MIPI_DCS_PIXEL_FMT_16BIT);write_reg(par, PORCTRL, 0x08, 0x08, 0x00, 0x22, 0x22);
...

看起来正常了
在这里插入图片描述

显示图像

借助之前的工具《LCD 显示图像——操作显存(framebuffer)》,显示一副图片看看
在这里插入图片描述

播放视频

原料:播放器、视频
先制作播放器
下载源码 http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.5.tar.xz
交叉编译

$ ./configure --target=arm-linux --cc=arm-linux-gnueabihf-gcc --prefix=/home/liyongjun/project/board/buildroot/override/DIY_V3S/MPlayer-1.5/_install --disable-freetype --enable-fbdev --disable-mencoder --disable-sdl --disable-live --disable-dvdread --disable-x11 --enable-cross-compile --disable-dvdnav --disable-jpeg --disable-tga --disable-pnm --disable-tv --disable-fontconfig --disable-xanim --disable-win32dll --disable-armv5te --disable-armv6 --enable-static
$ make

将编译生成的播放器软件 mplayer 拷贝到板子 root 目录
然后将视频文件 bad_apple_30.mp4 也拷贝到板子 root 目录
播放

# ./mplayer bad_apple_30.mp4
MPlayer 1.5-6.3.1 (C) 2000-2022 MPlayer TeamPlaying bad_apple_30.mp4.
libavformat version 59.17.102 (internal)
libavformat file format detected.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xccced8]Protocol name not provided, cannot determine if input is local or a network protocol, buffers and access patterns cannot be configured optimally without knowing the protocol
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (aac), -aid 0, -alang eng
VIDEO:  [H264]  240x240  24bpp  60.000 fps  492.0 kbps (60.1 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 59.21.100 (internal)
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
Clip info:major_brand: mp42minor_version: 0compatible_brands: mp42mp41creation_time: 2021-01-11T00:31:54.000000Z
Load subtitles in ./
==========================================================================
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 44100 Hz, 2 ch, floatle, 125.6 kbit/4.45% (ratio: 15698->352800)
Selected audio codec: [ffaac] afm: ffmpeg (FFmpeg AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
[AO OSS] audio_setup: Can't open audio device /dev/dsp: No such file or directory
DVB card number must be between 1 and 4
AO: [null] 44100Hz 2ch floatle (4 bytes per sample)
Starting playback...
Could not find matching colorspace - retrying with -vf scale...
Opening video filter: [scale]
Movie-Aspect is undefined - no prescaling applied.
[swscaler @ 0xf27860]bicubic scaler, from yuv420p to rgb565le using C
[swscaler @ 0xf27860]No accelerated colorspace conversion found from yuv420p to rgb565le.
[swscaler @ 0xf27860]using unscaled yuv420p -> rgb565le special converter
VO: [fbdev] 240x240 => 240x240 BGR 16-bit 
framebuffer too small for double-buffering, disabling
A:  25.7 V:  25.2 A-V:  0.488 ct:  0.000   0/  0 37% 54%  4.1% 553 0            **************************************************** Your system is too SLOW to play this!  ****************************************************Possible reasons, problems, workarounds:
- Most common: broken/buggy _audio_ driver- Try -ao sdl or use the OSS emulation of ALSA.- Experiment with different values for -autosync, 30 is a good start.
- Slow video output- Try a different -vo driver (-vo help for a list) or try -framedrop!
- Slow CPU- Don't try to play a big DVD/DivX on a slow CPU! Try some of the lavdopts,e.g. -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all.
- Broken file- Try various combinations of -nobps -ni -forceidx -mc 0.
- Slow media (NFS/SMB mounts, DVD, VCD etc)- Try -cache 8192.
- Are you using -cache to play a non-interleaved AVI file?- Try -nocache.
Read DOCS/HTML/en/video.html for tuning/speedup tips.
If none of this helps you, read DOCS/HTML/en/bugreports.html.A: 219.1 V: 219.1 A-V:  0.020 ct:  0.583   0/  0 40% 54%  3.9% 11729 0          Exiting... (End of file)
# 

请添加图片描述

mplayer 播放原理也很简单,就是向 /dev/fb0 写数据

在这里插入图片描述

至此,串口和屏幕调试完毕

http://www.lryc.cn/news/145899.html

相关文章:

  • 计算机网络-笔记-第一章-计算机网络概述
  • Oracle-day4:分组查询(带条件)、DDL建表、约束、主从表
  • (详解)数据结构-----------栈与队列 c语言实现
  • 前端文件、图片直传OOS、分片上传、el-upload上传(vue+elementUI)
  • java自动登录 selenium 自动登录并获取cookie
  • vue中 computed()方法详解
  • 在服务器上搭建Jenkins
  • 全面解析MES系统中的报工操作
  • Harbor 私有仓库迁移
  • 制造业物联网革命:智慧工厂数据采集与远程监控管理
  • 软考A计划-网络工程师-复习背熟-网络管理和计算机基础知识
  • springBoot打印精美logo
  • kali开启SSH服务(简单无比)
  • Ubuntu20.04如何更换国内源-阿里云源
  • goland设置
  • 2023年Java核心技术第十篇(篇篇万字精讲)
  • 分享一篇关于如何使用BootstrapVue的入门指南
  • 【1day】复现Cellular Router命令执行漏洞
  • 【Torch API】pytorch 中repeat_interleave函数详解
  • TDesign表单rules通过函数 实现复杂逻辑验证输入内容
  • springgateway网关修改响应后,部分中文乱码问题
  • 微信开发之一键发布群公告的技术实现
  • R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列...
  • 自动化运维:Ansible脚本之playbook剧本
  • 基于角色访问控制-RBAC(Role-Based Access Control)
  • springboot项目实现断点续传
  • 解析经典面试题:for 循环中的 let var
  • CSS按钮-跑马灯边框
  • 【PCIE系统学习】Gen1/2Gen3/4 symobl与OrderSet概念对比
  • C++ Qt 中QMimeDatabase类详细介绍以及应用场景