- python中eof表示什么语句错误
- python中for语句涉及的序列
- python中if是循环语句吗
- python中if语句与或非
连接示意图(图片来源,正点资料) 。
MIPI DSI 分层 。
注意: 屏幕,应用层有 DCS,协议层主要有 DSI,物理层有 A-PHY、C-PHY、D-PHY 。
数据发送和接收示意图 。
注意: 多 lan 通信数据非整数倍传输时,没数据的 lan 通道先进入 EoT 模式.
通道 lan 模块 。
注意: 实际的 Lane 模块是图中简化而来的,其中高速收发器有 HS-TX、HS-RX,低速收发器有 LP-RX 和 LP-TX,以及一个低速竞争检测器 LP-CD,对于高速单向数据通道,可能只有 HS-TX 或者 HS-RX 。
D-PHY 信号电平 。
注意: 图中蓝色实线是 LP 模式下的信号波形示例,电压为 0~1.2V。绿色虚线是 LP 模式下信号的高低电平门限。红色实线是 HS 模式下的信号波形示例,中心电平 200mV 。
通道状态 。
HS 模式采用差分信号,所以只有两种状态: HS-0: 高速模式下 Dp 信号低电平,Dn 信号高电平的时候。 HS-1: 高速模式下 Dp 信号高电平,Dn 信号低电平的时候.
LP 模式下有两根独立的信号线驱动,所以有 4 个状态:分别是: LP-00、LP-01、LP-10、LP-11 。
数据 Lane 三种工作模式 D-PHY 协议规定了,通过 Lane 的不同状态转换有三种工作模式:控制模式、高速模式和 Escape 模式。控制模式和 Escape 模式都属于 LP,高速模式属于 HS。正常情况下,数据 Lane 工作在控制模式或者高速模式下 。
控制模式 这个我也不清楚,据说 LAN 复位后,数据通道处于 control 模式(LP-11)。其他模式都是开始或者结束于control模式。常见的如 HS-Rqst,LP-Rqst,STOP 。
高速模式 。
Escape 模式 对于数据 Lanes,进入 Escape 模式以后,应该紧接着发送一个 8bit 的命令来表示接下来要做的操作,命令如图所示 注意: 低 bit 先发送,所以对应的十六进制就是 0X87(0X10000111) 。
Escape 模式下发送这三个命令的时序图如图 24.3.4.4 所示:
名词含义 。
缩写 | 英文全称 | 含义 |
---|---|---|
HSYNC | Horizontal Sync | 水平同步 |
HLW/HPW | Horizontal Low Pulse Width | 水平同步信号宽度 |
HSA | Horizontal Sync Active | 水平同步有效 |
HSS | Horizontal Sync Start | 水平同步开始 |
HSE | Horizontal Sync End | 水平同步结束 |
HBP | Horizontal Back Porch | 水平后肩 |
HFP | Horizontal Front Porch | 水平前肩 |
HACT | Horizontal Active | 水平有效区域,也就是屏幕有效宽度 |
VSYNC | Vertical Sync | 垂直同步 |
VLW/VPW | Vertical Low Pulse Width | 垂直同步信号宽度 |
VSA | Vertical Sync Active | 垂直同步信号宽度 |
VSS | Vertical Sync Start | 垂直同步开始 |
VSE | Vertical Sync End | 垂直同步结束 |
HBP | Vertical Back Porch | 垂直后肩 |
VACT | Vertical Active | 垂直有效区域,也就是屏幕有效高度 |
VFP | Vertical Front Porch 垂直前肩 | |
RGB | — | 在这里指 RGB 原始像素数据流 |
LPM | Low Power Mode | 低功耗模式 |
BLLP | Blanking or Low-Power periods | 没有包含有效数据的数据包或者进入 LP 模式下的状态,称为 BLLP |
video 和 command 模式 简单来说,就是显示器有中有无缓冲区,有缓冲区时是 command 模式,刷新时直接从缓冲区获取刷新,通过命令更改缓冲区内容;无缓冲区时是 video 模式,所有数据都是从通道中获取刷新 。
command 模式 。
video 模式 。
LCD 显示结构 。
长短数据包 。
长数据包 图中绿色的部分就是长包结构,长包有 3 部分:32-bit 的 PH(包头)、用于自定义的负载数据、16-bit 的包尾(PF)。PH 有 3 部分:8-bit 的 DI,16-bit 的 WC 以及 8-bit 的 ECC。PF 只有 1 部分:16-bit 的校验和,因此长包数据长度范围是 6~65541 个字节.
短数据包 图就是短数据包结构,只有一个 PH(包头),PH 分为 3 部分:和长数据包一样,第 1 个就是 8-bit 的 DI 域;接下来是 2 个字节的数据负载域,也就是用户要实际发送的内容;最后是一个 8-bit 的 ECC 域,可以实现 1bit 纠错,2 比特错误检测 。
常用指令 。
MIPI DSI 时钟计算 注意:一般说的 MIPI DSI 时钟要在这个时间测量到的频率上乘以 2,因为双边沿采集, 实际的屏幕帧率肯定到不了 60fps,网上有些资料说对于瑞芯微的平台,实际设置的 MIPI DSI 速度是理论的 1.2 倍即可,所以对于 rv1126 来说还需要在时钟上 * 1.2.
弄明白上面的知识点后,调试 DSI 相对就比较简单了,有不明白的地方可以参考正点的教程和瑞芯微的手册已经MIPI协议文档,这里我只是做一个总结,便于自己在调试的时候好查找资料 。
设备树 。
&dsi {
status = "okay";
// rockchip,lane-rate = <480>;
panel@0 {
compatible = "ilitek,ili9881d", "simple-panel-dsi";
reg = <0>;
backlight = <&backlight>;
power-supply = <&vcc18_lcd_n>;
prepare-delay-ms = <5>;
reset-delay-ms = <1>;
init-delay-ms = <80>;
disable-delay-ms = <10>;
unprepare-delay-ms = <5>;
width-mm = <68>;
height-mm = <121>;
// reset-gpios = <&gpio0 RK_PA2 GPIO_ACTIVE_LOW>;
dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
dsi,format = <MIPI_DSI_FMT_RGB888>;
dsi,lanes = <4>;
panel-init-sequence = [
15 00 02 80 8B
15 00 02 81 78
15 00 02 82 84
15 00 02 83 88
15 00 02 84 A8
15 00 02 85 E3
15 00 02 86 88
];
display-timings {
native-mode = <&timing0>;
timing0: timing0 {
clock-frequency = <53000000>;
hactive = <1024>;
vactive = <600>;
hback-porch = <160>;
hfront-porch = <160>;
hsync-len = <10>;
vback-porch = <23>;
vfront-porch = <12>;
vsync-len = <1>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel_in_dsi: endpoint {
remote-endpoint = <&dsi_out_panel>;
};
};
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@1 {
reg = <1>;
dsi_out_panel: endpoint {
remote-endpoint = <&panel_in_dsi>;
};
};
};
};
注意: lane-rate 不配置时,时钟在驱动中会自动计算,所以多事情况下都会屏蔽即可 。
设备树修改说明 看着设备说的信息很多,不要怕,其实很简单,对应的注释这里我就不详细说明了,网上也有很多博客介绍,此笔记主要是记录流程以及遇到的一些问题 。
clock-frequency 计算 。
clock-frequency = 水平总周期 * 垂直总周期 * 帧率(取一个相近值即可)
clock-frequency = (hactive + hback-porch + hfront-porch + hsync-len) * (vactive + vback-porch + vfront-porch + vsync-len) * fps
文档位置 。
Kernel (develop-4.4) drivers/gpu/drm/rockchip/dw-mipi-dsi.c drivers/phy/rockchip/phy-rockchip-inno-video-combo-phy.c Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt Documentation/devicetree/bindings/phy/phy-rockchip-inno-video-combo-phy.txt 。
U-Boot (next-dev) drivers/video/drm/dw_mipi_dsi.c drivers/video/drm/inno_video_combo_phy.c 。
U-boot (rkdevelop) drivers/video/rockchip-dw-mipi-dsi.c drivers/video/rockchip-inno-mipi-dphy.c 。
注意: 一般调试 DSI 不用修改驱动文件,只需要修改设备树即可 。
确认驱动加载 注意: Drm 驱动的加载存在依赖关系,所以可能会多次因为驱动资源暂时获取不到而返回 -EPROBE_DEFER(-517),但是只要配置正确,待相关组件驱动能够完整获取到资源后,最终就会 bound 成功.
当前显示信息 。
查看 LCD 信息 。
不论修改设备树中的说明内容,显示屏都无明显变化 解决办法:可能是设备树不是当前使用的 。
左半边花屏 解决办法:检查设备树配置的尺寸,降低时钟 。
横竖屏转换 解决办法:这个需要注意 LCD 的扫描方式,有的 LCD 可能是通过命令配置,有的可能是通过硬件配置.
最后此篇关于RV1126DSI调试的文章就讲到这里了,如果你想了解更多关于RV1126DSI调试的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
昨晚我因为这个问题脑子崩溃了。在确保没有来 self 的 eclipse 错误检查的明显错误之后,我开始调试我的程序。顺便说一下,我正在使用 Jre7。无论如何,每次我进入我的类调用(我们称之为“a”
(前言:我对 C/C++ 还很陌生,我真的不知道 native 代码中的调试实际上是如何工作的。) 一些消息来源说 gdb 和 lldb 可以调试 any program compiled to ma
我正在尝试从 Visual Studio 2012 外部调试 T4Scaffolding.Core Nuget 包。我使用的是安装了 Powershell 3.0 的 Powershell ISE,并
如何调试汇编代码?我在 Linux 上使用 gdb。我知道我可以看寄存器。有哪些调试汇编代码的方法? 最佳答案 您当然可以使用 breakpoints就像 C 或任何其他编译语言一样。 This ar
如何在每次通话时打印列表或 haskell 中的内容,例如: funct a list = funct (a + 1) (a : list) print list her
让我用我对 Makefiles 或 make 知之甚少的评论作为这个问题的前缀。 有一个非常大的项目,每晚自动构建。它以 Debug 和 Release 模式构建,Debug 用于 Valgrind
我正在创建一个计算每周工资的程序,那么任何加类工资都是该周正常工资的 1.5 倍。我的代码如下: #include int main() { double payrate; double h
我使用的是 Visual Studio 2010 Express Developer 版本。开发网站。我在我的 .aspx 页面中使用 JavaScript。 如何在 Javascript 中放置断点
我最近开始修补 Project Euler 问题,并尝试用 Javascript 解决它们。这样做我往往会产生许多无限循环,现在我想知道是否有比终止 Firefox 或 Chrome 中的选项卡更好的
有没有办法在程序执行期间生成一个交互式 python 控制台(最好是 iPython)而不暂停主程序并且能够检查和修改程序变量?类似于浏览器为 JavaScript 提供的功能。 我知道 pdb.se
我正在使用 FFmpeg @ Android 并希望能够进入 FFmpeg 代码(Eclipse + Seqouya),同时编译 FFmpeg 我使用 --disable-stripping --en
我从使用互操作调用 win32 api 函数的 .net 进程中得到一个异常。 我有一个调试器,我想查看 LastError 的值。 是否可以从 Visual Studio 调试器中查看 LastEr
我正在尝试通过 VBA 创建一个宏,以在 IE 的多个选项卡中打开一组指定的链接。目前我正在使用下面的代码,如果我试图打开 3 个或更少的选项卡,它大部分时间都可以工作。任何超过 3 的代码都会在“N
好的,这似乎是一个愚蠢的问题,因为 MonoDevelop 越来越成熟,所以我确定我只是想念它,但我环顾四周,所有关于这个主题的问题似乎都是关于远程调试或 Mac 上的调试。 我使用的是 Ubuntu
如何调试 Rscripts是从命令行运行的? 我目前正在使用 getopt传递命令行选项的包,当有错误时,我很难: 看看到底出了什么问题; 在 R 中交互式调试(因为脚本需要命令行选项。) 有没有人有
支持 PDF 和网络上的信息很少。我碰巧在博客中看到一篇文章,提到 $.write() 或 $.writeln() 将向 javascript 控制台写入一个字符串。相当有用。有谁知道这个 $ 对象是
PyCharm 1.5 中是否可以使用 Firefox 和 Chrome 支持的 JavaScript 调试? 如果是这样,它能否与 Python/Django 调试器一起有效运行? 如果没有,有没有
我确定这以前发生在人们身上,某些东西在 Debug模式下工作,你在发布时编译,但有些东西坏了。 这发生在我在嵌入式 XP 环境中工作时,我发现最好的方法确实是编写一个日志文件来确定它会出错的地方。 您
我目前正在为即将到来的项目评估 Flow3。 AOP 模式和依赖注入(inject)将非常适合我们的目的。 现在我想不通的是如何在 Controller Action 中调试一些结果。 public
最初,我有一个包含测试服务器的 Django 应用程序。要调试此设置,我只需添加 import pdb; pdb.set_trace()代码中的任何位置,并且有一个断点将我扔到终端中的交互式调试器中(
我是一名优秀的程序员,十分优秀!