【Spiffo】光速项目:LVGL v9框架下的MIPI简易相机_Part1

摘要

        由于现在网上对于LVGL v9以及MIPI DSI、CSI的资料少的可怜,本期来做一个简易MIPI相机的demo,来大概串一下这几个东西的使用思路和框架构建。(演示的gif只能传5M,难绷座机画质)

        根据使用场景的不同,文章第一节先介绍如何快速部署项目运行起来(毕设人狂喜),后面再具体介绍这个demo的各种细节,各取所需吧。如果项目有任何环节出现问题可以留言,我会尽可能回答。

准备工作

        因为教程还是面向新手的,所以这次我用各位容易买到的树莓派,不过你可以不用,实际上任何平台的任何板子都可以用,你只需要确认你的板子是支持mipi dsi,mipi csi的MPU即可。单片机姑且不做讨论,因为我确实没有带mipi控制器却不能跑Linux的芯片。

于是乎你需要如图的这些东西:

注意:

1.如果你用的恰好是树莓派,别买最新的module v3摄像头,已经不支持经典的控制方式了

2.这种类型的摄像头和显示屏都是专板专用的(比如其他各种板子的外设,即使是这样的软排线连接,也不见得就能用),因为排线只充当导线的作用,能不能兼容取决于其接口定义是否相同,最好买官方适配的外设

安装方式:

拽住黑色的插槽卡扣网上拉,引脚面朝凹槽插入,然后卡扣摁回去就行了

安装完长这样,注意摄像头和显示屏的接口不可调换:

部署:

一、工程下载

先下载我已经测试好的demo文件:

还是百度网盘吧,测试了几次,github在国内不好使,链接:

https://pan.baidu.com/s/1GHs6pqRNpbFEuXX_k2VhMw 提取码: tj38

下载以后解压出来有两个东西,如图:

(1)左边是一个转png格式的第三方库(开源的,感恩):

GitHub - lvandeve/lodepng: PNG encoder and decoder in C and C++.

(2)右边的是配置好的程序

二、一些简单的配置

在编译使用以前有些东西需要根据实际情况进行修改

1、关闭默认的桌面

首先是关闭默认的桌面程序让出frame buffer设备来,各家有各家的调法,我这里说一下树莓派怎么关闭(事实上基于gnome框架的桌面程序大部分都能这样关)

sudo systemctl set-default multi-user.target

即可关闭,重启后生效,关闭后长这样:

如果需要再次打开可以:

sudo systemctl set-default graphical.target

2、修改设备号

然后需要根据实际的设备号进行设备的选择,这个工程使用了三种设备:fb设备(屏幕)、v4l2设备(摄像头)、以及evdev(屏幕的触控),他们都在main.c里进行修改。

(1)前两类如果每种只使用一个设备(这个板子上只有一个屏和一个摄像头)的话默认大概率就是fb0和video0,不用改。假设确实是不一样的话,修改在main.c的(CTRL + F可以进行搜索)

(2)然后是evdev,这个不一样的概率比较大, 需要安装工具测试一下设备是哪个,不同的板子能下载到的包不一样,这里简单过一下就得了,实在不行从0开始往后一个个试,总能对的。

树莓派安装这两个东西,

sudo apt install input-utils
sudo apt install evtest

安装完以后输入lsinput就可以看到各种输入设备了:

触摸通常是I2C驱动的,所以重点找I2C字眼的内容,比如这样,可以看到设备是 /dev/input/event4

找到以后验证一下是否是它,输入下面内容后,摸一下屏幕在控制台如果有输出,说明就是它了

evtest /dev/input/event4

然后可以在这里(也是main.c里)修改事件设备号,上面测试出来是多少就写多少

3、图片的保存路径

只需要修改中间框起来的部分,A:不用管,我已经处理好了,output.png是输出命名,想换也可以

举个例子,比如我想放在系统根目录的文件夹output里,命名为233.png,则需要写为:

"A:/output/233.png"(也就是中间写的是绝对路径)。

三、编译

        大致上有两种使用方式,第一种是直接放到板子上进行编译,比较吃板子性能;第二种是在主机上进行交叉编译成arm版本的二进制文件放到板子上运行,编译更快,但是稍微麻烦点,我两种都讲,先看第一种。

1、直接板上编译

板上编译的话我建议先配置一个ssh连接,方便文件传输和控制,具体配置方法和这个类似:

【Spiffo】环境配置:VScode+Windows下开发Linux-优快云博客

其次,你需要下载cmake工具,因为整个工程都是按照cmake进行配置的,这是主流的做法,最好是学习使用,不难的。安装:

sudo apt install cmake

连接上以后进入lv_port_linux-master这个文件夹,能够看到一大堆文件,但是你只需要管这三个

bin文件夹存放编译出来的程序,build文件夹存放编译过程产生的中间文件,main.c就是字面意思

要进行编译你只需要进入build文件夹,然后输入

cmake ..

就会开始构建编译文件

编译规则构建完后直接在当前的文件夹里输入

make

就会开始编译了,整个过程大概持续四五分钟(视板子性能而定)中间会出现些许的warning,不用管

看见这个就算编译好了

编译完成后回到上一级目录,进入bin文件夹,可以看到生成了一个可执行程序

2、交叉编译放到板子上运行

第二种方式就是主机上交叉编译完然后放到板子上运行,这种做法稍微麻烦一点,但是编译很快,差不多半分钟就好了。

如果使用交叉编译工具的话需要对工程进行一定的额外配置才能正常使用,注意,因为是混编,所以gcc和g++(有的叫gxx,一个东西)都是需要的,配置方法很多,但是我推荐这样配置,免得后续出一系列奇怪的问题,具体配置如下:

首先需要在项目根目录新建一个规则文件(其实放哪里都行,叫什么也无所谓),比如我就命名成推荐的toolchain.cmake了,然后其中写上这些内容:

其中这部分是你的交叉编译器路径

假设你没有交叉编译工具的话,从这里下载

https://pan.baidu.com/s/1o6vqsCVEwDNj1kMauShiFw 提取码: sibk

如果对变量整不明白的就像我一样直接写完整路径,toolchains这个文件夹本体我是放在系统根目录了,所以是

/toolchains/……

假设你下载下来的文件要放在其他地方的话就是  

其他地方/toochains/……

写完保存退出后工程里的东西就是这些:

保存后就像上面一样,进入build文件夹,然后输入

cmake -DCMAKE_TOOLCHAIN_FILE=”../toolchain.cmake” ..

构建编译规则,可以看到交叉编译工具已经配置上了

注意:网传说这步如果是使用刚发布的LVGL v9版本会出现一定的问题,具体处理见(如果是官方的master分支的话是没有问题的):

LVGLv9.1.0移植 - 韦东山 - 博客园

然后make编译,完了以后和上面一样在上一级的bin目录里生成对应的二进制文件,把这个生成的文件弄到开发板就可以运行了

至于传文件的方法,这里说两种:

(1)tftp

第一种是使用tftp,配置过程如下:

【Spiffo】环境配置:开发板和虚拟机文件互传(TFTP)_开发板tftp-优快云博客

(2)ssh自带文件互传

第二种是直接使用vscode的ssh文件传输,直接拖拽文件,放到侧边栏里就可以了

如果报权限错误的话,参考这篇配置一下

【Spiffo】防傻防呆Tips——Error:EACCES:permission denied,open.....问题解决_error: eacces: permission denied, open-优快云博客

四、执行demo程序

传输过去的文件默认不带可执行权限,所以需要进行手动添加:

chmod +x lvglsim

然后输入下面指令即可运行

./lvglsim

然后显示屏上的画面就跟开头演示的gif一样,点一下蓝色的按钮可以拍照,保存在lvglsim旁边

聊点闲话

目前还没做点击预览图查看和图库,因为我重心放在MIPI设备的使用上,要做也很简单,可以自行尝试。个人认为在触发事件里加一个九宫格然后列出图片即可,后续有空就做(有更好的方案也可以留言)。后续我先更新一下demo工程的细节解析。

<think>嗯,用户的问题是关于三个hardmacro的区别和作用,具体是dwc_mipi_cdphy_core_4l3t_ns.frame、dwc_mipi_cdphy_io_pll_tx_4l3t.frame和dwc_mipi_cdphy_pll_ns.frame。用户可能正在设计MIPI接口的芯片,需要理解这些模块的功能分工。 从命名规律看,这三个模块都属于MIPI CD-PHY物理层实现,但后缀不同暗示功能差异: - core_4l3t_ns中的"core"和"ns"可能表示数字控制部分 - io_pll_tx_4l3t明显指向IO和PLL的发送电路 - pll_ns应该专指锁相环模块 需要解释清楚层级关系:pll_ns是最底层的时钟生成单元,io_pll_tx基于它构建物理发送通道,而core_4l3t_ns则是整个PHY的数字控制核心。用户可能混淆了它们的层级,需要强调这种"PLL→IO→CORE"的依赖链。 考虑到用户直接询问区别,回复应该用对比表格突出三者的定位差异。需要特别注意4L3T这个关键参数——它代表4条Lane和3种传输模式(Tri-state),这是MIPI-CPHY的典型配置,暗示用户可能在开发移动设备SoC。 技术细节上要区分清楚: 1. pll_ns是纯模拟电路,负责产生高精度时钟 2. io_pll_tx包含阻抗匹配等模拟前端设计 3. core_4l3t_ns处理数字逻辑如8b/10b编码 用户没有提到接收端,所以聚焦在发送链路。可以补充说明这些模块通常由IP厂商提供,用户只需集成验证,但理解内部结构对调试有帮助。如果用户后续问到具体集成方法,可能需要补充DFT相关设计要点。</think>基于MIPI C-PHY物理层规范,三个模块的功能定位与区别如下: --- ### **模块功能对比表** | 模块名称 | 核心功能定位 | 层级关系 | 关键作用 | |------------------------------|---------------------------|--------------|--------------------------------------------------------------------------| | **dwc_mipi_cdphy_pll_ns.frame** | 基础时钟生成单元 | 最底层 | 生成高频低抖动的时钟信号,为整个PHY提供基准时钟源[^1] | | **dwc_mipi_cdphy_io_pll_tx_4l3t.frame** | 物理层发送端电路 | 中间层 | 集成PLL时钟与驱动电路,实现高速串行信号转换和驱动输出(支持4 Lane/3T架构)[^1] | | **dwc_mipi_cdphy_core_4l3t_ns.frame** | 数字控制与协议处理核心 | 最高层 | 处理C-PHY协议编解码、Lane管理、时序控制(支持4 Lane/3T)[^1] | --- ### **详细功能解析** 1. **时钟生成单元 (dwc_mipi_cdphy_pll_ns.frame)** - **核心作用**:通过锁相环(PLL)产生PHY工作所需的高精度时钟 - **技术特性**: - 支持宽频率范围(如1.5GHz~5GHz) - 提供超低抖动时钟(<1ps RMS) - 典型应用:为SerDes和协议层提供同步时钟源 2. **物理发送电路 (dwc_mipi_cdphy_io_pll_tx_4l3t.frame)** - **核心作用**:实现数字信号到高速串行信号的物理转换 - **关键组件**: - 集成PLL时钟网络 - 差分驱动器(支持C-PHY三电平信号) - 阻抗匹配电路(确保信号完整性) - **架构特性**: - "4L3T" = 4条传输通道(Lane),每条通道支持3种电平状态(Tri-state) - 支持MIPI C-PHY 1.2/2.0规范 3. **协议控制核心 (dwc_mipi_cdphy_core_4l3t_ns.frame)** - **核心作用**:处理C-PHY协议逻辑与数字控制 - **功能模块**: - 16b/18b编码器(降低直流偏移) - Lane动态分配控制器 - 功耗状态机(LP/HS模式切换) - 错误检测与校准逻辑 - **"ns"后缀含义**:通常指代数字电路(Non-Synthesizable硬核) --- ### **典型工作流程** ```mermaid graph LR A[协议层数据] --> B[dwc_mipi_cdphy_core_4l3t_ns] B --> C[编码/通道分配] C --> D[dwc_mipi_cdphy_io_pll_tx_4l3t] D --> E[串行化驱动] E --> F[物理接口] G[dwc_mipi_cdphy_pll_ns] --> D[提供时钟] G --> B[提供时钟] ``` > 注:三者协同构成完整PHY层,其中**core**处理协议逻辑,**io_pll_tx**实现物理驱动,**pll_ns**提供全局时钟同步。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值